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