李紅衛
(山東魯碧建材有限公司,山東濟南,271103)
阿里云物聯網平臺是具有設備接入與管理、監控運維、存儲與流轉數據、訂閱發布消息等功能的一體化平臺。支持多個物聯網設備連接,采集設備數據存儲到云服務器;服務端按照協議發送指令到設備,實現遠程控制。
本文通過移植MQTT協議到STM32F103單片機,通過串口控制ESP8266無線模塊將空氣中溫濕度和有害氣體濃度傳送到阿里云,并利用loT Studio物聯網開發服務設計電腦端WEB應用和手機APP。同時云端可以通過STM32控制現場照明設備,實現了對現場空氣質量的監測和遠程控制。
系統總體框圖如圖1所示,主要包括STM32單片機模塊,DHT11傳感器模塊,MQ135傳感器模塊,ESP8266無線模塊,阿里云模塊,繼電器模塊。

圖1 系統總體框圖
控制器采用STM32F103芯片,該芯片是意法半導體推出的高性能、低功耗的32位處理器。其最高工作頻率72MHz,128k字節的閃存程序存儲器,高達20k字節的SRAM,2個12位數模轉換器,7通道的DMA控制器,多達80個快速I/O端口。該芯片性價比高、可靠穩定性好。
MQ135傳感器可以檢測氨氣、硫化物等多種有害氣體在空氣中的濃度,其檢測元件是二氧化錫(Sn02)。二氧化錫在干凈的空氣中電導率是較低的,隨著污染氣體濃度的上升,其電導率會增大。通過相應的外圍電路可以輸出與污染氣體濃度相對應的電壓信號。其監測濃度范圍10~1000ppm,具有壽命長,低成本的特點。
實際使用中,采用MQ135傳感器模塊,四個端口分別為VCC、GND、AOUT和DOUT,其中AOUT接STM32內置的AD轉換器的輸入引腳。模塊電路圖如圖2所示。

圖2 MQ135傳感器模塊原理圖
STM32具有3個12位分辨率的ADC,每個ADC共用21個外部檢測通道,具有單次或多次掃描轉換功能,轉換速度最快只需1μs。同時我們利用STM32的直接內存存儲器(DMA)功能,把ADC轉換結果直接傳輸到SRAM,節省了CPU資源,處理速度進一步提升。
通過MQ135的靈敏度特性曲線可以發現RS/R0與ppm的關系。利用曲線擬合方程工具,在標準條件下(溫度20℃,濕度65%,氧氣濃度21%,RL=10K),對靈敏度曲線進行數據采集和曲線擬合,得出甲烷濃度和傳感器電壓的大致關系:
ppm=pow((3.488*10*A DC_VALUE)/(5-ADC_VALUE),(1.0/0.3203))。
DHT11是一款溫濕度一體的數字化傳感器,包括一個電阻式測濕元件和一個NTC測溫元件,具有穩定性好,響應快,成本低等優點。DHT11與STM32之間采用簡單的單總線通訊,僅需要一個IO口就可以將40bit的溫濕度數據一次性傳送給STM32。數據采用校驗和方式方式校驗,有效的保證了數據的準確性。DHT11功耗較低,5V電壓工作下,工作平均最大電流0.5mA,溫度測量范圍0℃~50℃,濕度測量范圍20~90%RH。
ESP8266是串口型WIFI,擁有無線高性能SOC,能夠獨立運行,也可以作為slave搭載于其他Host運行。芯片內部集成內核CPU、電源管理轉換器、天線開關balun等。同時內嵌了高速緩存存儲器,減少內存需求,提高了系統運行效率。
ESP8266有三種網絡運行模式:STA模式、AP模式和STA+AP模式。本系統中ESP8266主要承擔了信息接受和信息發送的任務,故設置為STA模式。通過AT指令來連接到設定的路由器上。
AT+CWJAP=ssid,pswd; 其中ssid為路由器名稱,pswd為路由器密碼。
設備登錄阿里云的AT指令為:
AT+IOTCFG=devicename;productkey;devicesecret;其中devicename為創建的設備名稱,productkey為產品名稱,devicesecret為設備密鑰。這三個在阿里云平臺創建產品和設備的時候可以得到。
STM32通過串口2與ESP8266通訊,具體接線方式如圖3所示,ESP8266原理圖如圖4所示。

圖3 ESP8266與STM32引腳

