徐世翔,曹 原
(南陽(yáng)理工學(xué)院,河南 南陽(yáng) 473000)
隨著物聯(lián)網(wǎng)行業(yè)的快速發(fā)展,萬(wàn)物智聯(lián)的概念逐漸興起,5G網(wǎng)絡(luò)的到來(lái)更是加速了物聯(lián)網(wǎng)的發(fā)展進(jìn)程。現(xiàn)如今,物聯(lián)網(wǎng)在各行各業(yè)均有非常廣泛的應(yīng)用,如物聯(lián)網(wǎng)監(jiān)控系統(tǒng)、智能快遞柜等,無(wú)不為人們的生活增添了極大的便利[1-5]。本文基于物聯(lián)網(wǎng)技術(shù),順應(yīng)時(shí)代的潮流,意在打通傳統(tǒng)單片機(jī)與物聯(lián)網(wǎng)平臺(tái)的壁壘;在技術(shù)上將二者相結(jié)合,進(jìn)行實(shí)驗(yàn)性和驗(yàn)證性的設(shè)計(jì)。本設(shè)計(jì)以搭載STM32F103RB的NUCLEO實(shí)驗(yàn)板[6-7]作為主控單元,配合ESP8266模塊實(shí)現(xiàn)設(shè)備聯(lián)網(wǎng);同時(shí)使用板載的ADC通道1、2測(cè)量外部電壓輸入,采集核心溫度、核心電壓通道數(shù)據(jù),使用MQTT協(xié)議同步上傳至阿里云平臺(tái),實(shí)現(xiàn)遠(yuǎn)程電壓監(jiān)測(cè)的設(shè)計(jì)。
本系統(tǒng)總體設(shè)計(jì)如下:阿里云平臺(tái)包括注冊(cè)、平臺(tái)配置等,通過(guò)模擬MQTT小程序模擬上報(bào)數(shù)據(jù),用于測(cè)試平臺(tái)配置;ESP8266模塊包括使用AT指令配網(wǎng),學(xué)習(xí)MQTT協(xié)議,編寫(xiě)程序?qū)?shù)據(jù)進(jìn)行采集,對(duì)模塊進(jìn)行分布調(diào)試(串口、網(wǎng)絡(luò)、IoT平臺(tái)),進(jìn)行數(shù)據(jù)上報(bào);IoT Studio中的Web應(yīng)用包括頁(yè)面編輯、組件使用、數(shù)據(jù)源配置、美化網(wǎng)頁(yè)等。同時(shí)對(duì)釘釘機(jī)器人的配置進(jìn)行學(xué)習(xí),貫通平臺(tái),實(shí)現(xiàn)設(shè)計(jì)要求。系統(tǒng)框圖如圖1所示。
圖1 系統(tǒng)框圖
ESP8266模塊連接WiFi熱點(diǎn)的原理是通過(guò)串口向其發(fā)送模塊配置指令(稱為AT指令)[8-10]。在編寫(xiě)程序前可以先使用USB轉(zhuǎn)串口模塊對(duì)其進(jìn)行調(diào)試,熟悉配網(wǎng)流程與相應(yīng)的操作,成功之后再對(duì)程序進(jìn)行編寫(xiě),提高開(kāi)發(fā)效率。查詢ESP8266技術(shù)手冊(cè)可知,配網(wǎng)操作需要使用表1所列指令。
表1 ESP8266模塊AT指令
發(fā)送指令后,模塊將回復(fù)相應(yīng)的內(nèi)容,例如“OK”,表示操作完成。ESP8266模塊使用MQTT協(xié)議連接阿里云平臺(tái)有多種方式,在實(shí)踐中本文選擇了難度較低、較易實(shí)現(xiàn)的固件燒錄。在ESP8266出廠版本的固件中,并不包含可以通過(guò)MQTT協(xié)議連接云平臺(tái)的AT指令。根據(jù)官方手冊(cè)與使用指南中的“固件燒錄”可以找到相應(yīng)的方法與流程。成功后,可以直接根據(jù)AT指令配置模塊,通過(guò)MQTT協(xié)議連接阿里云平臺(tái)。此時(shí),在產(chǎn)品設(shè)備詳情中即可看到設(shè)備在線。
在usart.c中添加串口重定向函數(shù),使得在程序中可以使用printf指令向模塊發(fā)送AT指令。將ESP8266操作指令封裝進(jìn)頭文件esp8266.h,加入工程include路徑中;并在esp8266.h的起始位置編寫(xiě)頭文件定義,在esp8266.h中編寫(xiě)配網(wǎng)AP指令,設(shè)置單片機(jī)應(yīng)答內(nèi)容;在main.c文件中定義變量,在main函數(shù)初始化代碼后添加定時(shí)器使能、DMA校準(zhǔn)、DMA使能等相應(yīng)程序,在定時(shí)器中斷回調(diào)函數(shù)中編寫(xiě)時(shí)間片輪轉(zhuǎn)調(diào)度程序;在while循環(huán)之前調(diào)用指令進(jìn)行配網(wǎng)、阿里云平臺(tái)用戶配置等操作,在while循環(huán)中使用switch語(yǔ)句編寫(xiě)時(shí)間片輪轉(zhuǎn)調(diào)度程序;在任務(wù)1中LED以1 s間隔閃爍,任務(wù)2中采集核心溫度,任務(wù)3中采集核心電壓與通道電壓,任務(wù)4中上報(bào)物模型數(shù)據(jù)。
如圖2所示,進(jìn)入項(xiàng)目詳情頁(yè)面主頁(yè),在項(xiàng)目開(kāi)發(fā)中選擇Web應(yīng)用,新建一個(gè)Web應(yīng)用,自定義應(yīng)用名稱與描述后點(diǎn)擊確定。在編輯頁(yè)面的左邊欄中,選擇組件,即可進(jìn)入組件列表。
圖2 組件列表
將需要使用的組件拖入頁(yè)面中,即可添加組件。單擊組件,即可在右邊欄中定義組件屬性。例如,需要使用組件儀表盤(pán)時(shí),將儀表盤(pán)組件從左邊欄中拖出,點(diǎn)擊新組件,在右邊欄中定義數(shù)值范圍、數(shù)值單位、標(biāo)題內(nèi)容、數(shù)據(jù)源等。在左邊欄中的頁(yè)面選項(xiàng),可以自定義頁(yè)面元素,例如導(dǎo)航布局中的邊欄、子頁(yè)面入口等。“儀表盤(pán)”組件如圖3所示。
頁(yè)面繪制完成后,即可發(fā)布上線,點(diǎn)擊預(yù)覽即可預(yù)覽網(wǎng)頁(yè)效果,如圖4所示。
使用PC版釘釘應(yīng)用,在群聊中的智能群助手頁(yè)面,新建一個(gè)釘釘機(jī)器人,類型為自定義。鍵入機(jī)器人名稱后,復(fù)制下方生成的Webhook地址,如圖5所示。
圖5 釘釘機(jī)器人配置
進(jìn)入項(xiàng)目詳情頁(yè)面中的主頁(yè),在項(xiàng)目開(kāi)發(fā)中找到業(yè)務(wù)邏輯頁(yè)面,創(chuàng)建一個(gè)新的業(yè)務(wù)邏輯,點(diǎn)擊新建空白業(yè)務(wù)服務(wù)。進(jìn)入編輯頁(yè)面,在左邊欄中的節(jié)點(diǎn)頁(yè)面,選擇正確的節(jié)點(diǎn)并連接,即可實(shí)現(xiàn)釘釘機(jī)器人推送設(shè)備數(shù)據(jù)的功能。配置完成后,部署調(diào)試,發(fā)布上線即可。邏輯節(jié)點(diǎn)配置如圖6所示。
圖6 業(yè)務(wù)邏輯節(jié)點(diǎn)配置
燒錄程序后,復(fù)位單片機(jī)程序執(zhí)行,串口1與模塊通信,串口2與PC機(jī)通信,使用USB轉(zhuǎn)串口模塊接收串口1發(fā)出的指令,如圖7所示。串口數(shù)據(jù)發(fā)送正確無(wú)誤,接入模塊后可以實(shí)現(xiàn)自動(dòng)配網(wǎng)、數(shù)據(jù)上傳。串口2與PC機(jī)通信,上報(bào)程序狀態(tài),使用USB線連接開(kāi)發(fā)板接收串口2發(fā)出的狀態(tài),如圖8所示。
圖7 串口1發(fā)送數(shù)據(jù)
圖8 串口2發(fā)送數(shù)據(jù)
串口數(shù)據(jù)發(fā)送正確無(wú)誤,可以顯示程序當(dāng)前狀態(tài)。此時(shí),ESP8266模塊網(wǎng)絡(luò)連接正常,與阿里云平臺(tái)連接正常,物模型數(shù)據(jù)上報(bào)正常,如圖9所示。
圖9 物模型數(shù)據(jù)上報(bào)
在Web應(yīng)用中,可以顯示當(dāng)前數(shù)據(jù),同時(shí)實(shí)時(shí)繪制數(shù)據(jù)波形,如圖10所示。釘釘機(jī)器人可以正常工作,當(dāng)電壓超過(guò)閾值時(shí)可以向群組推送消息,如圖11所示。
圖10 Web應(yīng)用頁(yè)面預(yù)覽
圖11 釘釘機(jī)器人消息推送
本文設(shè)計(jì)了一款基于STM32單片機(jī)的物聯(lián)網(wǎng)電壓采集系統(tǒng)。系統(tǒng)選用STM32F103RB單片機(jī)作為主控芯片,整體造價(jià)較低;采用板載的ADC進(jìn)行數(shù)據(jù)采集,并通過(guò)MQTT協(xié)議與ESP8266模塊實(shí)現(xiàn)系統(tǒng)物聯(lián)網(wǎng)平臺(tái)通信,使用釘釘API進(jìn)行數(shù)據(jù)推送。經(jīng)測(cè)試,系統(tǒng)性能穩(wěn)定,易于市場(chǎng)推廣。