MQTT测试程序上机实验

描述

13.6.5 MQTT测试程序上机实验

把mqtt_test、paho.mqtt.c.tar.bz2放到Ubuntu上同一个目录下。

1.编译paho库

在Ubuntu下执行如下命令:

左右滑动查看完整内容

 

$ tar xjf paho.mqtt.c.tar.bz2
$ cd paho.mqtt.c

 

修改CMakeLists.txt,在最前面增加如下内容:

左右滑动查看完整内容

 

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_C_COMPILER aarch64-poky-linux-gcc)
SET(CMAKE_CXX_COMPILER aarch64-poky-linux-g++)
set(CMAKE_SYSROOT /opt/remi-sdk/sysroots/aarch64-poky-linux)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

 

然后执行如下命令编译:

左右滑动查看完整内容

 

$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux 
$ mkdir build
$ cd build
$ cmake ../ -DCMAKE_INSTALL_PREFIX=output
$ make
$ make install

 

如果一切顺利,会在build目录下生成一个output目录(有些错误信息提示权限问题,无关紧要),里面有很多库文件。内容如下:

 

$ ls output/
bin include lib share

 

把头文件、库文件复制到工具链里:

左右滑动查看完整内容

 

$ sudo cp -rf output/include/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/include/
$ sudo cp -rfd output/lib/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/lib64/

 

把output目录压缩,上传到开发板:

左右滑动查看完整内容

 

$ tar cjf output.tar.bz2 output/
$ scp output.tar.bz2 root@192.168.5.9:/mnt

 

在开发板里解压output.tar.bz2文件,复制库文件到“/usr/lib64”,命令如下:

左右滑动查看完整内容

 

# cd /mnt
# tar xjf output.tar.bz2
# cd output/lib
# cp -d libpaho* /usr/lib64/

 

2.编译测试程序

在Ubuntu上执行如下命令:

左右滑动查看完整内容

 

$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ cd mqtt_test
$ make
$ scp mqtt_test root@192.168.5.9:/mnt

 

3.测试

按照《13.6.3 PC MQTT工具使用》,先启动MQTT服务软件,然后再启动MQTTX,如下配置、连接:

命令

在MQTTX里订阅主题为“/iot/up”的消息,发送主题为“/iot/down”的消息,如下图所示:

命令

最后,在开发板上执行mqtt_test程序,如下:

命令

13.7 MQTT程序开发

源码为:

命令

13.7.1 程序流程

程序主要有2大功能:

①根据配置文件,周期性地读“点”、发布消息

②订阅消息,根据消息写“点”

这些功能可以细分如下:

①通过RPC获得MQTT信息

②通过RPC获得“点”的信息

③连接MQTT Broker

④订阅消息

⑤周期性地读“点”,发布消息

在程序运行过程中,用户可能使用前台程序修改了配置,比如修改了MQTT Broker的信息、增加、删除的点,并且程序运行过程中可能发生错误。这就需要重新运行程序:重新运行上述5个细分步骤。

本程序使用状态机来实现,有如下状态:

命令

在main函数中,根据当前状态进行对应处理。

命令

13.7.2 监测配置文件

前台程序会导致配置文件被修改,需要监测配置文件是否发生了变化。使用的函数在cfg.c里,它们的代码在《13.4.2 配置文件的操作》讲解过。

main.c的main函数里,调用的代码如下:

命令

13.7.3 初始化RPC连接

需要使用RPC调用得到MQTT信息、得到点的信息。所以第1个状态代码如下:

命令

13.7.4 获取MQTT信息

要进行MQTT连接,需要获得MQTT信息,代码如下:

命令

13.7.5 获取点的信息

后续要读点、上报点的信息,所以需要使用RPC调用获得、记录所有点的信息,代码如下:

命令

13.7.6 连接MQTT

代码如下:

命令

13.7.7 订阅消息

代码如下:

命令

13.7.8 发布消息

发布消息时,如果没有错误,则已知保存在本状态:循环发布消息。代码如下:

命令

13.7.9 订阅消息的处理

在前面设置了MQTT回调函数,当接收到订阅的消息时,使用如下函数处理:

①解析接收到的信息,根据它找到“点”

②写点

命令

13.7.10 错误处理

如果发生的错误累计达到10次,或则配置文件发生了变化,则重新处理:

命令

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分