,
(武漢科技大學(xué) 信息科學(xué)與工程學(xué)院,武漢 430081)
物聯(lián)網(wǎng)是新一代信息技術(shù)的重要組成部分,通過(guò)智能組網(wǎng)、智能傳輸技術(shù)將傳統(tǒng)網(wǎng)絡(luò)的覆蓋范圍擴(kuò)展到物與物的級(jí)別。當(dāng)前物聯(lián)網(wǎng)已發(fā)展成為對(duì)物體具有全面感知能力,對(duì)信息具有可靠傳遞和智能處理能力的連接物與物之間的信息網(wǎng)絡(luò)[1]。STM32在原有的工業(yè)市場(chǎng)已經(jīng)具有很好的基礎(chǔ),在其上發(fā)展加入更多的聯(lián)接與云端的服務(wù)具有很大的市場(chǎng)成長(zhǎng)空間[2]。本文在嵌入式應(yīng)用最為典型STM32系列芯片的基礎(chǔ)上,結(jié)合使用ESP8266網(wǎng)絡(luò)通信芯片,通過(guò)軟硬件設(shè)計(jì),解決了嵌入式系統(tǒng)常見(jiàn)的運(yùn)行時(shí)狀態(tài)獨(dú)立、數(shù)據(jù)傳輸缺乏實(shí)時(shí)性的問(wèn)題,有效拓展了其聯(lián)網(wǎng)應(yīng)用能力。
本系統(tǒng)主要分為三大模塊:數(shù)據(jù)采集端、控制端、網(wǎng)絡(luò)端。數(shù)據(jù)采集端是整個(gè)系統(tǒng)的數(shù)據(jù)入口,負(fù)責(zé)搜集傳感器數(shù)據(jù)。網(wǎng)絡(luò)端的主要功能是在網(wǎng)絡(luò)上對(duì)數(shù)據(jù)進(jìn)行展示,本文使用OneNET作為數(shù)據(jù)接入和管理平臺(tái),該平臺(tái)同時(shí)提供了基于數(shù)據(jù)認(rèn)證和保護(hù)機(jī)制的信息可視化服務(wù),允許用戶(hù)查看系統(tǒng)詳細(xì)數(shù)據(jù),并在任何時(shí)間接收通知[3]。控制端是本系統(tǒng)的核心,承擔(dān)著數(shù)據(jù)接收、緩存、處理以及發(fā)送任務(wù)。系統(tǒng)架構(gòu)如圖1所示。
圖1 系統(tǒng)框架圖
本系統(tǒng)的主要硬件組成如圖2所示。其中,STM32F103ZE負(fù)責(zé)數(shù)據(jù)處理,由于其擁有112個(gè)可用的I/O端口,以及2個(gè)I2C接口和SPI接口、3個(gè)USART接口、一個(gè)USB接口和一個(gè)CAN接口,每個(gè)I/O均可接入相應(yīng)外設(shè)[4]。所以根據(jù)需求可快速靈活地接入各種不同的外部設(shè)備,系統(tǒng)可實(shí)現(xiàn)的具體功能由所接入傳感器的類(lèi)型決定。ESP8266負(fù)責(zé)網(wǎng)絡(luò)通信,具體采用了ESP8266 01S無(wú)線模塊,該模塊支持標(biāo)準(zhǔn)的 IEEE802.11 b/g/n 協(xié)議,此外還集成了包括天線開(kāi)關(guān)、電源管理等硬件單元。不僅能解決單個(gè)系統(tǒng)中的網(wǎng)絡(luò)連接問(wèn)題,也可以避免節(jié)點(diǎn)到服務(wù)器通信中任何類(lèi)型的故障[5]。ESP8266的傳感器及其連接執(zhí)行器通過(guò)網(wǎng)絡(luò)進(jìn)行監(jiān)控和控制,現(xiàn)有設(shè)備可以用來(lái)加強(qiáng)對(duì)應(yīng)功能并令其更加智能[6]。集成調(diào)試單元主要用于編碼階段的代碼調(diào)試。狀態(tài)指示單元用于工作狀態(tài)監(jiān)測(cè)。
圖2 系統(tǒng)硬件組成圖
ESP8266 01S無(wú)線模塊與STM32F103ZE連接需要4個(gè)接口,具體設(shè)計(jì)如圖3所示。
圖3 ESP8266接線以及實(shí)物圖
圖5 ESP8266程序流程圖
板載電源提供3.3 V和GND接口。MCU_RXD接口負(fù)責(zé)數(shù)據(jù)上傳,MCU_TXD接口負(fù)責(zé)數(shù)據(jù)下載。ESP_TXD接主控制器芯片的PA2口,ESP_RXD接PA3口,二者均被配置為串口(USART2)。
本系統(tǒng)的硬件程序采用C語(yǔ)言編寫(xiě),軟件部分包括硬件驅(qū)動(dòng)、硬件間協(xié)調(diào)、數(shù)據(jù)處理以及格式化、數(shù)據(jù)轉(zhuǎn)發(fā)等功能。此外,本系統(tǒng)中用到的EDP協(xié)議包由已在GitHub上開(kāi)源OneNET云平臺(tái)代碼經(jīng)過(guò)適當(dāng)改進(jìn)而來(lái),數(shù)據(jù)傳輸基于該協(xié)議。
本系統(tǒng)的工作過(guò)程大致可分為硬件初始化、建立網(wǎng)絡(luò)接、采集數(shù)據(jù)處理并轉(zhuǎn)發(fā)三大過(guò)程,流程圖如圖4所示。
圖4 Main函數(shù)流程圖
ESP8266程序主要完成硬件層面的初始化以及軟件層面的網(wǎng)絡(luò)連接兩大功能,其流程圖如圖5所示。
本文使用的ESP8266 01S與STM32F103ZE之間的通信采用基于AT指令的串口通信方式。串口是計(jì)算機(jī)上一種非常通用的通信協(xié)議,大多數(shù)計(jì)算機(jī)包含兩個(gè)基于RS232的串口,串口同時(shí)也是儀器儀表設(shè)備通用的通信協(xié)議[7]。其初始化代碼如下:
void NET_DEVICE_IO_Init(void){
GPIO_InitTypeDef gpioInitStruct;
gpioInitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
gpioInitStruct.GPIO_Pin=GPIO_Pin_0;
//GPIOA0被定義為復(fù)位引腳
gpioInitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpioInitStruct);
NET_IO_Init();
//串口初始化
netDeviceInfo.reboot=0;
}
在I/O初始化完成后,需要進(jìn)一步設(shè)置相應(yīng)的AT指令,其中最為關(guān)鍵的兩條指令如下:
#define ESP8266_WIFI_INFO "AT+CWJAP="PDCN","wxx960105" "
#define ESP8266_ONENET_INFO "AT+CIPSTART="TCP","183.230.40.39",876 "
AT+CWJAP指令的功能是連接無(wú)線WiFi指令,它有兩個(gè)參數(shù),分別是SSID以及對(duì)應(yīng)的密碼。只有正常接入網(wǎng)絡(luò)才可以向網(wǎng)絡(luò)服務(wù)器發(fā)送數(shù)據(jù)。AT+CIPSTART指令的功能是訪問(wèn)指定網(wǎng)絡(luò)位置。它有三個(gè)參數(shù),分別是通信協(xié)議類(lèi)型、主機(jī)地址、端口號(hào)。ESP8266通過(guò)上述兩條宏指令實(shí)現(xiàn)與遠(yuǎn)程服務(wù)器的連接。
本系統(tǒng)產(chǎn)生的各種數(shù)據(jù)通過(guò)EDP協(xié)議進(jìn)行傳輸。EDP (Enhanced Device Protocol)即增強(qiáng)設(shè)備協(xié)議,是OneNET平臺(tái)根據(jù)物聯(lián)網(wǎng)特點(diǎn)專(zhuān)門(mén)定制的完全公開(kāi)的基于TCP的協(xié)議,被廣泛應(yīng)用到家居、物流、能源以及其他行業(yè)應(yīng)用中[8]。
數(shù)據(jù)傳送前需要對(duì)數(shù)據(jù)進(jìn)行格式化處理。數(shù)據(jù)格式化的主要工作為封裝信息屬性和文件拆分。封裝信息屬性環(huán)節(jié)包括封裝協(xié)議頭和數(shù)據(jù)頭。協(xié)議頭指派采用對(duì)應(yīng)協(xié)議格式傳輸,數(shù)據(jù)頭向服務(wù)器傳遞諸如數(shù)據(jù)類(lèi)型大小等信息,以便服務(wù)器正確處理數(shù)據(jù)。文件拆分傳輸包含以下幾個(gè)環(huán)節(jié):提取信息-拆分-傳輸-接收-組裝-檢查。接收組裝和檢查的過(guò)程由服務(wù)器端自動(dòng)完成。綜上所述,數(shù)據(jù)格式化的流程圖如圖6所示。
圖6 數(shù)據(jù)處理程序流程圖
數(shù)據(jù)處理程序不僅完成了協(xié)議要求的數(shù)據(jù)傳輸前的各種準(zhǔn)備工作,并且實(shí)現(xiàn)了硬件和數(shù)據(jù)間的隔離,即任何由硬件產(chǎn)生的數(shù)據(jù)經(jīng)過(guò)該程序均可被換為服務(wù)器可識(shí)別的并且可進(jìn)行網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù),極大提高了本系統(tǒng)在數(shù)據(jù)層面的兼容性。
本系統(tǒng)采用Flash芯片W25Q16,用于儲(chǔ)存程序本身和程序運(yùn)行時(shí)所需的數(shù)據(jù)。在此基礎(chǔ)上,構(gòu)建一個(gè)小型化的文件傳輸服務(wù)器,傳輸原理如圖7所示。
圖7 圖片上傳原理圖
準(zhǔn)備一張待傳輸圖片,由于Flash儲(chǔ)存容量的限制,需要對(duì)圖片進(jìn)行壓縮處理。最后將該圖片轉(zhuǎn)存為芯片可以識(shí)別的十六進(jìn)制數(shù)組。
unsigned char Array[]={
………………
}
轉(zhuǎn)換完成后,將程序燒入Flash中并啟動(dòng)系統(tǒng),同時(shí)打開(kāi)OneNET手機(jī)APP,即可看到已上傳的圖片,如圖8所示。
圖8 圖片上傳成功界面
本文演示的第二個(gè)功能是基于DHT22溫濕度傳感器的環(huán)境溫度監(jiān)測(cè)系統(tǒng)。溫濕度采集傳感器采用常見(jiàn)的DHT22芯片,其是一種電容式可輸出數(shù)字信號(hào)的溫濕度傳感器,它包括濕度感知單元、NTC溫度感知單元,以及一個(gè)8位的微型處理器[9]。
在完成硬件設(shè)計(jì)與搭建、程序設(shè)計(jì)以及平臺(tái)設(shè)置之后,本系統(tǒng)即可實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)室內(nèi)溫度濕度并上傳至網(wǎng)絡(luò)的功能。如圖9所示,打開(kāi)OneNET旗下手機(jī)客戶(hù)端設(shè)備云即可實(shí)時(shí)查看對(duì)應(yīng)設(shè)備下對(duì)應(yīng)數(shù)據(jù)點(diǎn)的實(shí)時(shí)數(shù)據(jù)。打開(kāi)對(duì)應(yīng)網(wǎng)頁(yè)即可看到一段時(shí)間內(nèi)的溫濕度變化趨勢(shì)以及當(dāng)前溫濕度值,對(duì)應(yīng)界面如圖10所示。
圖9 手機(jī)端實(shí)時(shí)監(jiān)測(cè)界面
圖10 網(wǎng)頁(yè)端數(shù)據(jù)流展示界面