第13章 Linux上位机开发
13.1 功能分析与最终源码
最终源码在如下目录里:
13.1.1 硬件连接
参考《11.5 Modbus RTU客户端编程与实验》连接TTL转485模块,连接Modbus RTU传感器。在板子上先插上USB鼠标,连接HDMI显示器,然后启动开发板。
13.1.2 运行程序
把网盘中如下可执行程序放到板子上,假设放在/mnt目录下:
解压后,它里面有2个目录:mnt里存放应用程序,usr目录下存放库文件。在板子上执行如下命令:
mnt usr
移除出厂自带的GUI,在开发板执行如下命令:
然后运行如下命令启动程序:
# ./modbus_server_tcp 127.0.0.1 & // 运行模拟 modbus rtu 协议传感器的程序
# ./control_center server & // 运行后台程序
# ./demo_lv_modbus_tool & // 运行前台程序
# ./mqtt_client_app // 运行 MQTT 程序
执行上述命令后,可以在HDMI界面看到操作界面。参考《13.1.4界面》,使用鼠标在控制界面上添加点、设置MQTT信息。然后就可以通过界面观察、控制传感器了。
要使用MQTT,需要先学习《13.6 MQTT开发基础》:
①在开发板界面设置MQTT信息
②启动MQTT Broker
③MQTT客户端可以如下设置:
在MQTT客户端,订阅“iot/up”主题的信息。
要控制传感器,需要在显示屏控制界面添加“点”,才能发布“iot/down”主题的信息去控制这个点,信息格式如下(注意大小写):
{"port_info": "/dev/ttySC4,115200,8N1","dev_addr": 3,"reg_addr": 0,"reg_type": "0x",
"value": 0}
13.1.3 从源码编译程序
先配置环境,在Ubuntu执行:
$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
1. 编译libev库
操作命令如下:
$ tar xjf libev.tar.bz2
$ cd libev/
$ ./configure --prefix=$PWD/tmp --host=aarch64-poky-linux CFLAGS="-mtune=cortex-a55
-fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-s
ecurity -Werror=format-security --sysroot=/opt/remi-sdk/sysroots/a
arch64-poky-linux"
$ make -j 16
$ make install
$ ls tmp/
include lib share
$ sudo cp -rf tmp/include/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/include/
$ sudo cp -rfd tmp/lib/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/lib64/
把库复制到开发板上,在Ubuntu上执行如下命令:
$ scp tmp/lib/*so* root@192.168.5.9:/usr/lib64/
2. 编译jsonrpc库
操作命令如下:
$ tar xjf jsonrpc-c.tar.bz2
$ cd jsonrpc-c/
$ autoreconf -i
$ ./configure --prefix=$PWD/tmp --host=aarch64-poky-linux CFLAGS="-mtune=cortex-a55
-fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-s
ecurity -Werror=format-security --sysroot=/opt/remi-sdk/sysroots/a
arch64-poky-linux"
$ make -j 16
$ make install
$ ls tmp/
include lib
$ sudo cp -rf tmp/include/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/include/
$ sudo cp -rfd tmp/lib/* /opt/remi-sdk/sysroots/aarch64-poky-linux/usr/lib64/
把库复制到开发板上,在Ubuntu上执行如下命令:
$ scp tmp/lib/*so* root@192.168.5.9:/usr/lib64/
3. 编译libmodbus库
参考《11.4.1 编译安装》。
4. 编译MQTT库
参考《13.6.5 MQTT测试程序上机实验》。
5. 编译LVGL程序
操作命令如下:
$ tar xjf demo_lv_modbus_tool.tar.bz2
$ cd demo_lv_modbus_tool/
$ mkdir build
$ cd build
$ cmake ..
$ make -j 16
$ ls ../bin/
demo_lv_modbus_tool
6. 编译后台程序
操作命令如下:
$ tar xzf control_center.tar.bz2
$ cd control_center
$ make
生成“control_center”可执行程序。
7. 编译MQTT程序
操作命令如下:
$ tar xjf mqtt_client.tar.bz2
$ cd mqtt_client
$ make
生成“mqtt_client_app”可执行程序。
8. 编译Modbus TCP程序
操作命令如下:
$ tar xjf modbus_client.tar.bz2
$ cd modbus_client
$ make
生成“modbus_server_tcp”可执行程序。
13.1.4 界面
在前台程序,可以增加、修改、删除“点”(“点”是工业控制领域的概念,参考《13.2.2前后台的交互》)。可以读取“点”、写“点”。还可以设置MQTT参数、升级某个传感器程序。
1. 整体界面
运行程序后,会根据“/etc/control.cfg”生成界面。第1次运行程序是没有“/etc/control.cfg”文件,你在屏幕上看到的是空白界面。如果“/etc/control.cfg”内容如下:
{"port_info": "/dev/ttySC4,115200,8N1", "dev_addr": 3, "reg_addr": 0, "reg_type": "0x
", "period": 300}
{"port_info": "/dev/ttySC4,115200,8N1", "dev_addr": 3, "reg_addr": 1, "reg_type": "3x
", "period": 300}
{"port_info": "/dev/ttySC4,115200,8N1", "dev_addr": 3, "reg_addr": 0, "reg_type": "3x
", "period": 300}
{"broker": "192.168.5.10", "port": 1883, "client_id": "dev_019999", "user": "100ask99
", "password": "100asktech99", "publish": "/iot/up", "subcribe": "
/iot/down"}
则可以看到如下界面:
2. 添加/设置点位
点击右上角的加号,可以添加一个“点位”,界面如下(可以选择使用RTU协议或TCP协议,可以设置读取周期,可以设置设备地址、寄存器地址、寄存器类别):
3. MQTT设置界面
点击“MQTT Setting”后,设置界面如下:
3. 升级传感器
点击“Update”后,界面如下:
本界面仅供演示,并未实现升级功能:因为传感器如何升级,取决于传感器内部实现,我们无法得知升级方法。
需要产品及方案支持
请扫码登记
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
Modbus RTU客户端及服务器端的编程与实验 - RZ MPU工业控制教程连载(43)
Modbus TCP编程与实验 - RZ MPU工业控制教程连载(44)
LVGL开发入门 - RZ MPU工业控制教程连载(45)
需要产品及方案支持
请扫码登记