黎穎聰 陳耀林 鐘佳才 梁毅俊 朱又敏
廣東海洋大學(xué)電子與信息工程學(xué)院,廣東 湛江 524088
隨著我國經(jīng)濟(jì)的快速發(fā)展和人民生活水平的不斷提高,人們對室內(nèi)環(huán)境要求越來越高,越來越重視環(huán)境的舒適性,更多人選擇綠色、智能化的居家設(shè)計,由此應(yīng)運(yùn)而生的休閑娛樂、居家裝飾行業(yè)日顯蓬勃發(fā)展之勢。一個“生機(jī)盎然、蒼翠欲滴”的智能化水族箱不僅可以帶給人們無比舒適的居家享受,更能調(diào)節(jié)室內(nèi)環(huán)境,讓自然美景駐留身邊。由于現(xiàn)代生活節(jié)奏逐步加快,加之人們?nèi)狈λ逑漯B(yǎng)護(hù)技能,而傳統(tǒng)水族箱功能局限,因此水族箱往往“好景不長”,最后的結(jié)局多是“草枯魚亡”[1]。近年來,市場上陸續(xù)出現(xiàn)了多種控制水族箱水溫、排水、充氧和照明等改善水質(zhì)的設(shè)備,如過濾器、加熱器、加氧泵等,但是設(shè)備品種繁多,而且大多是非智能化的,操作維護(hù)不方便,綜合性能參差不齊。本系統(tǒng)采用STM32 單片機(jī),搭載溫度、光照、人體感應(yīng)等傳感器,輔以水循環(huán)系統(tǒng)、投食系統(tǒng)和語音控制系統(tǒng),設(shè)計一款基于物聯(lián)網(wǎng)的智能水族箱,系統(tǒng)可以發(fā)送數(shù)據(jù)到阿里云平臺,并結(jié)合自主設(shè)計的微信小程序通過MQTT 協(xié)議與STM32 單片機(jī)進(jìn)行通信,實現(xiàn)遠(yuǎn)程監(jiān)測并控制水族箱各項功能正常運(yùn)作。
智能水族箱系統(tǒng)由軟硬件相結(jié)合開發(fā)而成,硬件系統(tǒng)由STM32 單片機(jī)、智能投食系統(tǒng)、人體感應(yīng)系統(tǒng)、語音控制系統(tǒng)、智能水循環(huán)系統(tǒng)、智能照明系統(tǒng)、溫度控制系統(tǒng)和Wi-Fi 模塊組成。各單元系統(tǒng)通過Wi-Fi 模塊無線接入物聯(lián)網(wǎng)平臺。STM32 單片機(jī)擁有ARM 和Cortex-M 為基礎(chǔ)的微控制器內(nèi)核,具有穩(wěn)定的工作狀態(tài)和較低的功耗,能夠快速實現(xiàn)大量數(shù)據(jù)的運(yùn)算,非常適合智能控制系統(tǒng)的開發(fā),因此選用STM32 系列單片機(jī)作為中央控制系統(tǒng),系統(tǒng)總體結(jié)構(gòu)如圖1 所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)通過微信小程序?qū)崿F(xiàn)對水族箱進(jìn)行定時定量投食。定時范圍可設(shè)定在1 至48 小時之間,每當(dāng)系統(tǒng)到達(dá)設(shè)定時間,水族箱內(nèi)的舵機(jī)可讓旋轉(zhuǎn)槳葉旋轉(zhuǎn)一圈,當(dāng)槳葉旋轉(zhuǎn)至小孔位置時,飼料便會自動投放至水族箱內(nèi),實現(xiàn)自動投食功能。用戶亦可通過需求設(shè)定單次投食量,共有4 個投食量等級,第一種模式默認(rèn)槳葉旋轉(zhuǎn)一圈,每加一等級槳葉旋轉(zhuǎn)多一圈,從而實現(xiàn)智能餌料投食量的控制。
人體感應(yīng)系統(tǒng)控制補(bǔ)光燈自動開關(guān),為觀賞提供舒適的照明環(huán)境。系統(tǒng)利用HC-SR50 人體紅外感應(yīng)模塊有效監(jiān)測人體是否靠近水族箱,當(dāng)人體進(jìn)入感應(yīng)范圍內(nèi),系統(tǒng)輸出高電平,人體離開感應(yīng)范圍,則自動延時同時關(guān)閉高電平,輸出低電平。紅外感應(yīng)模塊輸出高電平將自動打開補(bǔ)光燈,否則補(bǔ)光燈自動關(guān)閉。
語音控制系統(tǒng)實現(xiàn)對水族箱的智能聲控操作。系統(tǒng)采用LD3320 語音識別模塊與STM32 單片機(jī)進(jìn)行通信。設(shè)置一級語音口令為“水族箱”,設(shè)置多個二級口令,如“開燈”“關(guān)燈”“恒溫處理”“補(bǔ)水”“投食”等語音指令。用戶聲控操作時,首先呼叫一級口令,讓水族箱系統(tǒng)進(jìn)行語音辨認(rèn),系統(tǒng)通過ASR 辨認(rèn)之后,隨后轉(zhuǎn)入二級口令,用戶再根據(jù)需求對水族箱進(jìn)行下一步操作,完成燈光、溫度、補(bǔ)水和投食等控制功能。
智能水循環(huán)系統(tǒng)實現(xiàn)水族箱自動補(bǔ)水和水循環(huán)操作。系統(tǒng)通過采集箱體內(nèi)部水位高度和水體渾濁度數(shù)據(jù),實現(xiàn)補(bǔ)水和水循環(huán),保障水生生物健康生長。Water Sensor 水位傳感器通過一系列暴露的平行導(dǎo)線線跡測量水位高低。TDS 傳感器用于檢測水體水質(zhì),測量時采用交流信號激勵源,可有效防止探頭極化,提高水質(zhì)檢測精度。系統(tǒng)通過兩種傳感器感知水位和水質(zhì),檢測數(shù)據(jù)傳送至阿里云平臺和微信小程序,用戶可根據(jù)需求自主設(shè)置水位或者啟動水循環(huán)裝置,當(dāng)水質(zhì)不適宜水生生物生長時,水泵會自動開始工作直至水位和水質(zhì)達(dá)到用戶所設(shè)定的要求。
系統(tǒng)照明單元實現(xiàn)水族箱自動光照調(diào)節(jié)功能。水族箱內(nèi)的光照條件是影響觀賞體驗的重要因素,同時也會間接影響水生生物的生存狀態(tài)。經(jīng)過測試表明,當(dāng)光照強(qiáng)度閾值設(shè)定為110 勒克斯(lx)時,最適應(yīng)水生生物的生長,當(dāng)水族箱周圍光照強(qiáng)度低于110 勒克斯(lx)時,系統(tǒng)將打開補(bǔ)光燈。BH1750 光照傳感器是一種用于兩線式串行總線接口的數(shù)字型光強(qiáng)度傳感器模塊,具有較高的分辨率,受紅外線影響較小,可探測較大范圍的光照強(qiáng)度變化,因此本系統(tǒng)采用BH1750 光照傳感器來調(diào)節(jié)光強(qiáng)變化[2]。用戶可通過阿里云物聯(lián)網(wǎng)平臺和微信小程序?qū)崟r監(jiān)測和控制水族箱的光照條件。
溫度控制系統(tǒng)實現(xiàn)箱體水體溫度的自動控制。系統(tǒng)通過DS18B20 溫度傳感器實時監(jiān)測水族箱的水溫,DS18B20 具有防水功能且檢測精度較高,檢測數(shù)據(jù)發(fā)送到阿里云平臺和微信小程序,用戶可以結(jié)合實際情況利用水族箱內(nèi)部加熱器和恒溫器對水族箱進(jìn)行升降溫處理[3]。用戶還可以通過微信小程序?qū)銣仄鬟M(jìn)行恒溫設(shè)置,當(dāng)DS18B20 溫度傳感器檢測到的數(shù)據(jù)與所設(shè)置的溫度值存在差異時,恒溫器會自動調(diào)節(jié)溫度。
Wi-Fi模塊提供微信小程序和物聯(lián)網(wǎng)平臺接入功能。ESP8266Wi-Fi 模塊使用串口與STM32 單片機(jī)通信,內(nèi)置TCP/IP 協(xié)議棧,能夠?qū)崿F(xiàn)串口與Wi-Fi 之間轉(zhuǎn)換且支持STA 和AP 模式,模塊兼容3.3 V 和5 V 單片機(jī)系統(tǒng),符合本系統(tǒng)的STM32F103 單片機(jī)。Wi-Fi 模塊作為STM32 和服務(wù)器之間的數(shù)據(jù)交換樞紐,建立STM32 和服務(wù)器之間的連接,實現(xiàn)各傳感器數(shù)據(jù)的接收與上傳[4]。
系統(tǒng)軟件設(shè)計包括單片機(jī)程序設(shè)計、物聯(lián)網(wǎng)平臺配置、微信小程序設(shè)計及配網(wǎng)。開發(fā)平臺為阿里云物聯(lián)網(wǎng)平臺,該平臺可為設(shè)備提供安全可靠的連接通信能力,且能連接海量設(shè)備,并支撐設(shè)備數(shù)據(jù)采集上傳云端。系統(tǒng)通過TCP 和MQTT 協(xié)議連接阿里云物聯(lián)網(wǎng)平臺,收發(fā)數(shù)據(jù)與單片機(jī)通信,軟件系統(tǒng)由微信小程序開發(fā),用戶可以通過小程序遠(yuǎn)程監(jiān)測各傳感器信息并對硬件實行控制。該系統(tǒng)具備智能化、高性價比的特點[5]。
編寫調(diào)試單片機(jī)程序確保整個系統(tǒng)協(xié)調(diào)運(yùn)作。將用C 語言編寫的程序燒錄進(jìn)STM32 單片機(jī)之中,ESP8266 作為從機(jī)接入STM32,便于節(jié)省資源,Wi-Fi串口的波特率調(diào)整為115200B,保證通信成功。為了保證各模塊之間能獨(dú)立工作和相互聯(lián)系,STM32 移植了RTOS 實時操作系統(tǒng),實現(xiàn)多任務(wù)功能。在信息采集方面,各模塊采集到的信息通過高低電平信號傳送給單片機(jī)處理,單片機(jī)通過C 語言程序設(shè)置,對信號進(jìn)行處理,再將采集到的信息通過串口發(fā)送給ESP8266Wi-Fi 模塊,ESP8266Wi-Fi 模塊再將信息發(fā)送給網(wǎng)關(guān)。
系統(tǒng)采用阿里云物聯(lián)網(wǎng)平臺作為服務(wù)器與ESP8266Wi-Fi 模塊進(jìn)行通信。該物聯(lián)網(wǎng)平臺簡單易用,手機(jī)APP 端可以免開發(fā),適應(yīng)本系統(tǒng)的功能需求。MQTT 作為目前應(yīng)用較廣的物聯(lián)網(wǎng)應(yīng)用層協(xié)議,可進(jìn)行設(shè)備與云端服務(wù)之間的通信。MQTT 可傳輸任意類型的數(shù)據(jù),實現(xiàn)簡單且可提供數(shù)據(jù)傳輸?shù)腝oS,使用TCP長連接的應(yīng)用層協(xié)議,通過訂閱/發(fā)布模式,將消息的發(fā)送方和接收方進(jìn)行解耦,通過MQTT 協(xié)議實現(xiàn)云平臺與ESP8266 之間的通信[6]。阿里云物聯(lián)網(wǎng)平臺通過ProductKey、DeviceName 和DeviceSecret 設(shè)備三元組來進(jìn)行認(rèn)證,再通過通信Topic 進(jìn)行消息的上報與下發(fā)。Wi-Fi 模塊接入阿里云物聯(lián)網(wǎng)的基本框架如圖2 所示。
圖2 Wi-Fi 模塊接入阿里云物聯(lián)網(wǎng)的基本框架
設(shè)計系統(tǒng)微信小程序是為了方便用戶利用終端操控設(shè)備。微信小程序利用基本前端代碼來實現(xiàn),其基本架構(gòu)為WXML+WXSS+JS+JSON。系統(tǒng)要在JS 上面進(jìn)行MQTT 協(xié)議通信,離不開WebSocket 通信協(xié)議,WebSocket 連接阿里云物聯(lián)網(wǎng)平臺MQTT 服務(wù)器,需要遵守如下準(zhǔn)則:其一,連接的端口是443 且為https 協(xié)議,其二,在WebSocket 之上再實現(xiàn)MQTT 協(xié)議數(shù)據(jù)的發(fā)送和接收。WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,雖然已經(jīng)有了HTTP 協(xié)議,但其有一個缺陷,通信只能由客戶端發(fā)起,輪詢效率低,需要不停地連接,非常浪費(fèi)資源,而WebSocket 可以進(jìn)行雙向數(shù)據(jù)傳輸,在進(jìn)行頻繁雙向通信時,可以避免打開多個HTTP 連接,因此提高了工作效率,節(jié)省了系統(tǒng)資源。本系統(tǒng)在雙向通信上比較頻繁,故采用WebSocket 通信協(xié)議。WebSocket 可以使用WS 和WSS 兩種方法連接,WS 是普通連接,而WSS 增加了TLS 加密。連接的主要區(qū)別在于MQTT 連接URL 的協(xié)議和端口號,在程序編寫過程中,注意設(shè)置SecureMode 參數(shù),WS 連接時設(shè)置為3,WSS 連接時設(shè)置為2。另外,WXML 用于構(gòu)建頁面結(jié)構(gòu),使小程序頁面更加美觀,WXSS 用于修飾頁面視圖,JSON 用于小程序全局配置。本系統(tǒng)用WXML、JSON 和WXSS這三種語言來使小程序頁面變得更加整潔、美觀。
微信小程序設(shè)計有登陸、注冊、遠(yuǎn)程操控、環(huán)境檢測、Wi-Fi 通信設(shè)置、藍(lán)牙連接、顯示設(shè)置等功能主菜單,圖3 為微信小程序主菜單界面。單擊主菜單進(jìn)入各功能子菜單,圖4 為微信小程序遠(yuǎn)程操控子菜單界面。在登陸注冊的過程中,顯示賬號密碼,用戶需要填寫Wi-Fi 名稱和密碼來進(jìn)行網(wǎng)絡(luò)配置,設(shè)備與物聯(lián)網(wǎng)服務(wù)器后臺進(jìn)行綁定,下次登陸無需再次配置網(wǎng)絡(luò),即可實現(xiàn)遠(yuǎn)程監(jiān)測和操控[7]。
圖3 微信小程序主菜單界面
圖4 微信小程序遠(yuǎn)程操控子菜單界面
微信小程序配網(wǎng)保證終端接入物聯(lián)網(wǎng)平臺。系統(tǒng)采用SmartConfig 配網(wǎng)方法,基本流程是先讓設(shè)備進(jìn)入Wi-Fi 混雜模式,在此模式下可以監(jiān)聽捕獲周圍的Wi-Fi 報文,這時用戶通過微信小程序輸入Wi-Fi 名稱和密碼,即SSID 和密碼,然后手機(jī)微信小程序?qū)SID 和密碼編碼至UDP 報文中,通過廣播報或組播報發(fā)送,物聯(lián)網(wǎng)生成當(dāng)次配網(wǎng)Token,設(shè)備通過UDP包獲取配置信息捕捉到SSID/Password/Token,從而連接路由器。路由器再分配IP,小程序作為UDP 客戶端,連接設(shè)備作為UDP 服務(wù)端,小程序通過UDP將配網(wǎng)Token 發(fā)送給設(shè)備,并等待回復(fù),設(shè)備接收到數(shù)據(jù),并回復(fù)小程序設(shè)備信息和協(xié)議版本,設(shè)備通過事先保存的三元組信息進(jìn)行動態(tài)注冊,物聯(lián)網(wǎng)后臺接收到動態(tài)注冊請求,給設(shè)備返回密鑰,隨后設(shè)備發(fā)起MQTT 連接到物聯(lián)網(wǎng)后臺,并上報配網(wǎng)Token,完成配網(wǎng)工作。
系統(tǒng)測試涉及對象包括水族箱、手機(jī)微信小程序、物聯(lián)網(wǎng)平臺以及構(gòu)成局域網(wǎng)的無線路由器,通過手機(jī)微信小程序可查看水族箱的相關(guān)生理指標(biāo)并實現(xiàn)遠(yuǎn)程控制[8]。
系統(tǒng)測試在微信小程序上查看水族箱的實時溫度,水族箱能根據(jù)程序提前設(shè)定的參數(shù)自動進(jìn)行溫度調(diào)節(jié),通過移動端的溫度控制按鈕進(jìn)行遠(yuǎn)程溫度控制。系統(tǒng)測試水位和水質(zhì)變化時,可以通過用戶判斷是否換水,亦可以通過用戶移動端加水、排水和換水按鈕進(jìn)行操作。當(dāng)水體的氧氣含量低于設(shè)定的標(biāo)準(zhǔn)時,系統(tǒng)會自動啟動裝置,通過電機(jī)打開空氣窗口將空氣注入水族箱進(jìn)行充氧。系統(tǒng)測試智能投食時,用戶可以通過小程序進(jìn)行操作,也可以通過外接的TFT 顯示屏按鈕進(jìn)行相關(guān)操作,或者通過程序設(shè)定的時間定時投放餌料。啟動投食時,舵機(jī)打開飼料出口,飼料自動投入水族箱。系統(tǒng)測試人體感應(yīng)和語音識別時,系統(tǒng)能在距離水族箱2 m 之內(nèi)的任意位置便感應(yīng)到人體的存在,啟動照明系統(tǒng)。語音識別系統(tǒng)可在距離水族箱5 m 之內(nèi)的位置便可準(zhǔn)確接收到正常的語音信息。
本文實現(xiàn)了基于物聯(lián)網(wǎng)的智能水族箱系統(tǒng)設(shè)計。首先給出了水族箱系統(tǒng)的總體結(jié)構(gòu),然后從硬件和軟件兩方面闡述系統(tǒng)設(shè)計方案,硬件設(shè)計部分詳細(xì)描述各單元的功能和設(shè)計方法,軟件設(shè)計部分主要包括單片機(jī)程序設(shè)計、物聯(lián)網(wǎng)平臺配置、微信小程序設(shè)計及配網(wǎng)。最后完成系統(tǒng)各功能單元測試。系統(tǒng)以STM32 為控制中心,集成了智能投食系統(tǒng)、人體感應(yīng)系統(tǒng)、語音控制系統(tǒng)、智能水循環(huán)系統(tǒng)、智能照明系統(tǒng)、溫度控制系統(tǒng),通過Wi-Fi 模塊將各系統(tǒng)的傳感器數(shù)據(jù)發(fā)送至阿里云生活物聯(lián)網(wǎng)平臺,利用微信小程序?qū)崿F(xiàn)與STM32 單片機(jī)之間的通信,實現(xiàn)各種智能功能。系統(tǒng)設(shè)計靈活、操作方便、穩(wěn)定可靠、性價比較高,具備智能化和遠(yuǎn)程控制的特點,具有良好的市場應(yīng)用推廣前景。