嵌入式技术william hill官网
直播中

张亮

7年用户 1313经验值
私信 关注
[问答]

如何去实时接收这些AT+MQTT+JSON数据呢?

接触RT-thread以来,一直觉得RT-thread是一个不错的操作系统,然而在项目中使用时就遇到诸多难题,

比如现在客户提出的一个要求,就让我很难理解。

要求是:

使用MQTT协议进行数据交互,但是数据格式要使用JSON。
在项目中使用了EC200S,内部自带了MQTT协议,如果是裸机,当然很好使用。

但是现在使用AT组件对EC200S进行控制,而AT命令中对数据的\r\n很敏感,这就为我的数据解析带来困难,因为从平台下发的数据很多时候不知道长度,也不知道数据中有多少\r\n,目前只能希望Mqtt软件包能够弥补这个缺点。

还有一个问题就是平台随时会下发命令,我如何去实时接收这些数据呢?

希望有做项目的朋友们能给点建议。十分感谢!

回帖(5)

张虎豹

2023-1-11 14:44:30
如果用at组件,配合sal的话,很好解决的,可以用mqtt软件包(不依赖模块的mqtt命令)
个人觉得kawaii-mqtt比较好用,有mqtt软件包,服务器发回的数据直接在回调函数处理就行,无论服务器发的是什么
要解析json的话要稍微麻烦一点,但json也有软件包
举报

张亮

2023-1-11 14:44:40
解析没有什么问题,主要是实时接收的事情,很难搞。
举报

张虎豹

2023-1-11 14:44:52
如果用mqtt软件包就不需要考虑这些东西,有回调函数,软件包收到数据就调用回调函数
如果想用模块的at mqtt指令,就得自己写接收发送函数,添加相关的接收urc做处理
举报

其实znvm

2023-1-11 14:45:07
使用AT Client,配合SAL(Socket Abstract Layer),实现TCP/IP的稳定连接;
使用Kawaii-MQTT软件包,实现MQTT Client;
调用mqtt_connect, mqtt_subscribe实现MQTT Client连接远程MQTT Broker;
Kawaii-MQTT中有丰富的回调函数,如上线回调、收到订阅主题消息的回调等。在订阅回调函数中,收到数据后,写数据到Ringbuffer,发信号量/事件(视你需求而定);
新建一个线程,读取ringbuffer数据,完成数据解析。RT-Thread也有对应的cjson软件包帮助处理。
上述流程,我除了5没有做之外,其他都很轻松能完成。
举报

青sky

2023-1-11 14:45:26
EC200 AT指令模式接收数据应该有string和hex两种方式,用string方式会存在解析rn会出问题,但是用hex模式就可以避免这种问题。
建议使用模块自带的mqtt功能,做产品的话多一个软件包会增加可能出错的点,特别是网络相关的,吃过大亏
举报

更多回帖

发帖
×
20
完善资料,
赚取积分