圖4 ESP8266原理圖
當STM32接收到云端發來的控制命令時,可以通過繼電器模塊執行相應操作,這里用來控制現場照明設備。原理圖如圖5所示。當PD0輸出高電平時,點亮光電耦合器內部LED,晶體管導通,此時Q1的G電壓很低,當Q1導通的時候,電磁線圈內部產生電流,繼電器吸合。當PD0輸出低電平時,Q1關閉,繼電器復位。繼電器模塊是5V供電,STM32單片機系統是3.3V供電,所以采用光電耦合器進行隔離,起到了保護作用。

圖5 繼電器模塊原理圖
STM32控制器的開發環境是MDK 5,采用C語言編程,移植了MQTT傳輸協議實現與阿里云平臺的可靠通訊。將STM32的usart1與電腦端串口調試助手相連,可以實時打印出控制器的運行和連接狀態,方便系統的調試。軟件流程圖如6所示。

圖6 系統流程圖
STM32通過PA8讀取DHT11數據,上電后先對DHT11進行初始化,當PA8檢測到返回0時,說明初始化成功。DHT11的溫濕度數據存放在5個字節,其中包括8位濕度整數部分、8位濕度小數部分、8位溫度整數部分和8位溫度小數部分。因為DHT11一次通訊時間最大3ms,所以stm32連續采樣間隔不小于100ms。讀取數據的關鍵程序如下所示:


MQ135模塊輸出的時模擬信號,電壓范圍是是0到5V,檢測到有害氣體的濃度越高,輸出電壓越高。stm32首先對AD轉換器和DMA進行初始化,然后將MQ135的模擬信號轉換成數字信號,通過公式計算出有害氣體濃度。關鍵代碼如下所示:



MQTT是一種具有發布/訂閱模式功能的輕量級通訊協議。具有代碼設計簡單,帶寬占用低,通訊實時可靠的特點。對于受限環境如物聯網通訊,尤為適用。本協議運行在TCP/IP協議上,有以下特點:
(1)發布/訂閱消息模式,提供了一對多的消息分發和應用之間的解耦。
(2)消息傳輸不需要知道負載內容。
(3)提供三種等級的服務質量。
(4)“至多一次”,底層完全依靠TCP/IP協議,有出現數據丟失的機率。
(5)“至少一次”,確保消息到達,但有數據重復的概率。
(6)“僅一次”,保證消息只到達一次。
(7)網絡流量占用低,傳輸簡單,協議交換方便。
(8)發送異常中斷時,利用Last Will與Testment功能告知客戶端。
由于阿里云平臺只接受Alink JSON 標準數據格式,所以在ESP8266采集數據之后要進行數據嵌套,然后再通過MQTT協議發送到云端。數據轉換與上傳的核心程序如下所示:

同時可以訂閱阿里云的相關主題,將平臺下傳的數據進行解析,獲取核心數據,然后跟本地設定好的字符串對比,成功則執行相關命令。這里我們通過云平臺控制現場照明,如果發送的命令參數是LED:1則打開照明設備,如果是LED:0則關閉照明設備。核心程序如下所示:


首先要注冊阿里云物聯網平臺,登陸后選擇公共實例,主要包括以下步驟:創建產品與設備,為產品定義物聯網模型,建立設備與平臺的連接,服務端訂閱設備消息,云端下發指令。創建的產品是管理一類設備的集合,每一個平臺設備對應一個實際的物聯網設備。創建完設備會獲得平臺提供的設備三元組,即ProductKey、DeviceName和DeviceSecret。然后按照平臺設定的協議規則得到Username、Password、ClientID、IP等參數,最終燒錄到物聯網設備,作為連接阿里云的身份驗證信息。
本文中創建了溫度、濕度、MQ135空氣質量和控制LED四個屬性,主要包含功能名稱、標識符、數據類型和數據定義四個屬性,具體如圖7所示。

圖7 屬性和功能
loT Studio是阿里云提供的一款簡單、高效的物聯網開發工具,適用于各個物聯網行業核心場景。提供了豐富的產品和設備選擇。具有web和移動可視化開發功能,開發者無需編寫代碼就可以快速搭建WEB端和移動端應用。通過拖拽的方式引入儀表盤、歷史曲線圖、設備控制面板等控件,然后為每個控件配置數據源,應用搭建完畢就可以預覽和使用,并支持綁定自己的域名對最終用戶進行發布。本文設計的WEB端運行效果如圖8所示。APP端如圖9所示。

圖8 WEB運行界面

圖9 手機APP界面
本文設計的空氣質量監測系統,可以監測空氣中的有害氣體濃度和溫濕度,并可以將數據傳送到阿里云平臺,用戶可以通過電腦web端和手機app查看,同時可以控制現場照明設備。系統可靠,成本低滿足了現場環境的需要。