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