本文以實現串口MQTT服務器為項目目標,展開講解,介紹如何通過EsDA工具和MPC-ZC1平臺,進行應用開發,逐步完成項目需求。
簡介
工業串口服務器,以提供串口與網絡服務器之間的雙向數據透明傳輸為核心業務。在不用修改原有產品系統的情況下,為串口設備提供了便捷的聯網通道,即擴展了物聯網功能,又保障了原有系統的穩定性。
串口端主要為 RS-232、485、422 等接口,網絡端通常為 TCP、UDP、MQTT、HTTP 等協議服務器。
本文以實現串口MQTT服務器為項目目標,展開講解,介紹如何通過 EsDA 工具和 MPC-ZC1 平臺,進行應用開發,逐步完成項目需求。
?前期準備
可通過 EsDA MPC-ZC1 入門篇相關文章,掌握 EsDA 基本開發流程:
- EsDAMPC-ZC1入門(一)——軟件安裝
- EsDAMPC-ZC1入門(二)——LED控制
一、項目需求
項目開發前,先對項目需求進行梳理和拆解,主要有以下幾點:
支持串口通信;
支持MQTT通信;
串口與MQTT服務器實現數據透傳;
支持串口和MQTT服務器控制 LED 顯示。
* 本文僅以 LED 作為擴展業務,可根據實際需求進行擴展。
二、業務框圖
根據項目需求,大致將系統劃分為以下幾大模塊:
1. 串口通信
實現串口的數據收發功能;
實現串口基本參數配置功能(波特率、奇偶校驗位、數據位)。
2. MQTT通信
- 實現MQTT客戶端功能;
- 配置目標服務器地址、端口;
- 發布和訂閱指定主題。
3. 數據解析
- 解析數據流中的控制命令
4. 數據分發
- 將解析出來的數據分發到其他模塊
業務開發
可通過 EsDA MPC-ZC1 入門篇相關文章,掌握 EsDA 基本開發流程:
一、串口通信
實現串口通信模塊,需要使用到串口相關的 AWFlow 節點,包括 serial_ex、serial_in_ex、serial_out_ex 3個節點。1. 節點介紹1.1 serial_ex串口配置節點,屬于隱式節點,不會被顯示在畫布中,需要配套對應的功能節點一起使用。1.1.1 屬性
- 名稱(name):節點名稱,用于索引查找本節點;
- 顯示名稱(displayName):用于畫布上顯示的名稱;
- 端口(port):用于索引串口設備;
- 波特率(baudrate):串口波特率參數;
- 字節大?。╞ytesize):數據位參數;
- 奇偶校驗(parity):串口奇偶校驗位參數;
- 停止位(stopbits):串口停止位參數;
- 流控(flowcontrol):串口流控模式配置;
- 幀超時(frame_timeout):收到數據后的總體等待時間;
- 幀長度(frame_length):期望收據的數據長度;
- 碼間超時(intersymbol_timeout):字節間的最大超時時間。
其中幀超時、幀長度、碼間超時可用于分包應用,3個參數可同時使用,任意一個條件滿足都會觸發分包。
* 配置節點(config類型)只存在節點屬性,不具備輸入輸出功能。
1.2 serial_in_ex
串口接收節點,負責讀取指定串口接收到的數據。1.2.1 屬性
名稱(name):節點名稱,用于索引查找本節點;
顯示名稱(displayName):用于畫布上顯示的名稱;
- 配置節點名稱(config):綁定一個串口配置節點;
1.2.2 輸入* pump類型節點通常不具備數據輸入。1.2.3 輸出
payload:讀取到串口接收的數據,字符串(可按二進制提?。?/p>
payloadLength:數據長度,uint32_t 類型;
payloadType: payload 的數據類型,用于后續節點數據處理;
istream:數據流對象,保存著串口接收的原始數據流;
*當幀超時、幀長度、碼間超時其中任意參數有效時,輸出payload 格式,否則輸出 istream。
1.3 serial_out_ex
串口發送節點,將上級節點輸出的數據發送至串口發送接口。
1.3.1 屬性
名稱(name):節點名稱,用于索引查找本節點;
顯示名稱(displayName):用于畫布上顯示的名稱;
配置節點名稱(config):綁定一個串口配置節點。
1.3.2 輸入
payload:負載數據,字符串類型(也可按二進制轉換);
payloadLength:負載數據長度,uint32_t類型;
payloadType:指示payload的數據類型;
istream:數據流對象。
*支持輸入 payload 和 istream 數據,優先使用 istream。
1.3.3 輸出
* sink類型節點通常不具備數據輸出。
2. 回發驗證
我們通過一個串口數據回發功能來驗證串口通信模塊。
2.1添加節點
添加 serial_in_ex 和 serial_out_ex 節點到畫布上。
2.2配置節點
雙擊 serial_in_ex 節點,打開屬性面板。
選擇“添加新的 serial_ex 節點”,點擊編輯配置,進入配置節點屬性面板。
串口設備:Uart1;
波特率:115200;
字節大?。?bits;
奇偶校驗:None
停止位:1bits;
流控:None;
幀超時:100;
幀長度:0;
碼間超時:0。
點擊添加,完成配置。
可以看到已經創建了一個新的配置節點,名為 serial_ex,繼續點擊完成,結束接收節點的配置。
同樣的,雙擊 serial_out_ex 節點,打開屬性面板,直接選擇剛剛創建的配置節點。
點擊完成,保存配置。
2.3繪制流圖
將serial_in_ex與serial_out_ex節點進行連接。
2.4下載驗證
確保硬件正確連接。
選擇流圖下載接口。
點擊下載。
完成流圖下載,通過串口工具進行數據回發測試。
二、MQTT通信
實現 MQTT 通信模塊,需要使用到相關的AWFlow節點,包括mqtt_config、mqtt_in、mqtt_out3個節點。
1. 節點介紹
1.1 mqtt_config
MQTT 配置節點,屬于隱式節點,不會被顯示在畫布中,需要配套對應的功能節點一起使用。
1.1.1 屬性
名稱(name):節點名稱,用于索引查找本節點;
顯示名稱(displayName:用于畫布上顯示的名稱;
主機地址(host):目標服務器域名(IP地址);
端口(port):目標服務器網絡端口;
重連間隔(retry-interval):MQTT后臺服務重連時間間隔,單位毫秒;
客戶端ID(client-id):MQTT客戶端ID;
用戶名(user-name):MQTT客戶端用戶名;
密碼(password):MQTT客戶端密碼;
保活包發送間隔(keep-alive-interval):保活數據包發送周期,單位秒;
清除會話(clean-session):使能自動清除歷史會話;
上線主題服務質量等級(online-topic-qos):上線QoS服務質量;
上線主題(online-topic-topic):上線主題;
上線主題數據(online-topic-data):上線主題數據;
遺囑主題服務質量等級(last-will-qos):遺囑QoS服務質量;
遺囑主題(last-will-topic):遺囑主題;
遺囑主題數據(last-will-data):遺囑主題數據;
使能SSL(enable-ssl):使能SSL加密功能;
根證書路徑(root-ca-ssl):根證書文件全路徑;
客戶端證書路徑(client-certificate-path):客戶端證書文件全路徑;
客戶端密鑰路徑(client-private-key-path):客戶端密鑰文件全路徑。
MQTT 配置屬性項比較多,但好在節點中已經內置了常用的默認配置,用戶僅需根據應用修改所需屬性項即可。
* 配置節點(config類型)只存在節點屬性,不具備輸入輸出功能。
1.2 mqtt_in
MQTT 訂閱節點,提供訂閱指定主題的功能。
1.2.1 屬性
- 名稱(name):節點名稱,用于索引查找本節點;
- 顯示名稱(displayName):用于畫布上顯示的名稱;
- 主題(topic):配置需要訂閱的主題;
- 消息質量(qos):QoS主題服務質量等級;
- 配置(config):綁定一個MQTT配置節點。
1.2.2 輸入
pump類型節點通常不具備數據輸入。
1.2.3 輸出
- topic:主題標識,字符串類型;
- payload:負載數據,指針(pointer)類型;
- payloadLength:負載數據長度,uint32_t類型。
1.3 mqtt_out
MQTT 發布節點,向服務器發布指定主題數據。
1.3.1 屬性
名稱(name):節點名稱,用于索引查找本節點;
顯示名稱(displayName):用于畫布上顯示的名稱;
消息質量(qos):QoS主題服務質量等級;
主題(topic):發布的主題;
配置(config):綁定一個MQTT配置節點。
1.3.2 輸入
- topic:發布主題名稱;
- payload:負載數據;
- payloadLength:負載數據長度,uint32_t類型;
1.3.3 輸出
* sink類型節點通常不具備數據輸出。2. 回發驗證我們通過一個MQTT數據回發功能來驗證MQTT通信模塊。2.1 添加節點添加 mqtt_in 和 mqtt_out 節點到畫布上。
2.2 配置節點
雙擊 mqtt_in_ex 節點,打開屬性面板。
選擇“添加新的 mqtt 節點”,點擊編輯配置,進入配置節點屬性面板。
該節點已經內置好大部分常用的配置信息,此處,我們僅修改3個必須的屬性項:
主機地址:broker.emqx.io;
端口號:1883;
重連間隔:1000。
點擊添加,完成配置。
可以看到已經創建了一個新的配置節點,名為 mqtt,同時我們配置一個訂閱主題 EsDA-MQTT-Down ,繼續點擊完成,結束接收節點的配置。
同樣的,雙擊mqtt_out節點,打開屬性面板,直接選擇剛剛創建的配置節點,同時配置一個發布主題EsDA-MQTT-Up 。
點擊完成,保存配置。
2.3 繪制流圖
將 mqtt_in 與 mqtt_out 節點進行連接。
2.4 下載驗證
確保硬件正確連接,需要4G天線,以及一張可正常聯網的SIM卡。
選擇流圖下載接口。
點擊下載。
完成流圖下載后,可通過MQTT客戶端工具進行數據回發測試。
此處我們選擇MQTTX,下載鏈接
https://www.emqx.com/zh/downloads/MQTTX/1.8.2/MQTTX-Setup-1.8.2-x64.exe
下載結束并完成MQTTX客戶端的安裝,啟動MQTTX客戶端軟件。
點擊新建連接,創建MQTT連接,如下進行配置。
點擊連接,完成客戶端配置,進入連接后,添加訂閱主題。
訂閱MPC-ZC1發布的主題EsDA-MQTT-Up 。
最后發布MPC-ZC1訂閱的主題EsDA-MQTT-Down 。
輸入發布的內容EsDA MQTT Test Message!,點擊發布主題,隨后可以收到 MPC-ZC1 回發同樣的內容。
三、串口MQTT透傳
前面我們已經完成串口通信、MQTT通信功能,并進行數據回發測試,接下來我們要完成本項目的核心功能,串口與MQTT服務器之間的數據透明傳輸。
從前面兩次數據回發的流圖中,我們很容易想象到如下圖所示的方式進行流圖變換。
沒錯,只需將2條回發的數據流進行交換連接,即可達到2個通信接口的數據透明傳輸。為了流圖簡潔性,我們進行節點的位置調整,如下所示。
下載流圖,進行透傳測試,效果如下圖。
至此,我們完成串口服務器的核心功能,數據透明傳輸。后續我們會繼續圍繞串口服務器項目,進行業務的擴展,增加透傳命令來控制設備上的LED。
【版權聲明】本文為ZLG開發者社區用戶原創內容,未經授權不得轉載。歡迎更多用戶到社區交流互動、創作博文,一經采用,可獲得百元京東E卡。
-
服務器
+關注
關注
12文章
9123瀏覽量
85324
發布評論請先 登錄
相關推薦
評論