盧詩瑤,蔡士東,龍新宇,安華凱,郭一凡
(大連民族大學(xué)信息與通信工程學(xué)院,遼寧 大連 116600)
隨著溫控系統(tǒng)的智能化發(fā)展,如何使人們更加便捷快速的得到溫控系統(tǒng)的各種數(shù)據(jù)和控制溫控系統(tǒng)成為了當(dāng)下市場的熱門方向。目前市場現(xiàn)有的智能溫控系統(tǒng)都需要下載指定的APP進(jìn)行控制和操作,占用內(nèi)存空間,而微信小程序具有無需下載、打開即用,內(nèi)存占用量小的優(yōu)勢,是智能溫控系統(tǒng)設(shè)計(jì)方案的更優(yōu)選擇。
本文的設(shè)計(jì)智能溫控系統(tǒng)基于MQTT協(xié)議棧接入阿里云物聯(lián)網(wǎng)平臺(tái)實(shí)現(xiàn)數(shù)據(jù)在整個(gè)系統(tǒng)的傳輸。本系統(tǒng)分為3個(gè)層次,即感知控制層、數(shù)據(jù)傳輸層和應(yīng)用層。數(shù)據(jù)感知層使用ESP32物聯(lián)網(wǎng)芯片、傳感器模塊和控制模塊完成系統(tǒng)的數(shù)據(jù)采集、發(fā)送和外設(shè)控制工作;數(shù)據(jù)傳輸層使用阿里云物聯(lián)網(wǎng)平臺(tái)將數(shù)據(jù)感知層的數(shù)據(jù)轉(zhuǎn)發(fā)到應(yīng)用層;應(yīng)用層使用微信小程序開發(fā)的手機(jī)終端應(yīng)用,微信小程序具有無需安裝等優(yōu)勢,使得用戶方便地對(duì)溫控設(shè)備進(jìn)行監(jiān)控和管理[1]。該系統(tǒng)的總體架構(gòu)設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)總體架構(gòu)
感知控制層主要實(shí)現(xiàn)溫度的采集、溫度數(shù)據(jù)的上傳、接收應(yīng)用層的指令和控制外部設(shè)備。1) 數(shù)據(jù)采集:間隔3s定時(shí)讀取溫度傳感器的數(shù)據(jù)。2) 數(shù)據(jù)上傳:通過ESP32芯片自帶的Wi-Fi功能將溫度數(shù)據(jù)通過Wi-Fi無線網(wǎng)絡(luò)上傳到阿里云物聯(lián)網(wǎng)平臺(tái)的相應(yīng)設(shè)備。3) 接收指令:指令是兩個(gè)層之間的約定,包括預(yù)定溫度加減、工作模式切換和風(fēng)速調(diào)節(jié),指令以JSON格式傳輸,在到達(dá)感知控制層時(shí)會(huì)將其解析為變量方便后續(xù)處理。4) 外設(shè)控制:根據(jù)收到的指令控制外部設(shè)備。如收到將空調(diào)模式轉(zhuǎn)變?yōu)橹茻釙r(shí),會(huì)將控制空調(diào)轉(zhuǎn)變?yōu)橹茻崮J?。另?感知控制層還會(huì)根據(jù)當(dāng)前的溫度實(shí)時(shí)控制空調(diào)的工作狀態(tài)。
感知層硬件電路采用ESP32芯片作為主控,DS18B20作為溫度傳感器,三極管和繼電器構(gòu)成控制模塊。ESP32是由樂鑫公司開發(fā)物聯(lián)網(wǎng)芯片,集成2.4 GHz Wi-Fi和藍(lán)牙雙模的單芯片方案,它具有雙核32位處理器、4MB FLASH、34個(gè)GPIO,擁有常用的接口,ESP32芯片是一款功能強(qiáng)大,能適用于各種應(yīng)用場景的物聯(lián)網(wǎng)芯片[2]。
ESP32核心板通過I2C總線和DS18B20溫度傳感器進(jìn)行通信,只需向DS18B20發(fā)送一個(gè)指令就能讀取到溫度數(shù)據(jù)。在控制模塊中我們使用小風(fēng)扇來模擬風(fēng)速,使用繼電器開關(guān)來模擬空調(diào)的開關(guān),使用紅藍(lán)兩種LED燈珠來模擬空調(diào)的工作模式;其中模擬風(fēng)速的電機(jī)使用L9110電機(jī)驅(qū)動(dòng)芯片,使用該芯片是因?yàn)槠渚哂休^大的電流驅(qū)動(dòng)能力和控制簡單等優(yōu)勢;在模擬空調(diào)開關(guān)電路中,使用S8550 PNP型三極管驅(qū)動(dòng)繼電器工作。ESP32核心板電路如圖2所示。
圖2 ESP32核心板原理圖
圖3 硬件程序執(zhí)行流程圖
基于ESP32芯片的程序設(shè)計(jì),我們使用Arduino-ESP32框架在PlatformIO平臺(tái)上進(jìn)行開發(fā)。在這里簡單介紹一下Arduino和PlatformIO。Arduino是一款便捷靈活、方便上手的開源電子原型平臺(tái)。包括硬件和軟件。Arduino降低了嵌入式開發(fā)的門檻,提高了開發(fā)的效率。Arduino-ESP32是一個(gè)適用于ESP32系列芯片的Arduino Core庫,能夠使用Arduino來開發(fā)ESP32系列芯片。PlatformIO是一款面向嵌入式開發(fā)的專業(yè)協(xié)作平臺(tái),基本支持市面上的熱門開發(fā)板,如:STM32、Atmelavr、Espressif等,它還有出色的調(diào)試、編譯和依賴管理功能,在搭配上VSCode開發(fā)工具的語法提示,能帶給開發(fā)者出色的開發(fā)體驗(yàn)和更高的開發(fā)效率。
在該硬件程序設(shè)計(jì)中,將整個(gè)程序分為幾個(gè)模塊:初始化模塊、風(fēng)扇控制模塊、模式切換模塊、屏幕顯示模塊、消息收發(fā)模塊、數(shù)據(jù)讀取模塊、日志模塊。其中除初始化模塊函數(shù)外,其余函數(shù)均使用FreeRTOS任務(wù)方式運(yùn)行,只需在初始化函數(shù)中注冊任務(wù)函數(shù)后,所有任務(wù)將會(huì)循環(huán)不停的執(zhí)行。
在初始化函數(shù)中會(huì)進(jìn)行GPIO初始化、傳感器初始化、Wi-Fi初始化、MQTT初始化、屏幕顯示初始化、互斥鎖初始化,最后注冊FreeRTOS任務(wù)。因?yàn)楦鱾€(gè)任務(wù)都會(huì)爭用全局變量,所有要設(shè)計(jì)互斥鎖,來確保數(shù)據(jù)的完整和正確性。之后每個(gè)任務(wù)獨(dú)立循環(huán)運(yùn)行。
在本系統(tǒng)中,MQTT通訊協(xié)議是最主要的通訊協(xié)議,同時(shí)MQTT通訊協(xié)議也是物聯(lián)網(wǎng)協(xié)議的重要部分。MQTT是一種輕量級(jí)基于代理的發(fā)布訂閱的消息傳輸協(xié)議,其設(shè)計(jì)思想是簡單、輕量、易于實(shí)現(xiàn),適合在帶寬、計(jì)算機(jī)和處理能力受限的環(huán)境下工作[3]。
基于TCP/IP提供網(wǎng)絡(luò)通信的MQTT通訊協(xié)議和HTTP協(xié)議一樣,都屬于發(fā)布訂閱消息模式,就是指發(fā)布者與訂閱者不直接通過MQTT協(xié)議交互數(shù)據(jù)。MQTT協(xié)議支持根據(jù)QoS的標(biāo)識(shí)定義發(fā)布服務(wù)的質(zhì)量[4]。
發(fā)布者發(fā)布消息的流程根據(jù)網(wǎng)絡(luò)狀態(tài)和服務(wù)要求采取3種不同的消息傳輸質(zhì)量等級(jí),本文設(shè)計(jì)的溫控系統(tǒng)向服務(wù)器發(fā)送消息時(shí)采用當(dāng)QoS=0時(shí)的消息傳輸質(zhì)量等級(jí)。當(dāng)QoS=0時(shí),服務(wù)器接收到發(fā)布者的PUBLISH消息,將PUBLISH消息發(fā)送給所有訂閱此主題的訂閱者。
在數(shù)據(jù)傳輸層中我們采用阿里云物聯(lián)網(wǎng)平臺(tái)作為數(shù)據(jù)轉(zhuǎn)發(fā)節(jié)點(diǎn)。相當(dāng)于應(yīng)用部分和硬件部分的數(shù)據(jù)交互中間層,使應(yīng)用層和感知控制層實(shí)現(xiàn)數(shù)據(jù)交互。
阿里云物聯(lián)網(wǎng)平臺(tái)是一個(gè)集成了設(shè)備管理、數(shù)據(jù)安全通信和消息訂閱等能力的一體化平臺(tái)。向下支持連接海量設(shè)備,采集設(shè)備數(shù)據(jù)上云;向上提供云端API,服務(wù)端可通過調(diào)用云端API將指令下發(fā)至設(shè)備端,實(shí)現(xiàn)遠(yuǎn)程控制。本方案選擇阿里云物聯(lián)網(wǎng)平臺(tái)的原因是阿里云物聯(lián)網(wǎng)平臺(tái)支持多協(xié)議、多網(wǎng)絡(luò)、多地域設(shè)備快速接入。
進(jìn)入阿里云物聯(lián)網(wǎng)平臺(tái)的控制臺(tái)創(chuàng)建產(chǎn)品,定義產(chǎn)品的物模型,添加設(shè)備后,可獲得一個(gè)阿里云的三元組,之后自定義Topic。而后在云產(chǎn)品流轉(zhuǎn)中創(chuàng)建規(guī)則,以便數(shù)據(jù)流轉(zhuǎn)到其他設(shè)備中。將獲得的阿里云三元組信息綁定到微信小程序和ESP32芯片,從而實(shí)現(xiàn)設(shè)備到微信小程序的數(shù)據(jù)雙向流動(dòng)。
應(yīng)用層部分采用微信小程序技術(shù),使用微信公眾平臺(tái)提供的微信開發(fā)者工具進(jìn)行開發(fā),通過MQTT協(xié)議和阿里云三元組信息接入阿里云物聯(lián)網(wǎng)平臺(tái)。
微信小程序與阿里云物聯(lián)網(wǎng)平臺(tái)基于MQTT通訊協(xié)議進(jìn)行通信,在微信小程序上將用戶的控制指令轉(zhuǎn)發(fā)給阿里云物聯(lián)網(wǎng)平臺(tái)的過程中,微信小程序作為消息發(fā)布者,阿里云物聯(lián)網(wǎng)平臺(tái)作為消息訂閱者,阿里云物聯(lián)網(wǎng)平臺(tái)在接收到微信小程序服務(wù)器授權(quán)允許的CONNACK確認(rèn)消息后,發(fā)送SUBSCRIBE消息,指定Topic主題列表,即發(fā)送訂閱請求;訂閱成功后,微信小程序發(fā)送PUBLISH消息后,會(huì)將PUBLISH消息傳遞給所有訂閱此主題的訂閱者,即阿里云物聯(lián)網(wǎng)平臺(tái)。
通過MQTT通訊協(xié)議,微信小程序利用subscribe()函數(shù)從阿里云物聯(lián)網(wǎng)平臺(tái)獲取感知控制層的數(shù)據(jù),通過publish()函數(shù)將用戶操作數(shù)據(jù)轉(zhuǎn)發(fā)到阿里云物聯(lián)網(wǎng)平臺(tái),再由阿里云物聯(lián)網(wǎng)平臺(tái)轉(zhuǎn)發(fā)給感知控制層,由此實(shí)現(xiàn)硬件和軟件部分的數(shù)據(jù)交互[5]。
本文主要研究基于微信小程序的智能溫控系統(tǒng),1) 使用阿里云物聯(lián)網(wǎng)平臺(tái)提供可靠強(qiáng)大的數(shù)據(jù)服務(wù)為整個(gè)系統(tǒng)的穩(wěn)定運(yùn)行提供了強(qiáng)有力支撐;2) 使用新一代的ESP芯片ESP32作為設(shè)備主控,其自帶Wi-Fi、穩(wěn)定且高性能和生態(tài)豐富的特點(diǎn),更方便物聯(lián)網(wǎng)應(yīng)用的開發(fā),讓開發(fā)者更專注于業(yè)務(wù);3) 使用微信小程序作為系統(tǒng)的客戶端,其輕便快速而又無需安裝的特點(diǎn)解決了手機(jī)中安裝大量App的痛點(diǎn)。物聯(lián)網(wǎng)技術(shù)在發(fā)展,我們應(yīng)該采用更加前沿的技術(shù),讓物聯(lián)網(wǎng)應(yīng)用更加智能可靠。