隨著物聯(lián)網(wǎng)的迅速發(fā)展,越來(lái)越多的IO設(shè)備需要與云平臺(tái)進(jìn)行通信,以實(shí)現(xiàn)遠(yuǎn)程監(jiān)控和控制。本文將基于EsDA開發(fā)套件快速實(shí)現(xiàn)將IO設(shè)備接入MQTT的應(yīng)用開發(fā),幫助用戶實(shí)現(xiàn)智能互聯(lián)。
簡(jiǎn)介
在物聯(lián)網(wǎng)應(yīng)用中,接入IO設(shè)備是非常重要的一環(huán)。而MQTT作為輕量級(jí)的一種通信協(xié)議,被廣泛應(yīng)用于物聯(lián)網(wǎng)領(lǐng)域。本文將介紹如何使用EPC6450-AWI開發(fā)板,以及圖形化設(shè)計(jì)工具AWFlow Designer將IO設(shè)備接入MQTT,實(shí)現(xiàn)實(shí)時(shí)的數(shù)據(jù)傳輸和遠(yuǎn)程控制。
??項(xiàng)目概述
MQTT是通過(guò)發(fā)布主題來(lái)上傳消息,訂閱相關(guān)的主題來(lái)接收消息。本文將通過(guò)對(duì)EPC6450-AWI核心板 上的IO設(shè)備執(zhí)行數(shù)據(jù)采集和數(shù)據(jù)處理后,將數(shù)據(jù)以發(fā)布MQTT主題消息的形式進(jìn)行上傳;而MQTTX客戶端以訂閱相關(guān)主題來(lái)實(shí)時(shí)監(jiān)控IO設(shè)備相關(guān)的數(shù)據(jù),MQTTX客戶端還可以以發(fā)布主題的形式對(duì)核心板進(jìn)行遠(yuǎn)端控制和消息下發(fā)。
本文的IO設(shè)備主要是button按鍵和ADC數(shù)據(jù)采集,按鍵主要是模擬按下緊急按鈕后上傳緊急戒備的狀態(tài)消息到云端,MQTTX客戶端訂閱緊急狀態(tài)的主題就可以實(shí)時(shí)監(jiān)控并顯示相關(guān)狀態(tài)。ADC數(shù)據(jù)采集是將采集到的數(shù)據(jù)與設(shè)定值對(duì)比,若大于設(shè)定值則發(fā)布數(shù)值過(guò)高報(bào)警的主題,MQTTX客戶端訂閱該主題就可以實(shí)時(shí)顯示ADC數(shù)據(jù)采集的狀態(tài)。本項(xiàng)目大概的邏輯處理可參考下圖。
?項(xiàng)目準(zhǔn)備
客戶可閱讀以下相關(guān)文章,對(duì)MQTT協(xié)議和IO設(shè)備在EsDA上的使用操作上可以有更多的了解:
- 【EsDA?應(yīng)用】常用IO設(shè)備節(jié)點(diǎn)詳解EsDA?MPC-ZC1入門(二)——?LED控制基于?EsDA?MPC-ZC1?快速實(shí)現(xiàn)——按鍵高級(jí)應(yīng)用EsDA?MPC-ZC1應(yīng)用——串口服務(wù)器(一)
1. 上位機(jī)準(zhǔn)備
1.1 下載MQTTX
在官網(wǎng)下載并安裝MQTTX,一款開源跨平臺(tái)MQTT協(xié)議的桌面客戶端。在使用過(guò)程中不需要自行部署MQTT服務(wù)器,使用以下代理地址和端口號(hào)就能進(jìn)行快速測(cè)試,MQTT代理地址:broker.emqx.io,端口號(hào):1883(TCP);8883(SSL)。
1.2 快速建立連接
打開軟件,點(diǎn)擊左側(cè)菜單欄的?“+”?按鈕。如果頁(yè)面為空,也可直接點(diǎn)擊右側(cè)的?+ New Connection來(lái)快速設(shè)定新的客戶端連接。
在創(chuàng)建連接的頁(yè)面上,需要設(shè)置連接服務(wù)器的相關(guān)信息,用戶只需要填寫Name(連接標(biāo)識(shí)名稱,客戶隨機(jī)設(shè)定即可),Client ID(客戶端ID號(hào),客戶隨機(jī)設(shè)定即可),Host(連接的服務(wù)器地址,因?yàn)椴皇亲越ǚ?wù)器,所以使用公用的broker.emqx.io),Port(服務(wù)器對(duì)應(yīng)的端口號(hào)1883)參數(shù)即可,設(shè)置成功后點(diǎn)擊connect按鈕,若網(wǎng)絡(luò)無(wú)礙則等待連接成功即可。
1.3 消息的訂閱與發(fā)布
連接成功后,點(diǎn)擊New Subscription按鈕,在彈窗的Topic編輯框中填寫客戶需要訂閱的主題名稱,填寫后點(diǎn)擊Confirm確認(rèn),則訂閱成功。
若需要發(fā)布主題,則在下圖中的發(fā)布主題編輯框中填寫用戶的發(fā)布主題名稱,內(nèi)容框中填寫發(fā)布主題的內(nèi)容。
MQTTX軟件的更多使用操作,可以查看其官網(wǎng)進(jìn)行閱讀并學(xué)習(xí)。
2. 硬件準(zhǔn)備
- 在標(biāo)有絲印為TF Card 的卡槽處,插入SD卡。在標(biāo)有絲印為DUART的模塊上,將TTL轉(zhuǎn)USB串口模塊的TX與板子絲印為RXD連接,TTL轉(zhuǎn)USB串口模塊的RX與板子絲印為TXD相連;并將串口模塊的USB端口接入電腦。在標(biāo)有絲印為Type-C 的接口處,插上Type-C線,并將Type-C的USB端口插入電腦。在標(biāo)有絲印為NET0?或 NET1的網(wǎng)絡(luò)接口處,插上網(wǎng)線頭,另一端的網(wǎng)線頭插在PC的網(wǎng)絡(luò)接口處。
3. 網(wǎng)絡(luò)搭建
打開串口調(diào)試助手檢索并打開TTL轉(zhuǎn)USB串口模塊的設(shè)備端口號(hào)后,使用shell命令ip addr,查看網(wǎng)口的ip地址,根據(jù)下圖可知,本文使用的網(wǎng)口設(shè)備ip地址是192.168.137.251。
因?yàn)锳WFlow的mqtt節(jié)點(diǎn)是客戶端節(jié)點(diǎn),而訪問(wèn)的mqtt代理地址broker.emqx.io是需要流量的,所以需要通過(guò)PC電腦共享網(wǎng)絡(luò)給開發(fā)板上網(wǎng)。配置PC上的以太網(wǎng)的IP與開發(fā)板的IP地址在同一局域網(wǎng)下。
將PC上的WLAN配置為共享給以太網(wǎng)。
在串口調(diào)試助手輸入shell指令ping www.baidu.com,ping成功即開發(fā)板聯(lián)網(wǎng)成功。
? 項(xiàng)目實(shí)施
本項(xiàng)目業(yè)務(wù)主要分為三個(gè)部分:
- MQTTX客戶端:訂閱核心板設(shè)備發(fā)布的主題,并發(fā)布對(duì)核心板控制和下發(fā)消息的主題;按鍵模塊:報(bào)警按鈕按下則觸發(fā)報(bào)警狀態(tài),并發(fā)布報(bào)警的主題;ADC采集模塊:adc數(shù)據(jù)采集,若采集到的數(shù)值大于設(shè)定值則觸發(fā)數(shù)值過(guò)高報(bào)警,并發(fā)布adc數(shù)值報(bào)警的主題。
1. 流圖繪制
添加mqtt_in,fscript,log,adc,mqtt_out,button節(jié)點(diǎn)到畫布中并連線如下圖。
2. 節(jié)點(diǎn)配置
雙擊mqtt_in節(jié)點(diǎn),配置訂閱的主題以及點(diǎn)擊配置的鉛筆圖標(biāo)對(duì)mqtt_config配置節(jié)點(diǎn)進(jìn)行配置。
在mqtt_config配置節(jié)點(diǎn)中,可以只對(duì)主機(jī)地址,端口以及客戶端id進(jìn)行配置,如下圖,因?yàn)楸玖鲌D所有的mqtt_config節(jié)點(diǎn)配置值都相同,后面不再贅述。
mqtt_in的消費(fèi)者節(jié)點(diǎn)fscript的內(nèi)容是對(duì)訂閱主題的消息進(jìn)行處理并輸出,內(nèi)容如下:
print("receive mqtt topic is "+msg.topic+'n')
rb = rbuffer_create(msg.payload, msg.payloadLength)
f = "receive mqtt data is "
msg.payload = f + rbuffer_read_string(rb)
雙擊adc節(jié)點(diǎn)?,選擇目標(biāo)板對(duì)應(yīng)絲印的ADC通道號(hào)。
作為adc的消費(fèi)者節(jié)點(diǎn),fscript主要目的是對(duì)采集到的adc數(shù)值進(jìn)行處理,因?yàn)楸卷?xiàng)目是數(shù)值過(guò)高報(bào)警,所以fscript的內(nèi)容如下:
if (msg.payload > 2500){
? ?print("adc data is high")
? ?msg.payload = "Collect data is high!n"
? ?wbuffer_write_string(wb,msg.payload)
? ?output.payload = wbuffer_get_data(wb)
? ?output.payloadLength = len("Collect data is high!n")
}
接著雙擊adc排頭的mqtt_out節(jié)點(diǎn),編輯發(fā)布的MQTT主題,以及對(duì)mqtt_config進(jìn)行配置。
雙擊button節(jié)點(diǎn),選擇目標(biāo)板對(duì)應(yīng)按鍵絲印的GPIO編號(hào)。
雙擊button的消費(fèi)者節(jié)點(diǎn)fscript,本節(jié)點(diǎn)的主要內(nèi)容是對(duì)button按鍵輸出的數(shù)值進(jìn)行處理后傳遞給mqtt_out節(jié)點(diǎn),內(nèi)容如下:
if (msg.payload == 'on' ){
? ?print("button pressed")
? ?msg.payload = "Emergency button pressed!n"
? ?wbuffer_write_string(wb,msg.payload)
? ?output.payload = wbuffer_get_data(wb)
? ?output.payloadLength = len("Emergency button pressed!n")
}else if(msg.payload == 'off') {
? ?print("button bounced")
}
雙擊button按鍵排頭的mqtt_out節(jié)點(diǎn),對(duì)發(fā)布主題和mqtt_config進(jìn)行配置。
3. 下載驗(yàn)證
基于上位機(jī)準(zhǔn)備章節(jié)搭建好MQTTX客戶端后對(duì)ADC_Status和Emergency_status的主題進(jìn)行訂閱,下載AWFlow流圖到核心板中;進(jìn)行按鍵按下和彈起等的操作以及adc數(shù)據(jù)采集的操作后,可以看到MQTTX客戶端能接收到對(duì)應(yīng)主題的消息,實(shí)現(xiàn)了對(duì)核心板的IO設(shè)備進(jìn)行數(shù)據(jù)和狀態(tài)等的實(shí)時(shí)監(jiān)控。
MQTTX客戶端發(fā)布zlgtest的主題,可以在核心板上的打印查看發(fā)布主題的消息內(nèi)容如下,也可以根據(jù)客戶端發(fā)布主題的消息對(duì)設(shè)備進(jìn)行控制等操作。
根據(jù)上述實(shí)驗(yàn)可知,將IO設(shè)備接入MQTT后,即可實(shí)現(xiàn)對(duì)設(shè)備的監(jiān)控和控制等能力,為用戶帶來(lái)了更好的使用體驗(yàn)。