完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
01 Paho MQTTClient EmbeddedC的代码构成
从github上下载下来的源代码,包括三个部分: MQTTPacket : 该文件夹下包括了底层的C代码,提供基本的简单的解析数据,以及将数据串行化的功能。是其他两个上层接口的基础,也可以单独使用。 MQTTClient :该文件夹下提供C++的上层接口,现在提供Linux, Arduino和mbed的实现。 MQTTClient-C:该文件夹下提供C的上层接口,针对那些不支持C++编程的平台。 Demo要用到的就是MQTTPacket和MQTTClient-C这两个文件夹下的源文件。 02 使用Paho MQTTClient EmbeddedC 下面来看看如何使用Paho MQTTClient EmbeddedC在MCU端实现MQTT通信 配置网络传输接口 MQTT是一个TCP之上的应用层协议,它发送和接收数据都要通过下层的TCP/IP协议栈进行。所以MQTT与下层的协议之间一定有一个接口。 Paho的实现会通过结构体Network中的mqttread和mqttwrite成员函数作为接口来从底层网络读取数据以及向底层网络发送数据。因此Paho的适配工作需要注册这些成员函数,并实现之: 新建一个MQTT客户端 MQTTClient结构体的定义包括:接收/发送数据的缓冲区(readbuffer和buf),保持心跳的时间间隔(keepAliveInterval),当前的连接状态(isconnected),消息句柄(messageData)以及网络接口(ipstack)等内容。 调用MQTTClientInit函数时需要输入的参数有:已经初始化好的网络接口(Network*)结构体,COMMAND_TIMEOUT_MS和接收/发送数据的buffer。 初始化MQTTClient后,就可以通过MQTTConnect来和服务器建立连接了。在和服务器建立连接的时候,还需要设定一些和建立连接以及后面通信相关的参数,比如:用户名、密码、心跳包的间隔、遗嘱信息(will)、设备与服务器意外断开后服务器是否要保留后续消息(cleansession)等等。都可以通过对Connect_para进行初始化来设置这些参数,再调用MQTTConnect函数建立相关连接。 |
|
|
|
发送数据
和服务器的MQTT连接建立成功后,就可以发布和订阅消息了。 它有三个输入参数: MQTTClient* c:就是前面新建的MQTTClient const char* topicName:mqtt中每一条消息都是和某个主题相对应的,所以在发布消息的时候一定要指明这条消息是发往哪个主题。 MQTTMessage* message:将要被发送的消息。 除了消息的内容,还需要设定好消息传递的Qos级别以及服务器是否需要保存这条消息等。 接收数据 如果设备端希望能接收服务器发的某个主题的消息,需要做这么几件事: • 向服务器订阅这类消息所属的主题 • 注册用来处理接收到的消息的回调函数 注意,这里同样需要指定一个QoS级别,之后服务器向设备端推送消息的时候,就会按照这个QoS级别进行。在MQTT应用中,即使是同一个设备端和服务器之间的通信,发布消息和订阅消息也可以采用不同的QoS级别。 该函数需要被定期调用,来接收服务器发来的数据。前面注册的消息处理回调函数MQTTcallbackHandler()就是在MQTTYield调用时被执行的。 介绍到这里,相信大家已经能够使用Paho来实现和MQTT服务器的基本通信了。 03 小结一下 对于一个MQTT客户端,MQTT应用先通过MQTTClientInit()建立连接,发布消息就调用MQTTPublish();订阅消息通过MQTTSubscribe(),但是需要同时注册对收到的消息的处理函数,以函数参数的形式传给MQTTSubscribe;对于所订阅的消息,会异步地从云端下发过来,MQTT客户端需要定期调用MQTTYield()来收取并处理。 |
|
|
|
只有小组成员才能发言,加入小组>>
733 浏览 0 评论
1132 浏览 1 评论
2512 浏览 5 评论
2846 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2693 浏览 6 评论
684浏览 7评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
996浏览 3评论
198浏览 2评论
如果mmcblk1boot0启动失败可不可以从mmcblk1boot1启动呢
189浏览 2评论
用核心板GPIO直接控制网卡1的复位信号是否会导致液晶屏初始化失败?
231浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 01:31 , Processed in 1.428688 second(s), Total 83, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号