MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
1.摘自:RT_Thread-组件-网络组件-net组件
AT 命令一开始并没有那么丰富,一开始是用作拨号的功能,也就是电话业务方面的内容。
后来随着时间发展,AT 命令的范围也一步步进行了扩展,而逐渐支持了网络的一些功能,例如 TCP ,UDP 的功能;而到现在,有些模块厂商甚至直接使用 AT 命令扩展的方式,实现了诸如 MQTT,HTTP,HTTPS 之类的功能。 这些使用扩展 AT 命令方式实现的上层应用对模块依赖度高,不利于软件在不同模块间适配移植,在 RT Thread 的 IOT Package 的栏目中,可以留意到这样的软件包,例如:bc28_mqtt。
RT-Thread 的 AT socket 功能,则是更接近底层,实现 TCP UDP 这样的接口,通过 SAL 来实现 MQTT 这种上层应用。
2.摘自:杨奉武的博客
其实MQTT就是一个TCP服务器,它是在TCP通信的时候封装了一套协议.(应用层协议)咱们就叫它MQTT协议,
注意:本质上就是TCP传输数据,这个数据有格式而已!/
来说一下具体的MQTT协议
1,首先咱知道就是个TCP服务器,所以呢,需要先用TCP连接上他们的服务器
2,咱用Android ,C#,QT,网页等等连接MQTT服务器的时候有现成的封装好的库可以用,其实说白了就是调用函数而已…
3,但是对于单片机而言要想实现MQTT通信,那么就需要借助网络模块,大部分的网络模块都可以实现TCP通信,咱呢,就需要在TCP的基础上按照MQTT协议封装下咱的数据
注:其实官方给了现成的MQTT的封装数据和解析数据的程序)
https://docs.emqx.io/sdk_tools?category=MQTT_Clients (官方提供的各个开发的库)
单片机用这个 Embedded C,库功能很全,但是占用内存有点大,有能力的可以尝试自己重新封装.
总结:直接使用MQTT相关AT指令实现mqtt通信,复杂度高,软件对模组依赖程度高,不利于软件移植,所以我们呢,一般用基于TCP/IP的mqtt实现方式,移植mqtt软件包
或者直接登录https://github.com/eclipse/paho.mqtt.embedded-c下载mqtt库
3.摘自:几步实现stm32上面移植mqtt
做项目思路:不管采用4G模组、ESP8266、W5500以太网芯片,做好先用官方的TCP例子将TCP调通,而且能保证访问外网(),先让TCP和mqtt服务器建立TCP连接再调用mqtt的连接,发布等API,这样比较好调试
var code = “cd799015-bf33-4292-9abc-252ee537cbaa”