引子:最近在做物联网这一块,需求是根据传感器推送过来的数据,动态实时展示到前端页面
由于没做过这一块,之前只搭建过mqtt服务器,经过一番波折之后,了解到传感器的数据传送原理是这样的:
首选传感器(目前用的是温湿度传感器测试)通电后,将收集到的数据推送到支持mqtt通讯的转换器上面,转换器链接自己的mqtt服务器,并且对默认订阅和推送主题进行写码之后,在自己的项目中链接上mqtt服务器,并且订阅该转换器默认推送主题,启动项目后,每隔一秒,转换器就会收到传感器推送的数据,然后通过主题推送到项目里面来.
最坑的来了
由于转换器上默认mqtt是透传的,就是说收到什么内容就会推送什么内容,然后传感器是使用RS485输出,用的是MODBUS-RTU数据帧格式,也就是说项目中接收到的是字节流,但是spring-mqtt默认配置不支持接收字节流文件,所以导致控制台输出的数据一直是乱码.
下面是开启spring-mqtt支持接收字节流数据方式
1.引入maven
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
2.inbound函数中开启bytes转换器
// 设置转换器,接收bytes
DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
converter.setPayloadAsBytes(true);
adapter.setConverter(converter);