STM32+RL-TCPnet+MQTT

本文介绍了一个使用STM32F407+LAN8720的项目,该项目中作者通过RL-TCPnet库实现了MQTT协议。作者详细介绍了如何根据网上的资料自行编写MQTT报文协议,包括连接、发布、订阅等关键操作,并给出了源码示例。在实际操作中,作者注意到不同MQTT服务器可能存在协议细节差异,例如“协议名”字段可能为“MQTT”或“MQIsdp”。此外,测试时要注意每次连接需要使用不同的客户端标识。
摘要由CSDN通过智能技术生成

公司有项目需要用到MQTT协议,使用的是STM32F407+LAN8720.

网上找资料找到了下面这个博主的文章,受益匪浅。

https://blog.csdn.net/qq_39785798/article/details/80765716

 

一开始我也是下载了官方的固件包,paho-MQTT,发现很多函数都用不到,而且transport_open函数是Linux库下面的,移植不方便,我就学习上面这位博主自己写了MQTT的报文协议。

使用的工具和他一样:

MQTT客户端:通信猫。

抓包软件:Wirshark。

抓包时发现有部分协议码和https://mcxiaoke.gitbooks.io/mqtt-cn/content/mqtt/0314-DISCONNECT.html这个版本的不同,譬如:正确连接的报文中的"协议名",3.1.1的协议上是“MQTT”,这里抓包读取的是:“MQIsdp”,可能不同的服务器不一样(不确定),还没有试过其他的MQTT服务器。

基本方法和上面这位博主相同,就修改了协议内容。需要注意一点:测试时没有确保断开的情况下,下次连接需要使用不同的客户端标识(Client Identifier)。

以下是我定义的头文件(MDK复制的注释是乱码,我就不改了,看英文一样的)。

#define        MQTT_TypeCONNECT                            1        //ÇëÇóÁ¬½Ó
#define        MQTT_TypeCONNACK                            2        //ÇëÇóÓ¦´ð
#define        MQTT_TypePUBLISH                            3        //·¢²¼ÏûÏ¢
#define        MQTT_TypePUBACK                                4        //·¢²¼Ó¦´ð
#define        MQTT_TypePUBREC                                5        //·¢²¼ÒѽÓÊÕ£¬±£Ö¤´«µÝ1
#define        MQTT_TypePUBREL                                6        //·¢²¼ÊÍ·Å£¬±£Ö¤´«µÝ2
#define        MQTT_TypePUBCOMP                            7        //·¢²¼Íê³É£¬±£Ö¤´«µÝ3
#define        MQTT_TypeSUBSCRIBE                        8        //¶©ÔÄÇëÇó
#define        MQTT_TypeSUBACK                                9        //¶©ÔÄÓ¦´ð
#define        MQTT_TypeUNSUBSCRIBE                    10        //È¡Ïû¶©ÔÄ
#define        MQTT_TypeUNSUBACK                            11        //È¡Ïû¶©ÔÄÓ¦´ð
#define        MQTT_TypePINGREQ                            12        //pingÇëÇó
#define        MQTT_TypePINGRESP                            13        //pingÏìÓ¦
#define        MQTT_TypeDISCONNECT                     14        //¶Ï¿ªÁ¬½Ó
 
/*MQTTÁ¬½Ó·þÎñ¶ËµÄ¹Ì¶¨±¨Í·*/
#define        MQTT_StaUserNameFlag                    1            //Óû§Ãû±êÖ¾ User Name Flag
#define        MQTT_StaPasswordFlag                    1            //ÃÜÂë±êÖ¾Password Flag
#define        MQTT_StaWillRetain                        0            //ÒÅÖö±£Áô
#define        MQTT_StaWillQoS                                0            //ÒÅÖöQoSÁ¬½Ó±ê

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值