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次,或则配置文件发生了变化,则重新处理:
全部0条评论
快来发表一下你的评论吧 !