• 正文
    • 一、嵌入式Linux移植MQTT
    • 二、南北數(shù)據(jù)互通
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

基于嵌入式Linux平臺(tái),數(shù)傳網(wǎng)關(guān)實(shí)現(xiàn)南北向數(shù)據(jù)鏈路互通

04/22 11:30
825
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

我是老溫,一名熱愛(ài)學(xué)習(xí)的嵌入式工程師

上一篇文章,我們?cè)敿?xì)地描述了如何在嵌入式Linux開(kāi)發(fā)平臺(tái)上移植libmodbus庫(kù),實(shí)現(xiàn)了通過(guò)Modbus協(xié)議采集設(shè)備端數(shù)據(jù),可以點(diǎn)擊以下鏈接對(duì)文章進(jìn)行回顧。嵌入式Linux工業(yè)網(wǎng)關(guān)設(shè)計(jì),離不開(kāi)這個(gè)關(guān)鍵核心通信模塊。

除了Modbus通信協(xié)議之外,在網(wǎng)關(guān)產(chǎn)品上面還有一個(gè)非常重要的通信協(xié)議,那就是MQTT。

關(guān)于MQTT的概念,網(wǎng)上已經(jīng)有比較多的文章,此處就不再重復(fù)論述,本篇文章的主要目的,是在嵌入式Linux平臺(tái)上移植部署MQTT通信庫(kù),并且實(shí)現(xiàn)數(shù)據(jù)端的南北向通信。

(南北向通信,南向一般是指通過(guò)Modbus對(duì)接獲取設(shè)備數(shù)據(jù),北向一般是指通過(guò)MQTT上報(bào)數(shù)據(jù)到網(wǎng)絡(luò)服務(wù)器。)

一、嵌入式Linux移植MQTT

虛擬機(jī)系統(tǒng):Ubuntu22.04 LTS嵌入式開(kāi)發(fā)平臺(tái):OK3506J-SLinux內(nèi)核:Linux Kernel 6.1.99交叉編譯工具鏈:arm-linux-gcc

1、有很多流行的MQTT通信庫(kù)可以移植部署到嵌入式Linux平臺(tái),比如Paho MQTT,Mosquitto,MQTT-C 等等,本項(xiàng)目我們選用Mosquitto。


2、下載相關(guān)源碼,在虛擬機(jī)Ubuntu22.04上創(chuàng)建mosquitto-arm目錄,并在該目錄下執(zhí)行以下命令,把mosquitto依賴的相關(guān)源碼下載到該目錄。

wget?https://mosquitto.org/files/source/mosquitto-1.6.12.tar.gzwget?https://sourceforge.net/projects/libuuid/files/libuuid-1.0.3.tar.gzwget?https://www.openssl.org/source/openssl-1.1.1h.tar.gz


3、交叉編譯uuid,解壓后,在libuuid-1.0.3源碼目錄里面,執(zhí)行configure腳本進(jìn)行配置,然后執(zhí)行make && make install?命令,編譯和安裝uuid庫(kù),如下所示。

./configure?--prefix=/opt/work/ok3506j/third_party_libs/mosquitto-arm/libuuid-1.0.3/?CC=/opt/work/ok3506j/toolchains/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-linux-gcc?--host=arm-linuxmakemake install

編譯成功后,會(huì)在源碼目錄下生成include目錄和lib目錄,這兩個(gè)目錄的文件稍后會(huì)用到。

4、交叉編譯openssl,解壓后在openssl-1.1.1h源碼目錄里面創(chuàng)建install目錄,執(zhí)行以下命令對(duì)源碼進(jìn)行配置。

setarch i386 ./config no-asm shared --prefix=/opt/work/ok3506j/third_party_libs/mosquitto-arm/openssl-1.1.1h/install?

5、執(zhí)行以上配置命令后,會(huì)在源碼目錄下生成Makefile文件,執(zhí)行make && make install?命令進(jìn)行編譯和安裝,成功后會(huì)在源碼的install目錄下,生成openssl相關(guān)的頭文件和庫(kù)文件,稍后會(huì)用到。

6、交叉編譯mosquitto,解壓后在mosquitto-1.6.12源碼目錄里面創(chuàng)建install目錄,執(zhí)行以下命令對(duì)源碼進(jìn)行編譯配置。

make?WITH_SRV=no?CC=gcc CXX=g++ CFLAGS="-I /opt/work/ok3506j/third_party_libs/mosquitto-arm/openssl-1.1.1h/install/include -I /opt/work/ok3506j/third_party_libs/mosquitto-arm/libuuid-1.0.3/include -I /opt/work/ok3506j/third_party_libs/mosquitto-arm/openssl-1.1.1h/install/lib -I /opt/work/ok3506j/third_party_libs/mosquitto-arm/libuuid-1.0.3/lib"?LDFLAGS="-L /opt/work/ok3506j/third_party_libs/mosquitto-arm/openssl-1.1.1h/install/lib -L /opt/work/ok3506j/third_party_libs/mosquitto-arm/libuuid-1.0.3/lib -lssl -lcrypto -luuid"

編譯成功后,執(zhí)行以下命令,把mosquitto安裝到源碼的install目錄下。

make?install DESTDIR=/opt/work/ok3506j/third_party_libs/mosquitto-arm/mosquitto-1.6.12/install

安裝成功后,如下圖所示。

7、經(jīng)過(guò)以上步驟,mosquitto通信庫(kù)已經(jīng)交叉編譯成功,把前面幾個(gè)步驟編譯出來(lái)的動(dòng)態(tài)庫(kù)文件和配置文件,復(fù)制到OK3506J開(kāi)發(fā)板的文件系統(tǒng)里面,如下圖所示。

8、至此,mosquitto通信庫(kù)部署移植完成,可以直接在OK3506J開(kāi)發(fā)板上直接運(yùn)行mosquitto相關(guān)的應(yīng)用程序,相關(guān)應(yīng)用程序如下圖所示。

二、南北數(shù)據(jù)互通

前面我們已經(jīng)實(shí)現(xiàn)了Modbus的南向設(shè)備端通信,可以把OK3506J采集到的Modbus數(shù)據(jù),通過(guò)MQTT協(xié)議發(fā)布出去,實(shí)現(xiàn)數(shù)據(jù)南北向互通。

編寫一個(gè)測(cè)試應(yīng)用程序,定時(shí)讀取Modbus-Slave軟件的數(shù)據(jù),模擬一個(gè)工業(yè)耗電量數(shù)值,當(dāng)發(fā)現(xiàn)耗電量數(shù)值發(fā)生變化時(shí),通過(guò)MQTT進(jìn)行數(shù)據(jù)上報(bào)。

我們使用通信貓共享MQTT服務(wù)器:mq.tongxinmao.com,端口是18832,采用無(wú)用戶名和無(wú)密碼的方式進(jìn)行登錄。

在電腦端使用MQTT.fx軟件訂閱modbus/topic這個(gè)主題,OK3506J開(kāi)發(fā)板通過(guò)RS485和Modbus協(xié)議,讀取Modbus-Slave的寄存器0地址數(shù)據(jù),然后通過(guò)MQTT消息發(fā)布出去,MQTT.fx會(huì)在軟件進(jìn)行打印,如下圖所示。

下一步,我們將會(huì)開(kāi)發(fā)一個(gè)上位機(jī)軟件,以便對(duì)網(wǎng)關(guān)設(shè)備進(jìn)行參數(shù)配置和信息獲取,感謝閱讀和關(guān)注!

相關(guān)推薦