李紅
(福建省華廈能源設(shè)計(jì)研究院有限公司 福建福州 350001)
隨著科技水平的不斷進(jìn)步,不僅僅是工業(yè)上開始推行智能化,智能化的“云家居”逐漸走入人們的家中,“云家居”這個(gè)概念也逐漸被人們所了解?!霸萍揖印边\(yùn)用的物聯(lián)網(wǎng)(IOT)技術(shù),即物物相連技術(shù),是通過各種傳感器支撐起來的一種新興技術(shù)。隨著社會(huì)的發(fā)展,這一技術(shù)對(duì)于人們的日常生活愈發(fā)的重要起來,越來越多的互聯(lián)網(wǎng)廠商開發(fā)出了自己的物聯(lián)網(wǎng)“云家居”產(chǎn)品,實(shí)現(xiàn)了遠(yuǎn)程讀取數(shù)據(jù)、遠(yuǎn)程控制,為客戶提供個(gè)性化服務(wù)。小米公司積極發(fā)展生態(tài)鏈企業(yè),組成了一個(gè)比較完整的“云家居”生態(tài)鏈。溫濕度檢測(cè)[1]在工業(yè)、生活中均有著重要的應(yīng)用,在很多情況下需要對(duì)較大的空間進(jìn)行多個(gè)點(diǎn)的測(cè)量,這給溫濕度傳感器的可分布式、低功耗提出了一定的要求。傳統(tǒng)的溫濕度傳感器主要有水銀式和電子式。水銀式溫濕度計(jì)精度比較高,但是需要人工到溫度計(jì)前進(jìn)行讀取,采集數(shù)據(jù)后人工錄入系統(tǒng)。電子式溫濕度傳感器實(shí)現(xiàn)自動(dòng)讀取,但是電子式溫濕度遠(yuǎn)程監(jiān)測(cè)系統(tǒng)有布線復(fù)雜、采集速度慢等缺點(diǎn)[2],或者需要插在220 V 市電插座上,影響布放傳感器的靈活性,極大限制了應(yīng)用場(chǎng)景和應(yīng)用范圍。市面上便攜式以及采用低功耗設(shè)計(jì)的遠(yuǎn)程溫濕度傳感器少。同時(shí)單片機(jī)和大規(guī)模集成電路的應(yīng)用,出現(xiàn)了高性能、高可靠性的單片機(jī)數(shù)據(jù)采集系統(tǒng)[3]。近年來,WiFi 技術(shù)[4]已經(jīng)走進(jìn)了千家萬戶,所以出現(xiàn)一款低功耗、模塊化、基于物聯(lián)網(wǎng)技術(shù)的溫濕度傳感器有著非常重要意義。
根據(jù)實(shí)際需求,本系統(tǒng)擬采用STM32F103C8T6[5]單片機(jī)做為主控芯片,其較豐富的STM32 固件庫(kù)[6]可以方便我們開發(fā),特別是低功耗模式可以很方便地實(shí)現(xiàn)低功耗功能。數(shù)據(jù)采集模塊采用DHT11 溫濕度傳感器[7]模塊,外部通訊模塊采用成本較低的ESP8266-01S WIFI 模塊[8]實(shí)現(xiàn),云服務(wù)器采用了百度智能云服務(wù)器,UI 界面采用比MFC 優(yōu)化更好的QT5 來繪制[9]。STM32F103 的低功耗模式采用停止模式[10]來降低系統(tǒng)的功耗。
本設(shè)計(jì)的總體框圖如圖1 所示,由圖可知系統(tǒng)整體結(jié)構(gòu)分為3 個(gè)部分:①下位機(jī)部分,以STM32F103C8T6 為控制核心,由溫濕度傳感器ESP8266-01S WIFI 模塊組成;②云服務(wù)器,下位機(jī)數(shù)據(jù)傳送給云服務(wù)器再傳給上位機(jī);③上位機(jī)有多個(gè)平臺(tái)的顯示,有PC 端和手機(jī)端,均可以顯示消息記錄、數(shù)據(jù)庫(kù)信息以及畫出數(shù)據(jù)的折線圖。系統(tǒng)是一個(gè)比較完整的物聯(lián)網(wǎng)系統(tǒng),模塊性強(qiáng),可以后期接入到更大更全的物聯(lián)網(wǎng)系統(tǒng)中,實(shí)用性強(qiáng)。
圖1 系統(tǒng)總體框圖
(1)下位機(jī)軟件整體結(jié)構(gòu)。該系統(tǒng)使用STM32F103C8T6進(jìn)行下位機(jī)的開發(fā)。系統(tǒng)首先進(jìn)行復(fù)位初始化,初始化系統(tǒng)時(shí)鐘以及系統(tǒng)I/O、中斷和RTC 實(shí)時(shí)鐘。而后進(jìn)行ESP8266 的初始化,WIFI 模塊由MCU 通過串口通信發(fā)送AT 指令進(jìn)行控制,初始會(huì)設(shè)置為站模式,連接上當(dāng)前環(huán)境的WIFI 熱點(diǎn),并且設(shè)置為透?jìng)髂J?。以上步驟完成后發(fā)送命令連接云服務(wù)器,連接完成后發(fā)送命令訂閱主題,訂閱完成后LED 燈閃爍提示完成。初始化完成的外部中斷負(fù)責(zé)切換停止模式。如果不進(jìn)入停止模式,則3 s 獲取并且發(fā)送一次數(shù)據(jù);如果是進(jìn)入停止模式,則2 min 30 s 獲取并且發(fā)送一次數(shù)據(jù),LED 燈亮暗來提示當(dāng)前狀態(tài)。溫濕度傳感器則由傳感器通信協(xié)議獲取溫濕度的實(shí)時(shí)數(shù)據(jù)。整個(gè)下位機(jī)軟件結(jié)構(gòu)如圖2 所示。
圖2 單片機(jī)軟件的結(jié)構(gòu)體圖
(2)系統(tǒng)的總體程序流程圖如圖3 所示。
圖3 系統(tǒng)流程圖
STM32F103C8T6 單片機(jī)主要是工作在單線程中,所以在初始化中有一個(gè)循環(huán)來保持單片機(jī)的持續(xù)工作。為了處理時(shí)鐘和外部摁鍵等信息,運(yùn)用了中斷這個(gè)重要的處理機(jī)制。在停止模式時(shí),需要RTC 中斷和外部中斷來喚醒停止模式,使單片機(jī)繼續(xù)運(yùn)行接下去的代碼。
(1)低功耗模式以及RTC 時(shí)鐘喚醒程序設(shè)計(jì)。該系統(tǒng)選擇了低功耗模式中的停止模式來減小系統(tǒng)的功耗,接下來結(jié)合代碼來實(shí)現(xiàn)停止模式。
在STM32 程序的函數(shù)中加入stm32f10x_pwr.c 這個(gè)系統(tǒng)庫(kù),以及加入#include “stm32f10x_pwr.h”,調(diào)用其中的void PWR_EnterSTOPMode(uint32_t PWR_Regulator,uint8_t PWR_STOPEntry)函數(shù)來進(jìn)入停止模式:第一個(gè)參數(shù)填寫PWR_Regulator_LowPower,設(shè)置為低功率模式下帶有調(diào)節(jié)器的停止模式,第二個(gè)參數(shù)填寫PWR_STOPEntry_WFI,設(shè)定為任意一個(gè)中斷就可以喚醒停止模式。所以最后的代碼如下:
RTC 時(shí)鐘[14]是STM32 系統(tǒng)內(nèi)部的時(shí)鐘[15],可以進(jìn)行倒計(jì)時(shí)。倒計(jì)時(shí)結(jié)束后可以產(chǎn)生中斷,這個(gè)中斷用來“喚醒”停止模式,繼續(xù)執(zhí)行主函數(shù)里的代碼,具體實(shí)現(xiàn)如下:
調(diào)用庫(kù)函數(shù)來初始化RTC 時(shí)鐘,并且初始化RTC 時(shí)鐘中斷響應(yīng)函數(shù)。在RTC 時(shí)鐘進(jìn)入中斷后,清除中斷標(biāo)志位和中斷源[16],RTC 中斷源為EXTI_LINE17,重新開啟系統(tǒng)時(shí)鐘以及之前被關(guān)閉的外設(shè),系統(tǒng)恢復(fù)正常,繼續(xù)執(zhí)行代碼。
在停止?fàn)顟B(tài)時(shí),顯示狀態(tài)的LED 燈會(huì)熄滅。在每3 s 發(fā)送一次的狀態(tài)時(shí),LED 會(huì)亮起。
(2)ESP8266 程序設(shè)計(jì)。本系統(tǒng)使用的是ESP8266-01 WIFI 模塊,是市場(chǎng)上較為常用的WIFI 模塊之一。本系統(tǒng)利用串口通信與改模塊進(jìn)行通信(UATR2),采用AT 指令庫(kù)進(jìn)行操作。在下位機(jī)控制系統(tǒng)中,需要將獲取到的溫濕度數(shù)據(jù)發(fā)送到ESP8266 模塊,首先就要初始化,設(shè)置ESP8266 模塊,并且利用Mqtt 協(xié)議連接上百度智能云服務(wù)器。
下位機(jī)硬件系統(tǒng)的設(shè)計(jì)如圖4 所示?;谖锫?lián)網(wǎng)的低功耗溫濕度傳感系統(tǒng)的下位機(jī),是以STM32F103C8T6 為主控核心,由ESP8266-01S 作為WIFI 傳輸模塊,兩路的SHT30 溫濕度傳感器作為溫濕度采集模塊,6*6*5 輕觸開關(guān)作為外部中斷輸入。系統(tǒng)實(shí)時(shí)獲取溫濕度傳感器的數(shù)據(jù),進(jìn)行數(shù)學(xué)解算后打包由串口通信發(fā)送至WIFI 模塊。WIFI 模塊連接上百度智能云服務(wù)器后再由上位機(jī)接收。
圖4 下位機(jī)系統(tǒng)總體框圖
下位機(jī)控制核心采用STM32F103C8T6 芯片。主控芯片是一款基于ARM Cortex-M3 內(nèi)核的32 位微控制器。芯體尺寸為32 位,程序存儲(chǔ)器容量為64 KB,具有72 MHz 的芯片主頻。內(nèi)部集成了ADC 以及I2C 硬件接口,通用I/O 個(gè)數(shù)達(dá)到37 個(gè),工作電壓為2 V~3.6 V。
(1)Qt 程序設(shè)計(jì)思路。本UI 界面設(shè)計(jì)要求具有能夠獲取百度智能云服務(wù)器透?jìng)鞯臏貪穸葦?shù)據(jù)、顯示數(shù)據(jù)、將數(shù)據(jù)存放入數(shù)據(jù)庫(kù)后顯示數(shù)據(jù)庫(kù)數(shù)據(jù)以及將數(shù)據(jù)繪制成數(shù)據(jù)曲線的功能。程序設(shè)計(jì)的思路是通過Qt 的Mqtt 庫(kù)進(jìn)行操作,連接上百度智能云服務(wù)器,訂閱相應(yīng)的主題,而后利用CONNECT 函數(shù)接收服務(wù)器所發(fā)送的信息。通過解包來獲取設(shè)備編號(hào)、環(huán)境的溫濕度數(shù)據(jù)。采用QChart 類來繪制數(shù)據(jù)的折線圖,方便用戶觀察環(huán)境變化的趨勢(shì)。
(2)Qt 程序整體設(shè)計(jì)框架。本系統(tǒng)使用Qt 編寫UI 界面,軟件的整體框架圖如圖5 所示,總共有4 個(gè)界面,分別為連接界面、數(shù)據(jù)庫(kù)數(shù)據(jù)顯示界面、數(shù)據(jù)庫(kù)查找界面和折線圖界面。
圖5 Qt 軟件設(shè)計(jì)框架圖
(3)Qt 顯示界面的優(yōu)化。Qt 在PC 端的控件更加兼容,容易實(shí)現(xiàn)更多的功能,所以在PC 端增加了背景圖片標(biāo)題以及圖標(biāo),增大了QLable 的字號(hào),讓提示更加的清晰。優(yōu)化后的界面如圖6 所示。
圖6 PC 端界面圖
測(cè)量了3 組溫濕度與實(shí)際對(duì)比表格如表1 和表2 所示,表1 為SHT30 通道1,表2 為SHT30 通道2。
表1 SHT30 通道1 測(cè)量溫濕度與實(shí)際對(duì)比
表2 SHT30 通道2 測(cè)量溫濕度與實(shí)際對(duì)比
測(cè)試方法與結(jié)論:實(shí)際溫濕度采用市面上采購(gòu)的溫濕度計(jì)進(jìn)行監(jiān)測(cè),由表1 和表2 數(shù)據(jù)可得溫濕度誤差較小,測(cè)量精度較高。
測(cè)量了7 組工作在停止模式下工作電流、3 s 一發(fā)送模式下工作電流和低功耗模式使用10 000 mah 充電寶供電使用的時(shí)間如表3 所示。
表3 測(cè)量低功耗電流與正常工作電流
測(cè)試方法與結(jié)論:測(cè)試采用5 V 10 000 mah 充電寶供電,將萬用表串聯(lián)至供電系統(tǒng)中,測(cè)得以上數(shù)據(jù)。由表3 中數(shù)據(jù)可得:當(dāng)工作在停止模式下時(shí),電流比3 s 一發(fā)送的工作模式減小一半,功耗減小一半,可以實(shí)現(xiàn)系統(tǒng)的低功耗功能。
減小了功耗之后,采用充電寶供電的本系統(tǒng)可以達(dá)到14 d以上的使用時(shí)間,基本能夠滿足市場(chǎng)的要求。
市面上雖然有功耗比較低的溫濕度采集系統(tǒng),能夠做到4 mA 級(jí)別[10],但是只有采集的功能,沒有通過WIFI 傳輸至服務(wù)器,缺乏主要的功能。本系統(tǒng)如果只有采集功能時(shí),低功耗能達(dá)到2 mA 級(jí)別,比市面上明顯小。
本系統(tǒng)主要特色為:①使用百度智能云服務(wù)器,將數(shù)據(jù)組包發(fā)送至服務(wù)器后使用手機(jī)和PC 端進(jìn)行遠(yuǎn)程接收;②實(shí)現(xiàn)單片機(jī)進(jìn)入停止功能,有效降低了系統(tǒng)的功耗。
本系統(tǒng)比較完整的實(shí)現(xiàn)了以上功能,數(shù)據(jù)傳輸正確,功耗明顯降低。
市面上的低功耗溫濕度傳感器系統(tǒng)比較少,而且缺乏主要功能,本系統(tǒng)填補(bǔ)了市場(chǎng)上的空白。同時(shí)該系統(tǒng)目前在性能和功能上還有很大的提高空間,如云平臺(tái)只能采用百度智能云服務(wù)器,對(duì)其他的云平臺(tái)兼容性較差,上位機(jī)軟件界面優(yōu)化仍然不足,后期可以增加web 界面,使系統(tǒng)更加完善。