文 暉,和海蓮
(1.蘭州石化職業(yè)技術(shù)學(xué)院,甘肅 蘭州 730060;2.昌吉職業(yè)技術(shù)學(xué)院,新疆 昌吉 831100)
在智能家居的應(yīng)用中,如家庭燃?xì)庑孤┍O(jiān)控、火災(zāi)預(yù)警、家電遠(yuǎn)程開開關(guān)控制等,既經(jīng)濟(jì)實(shí)惠又能實(shí)現(xiàn)預(yù)警功能的控制器相對(duì)較少。本文設(shè)計(jì)的控制器,不需要專門的物聯(lián)網(wǎng)網(wǎng)關(guān),減少設(shè)備開支與環(huán)節(jié),通過WI-FI直接與家庭無線網(wǎng)絡(luò)通訊,可以方便采集模擬量、開關(guān)量數(shù)據(jù),并在OneNet云平臺(tái)遠(yuǎn)程進(jìn)行開關(guān)量設(shè)備的手動(dòng)與自動(dòng)策略控制以及實(shí)現(xiàn)手機(jī)報(bào)警功能。
一般來講,物聯(lián)網(wǎng)設(shè)備要接入到云平臺(tái)需要專門的網(wǎng)關(guān)進(jìn)行協(xié)議轉(zhuǎn)換與數(shù)據(jù)轉(zhuǎn)發(fā)。除此之外,還可使用4G、5G、NB-IoT與Wi-fi等通信模塊直接與云平臺(tái)通信。但是除Wi-fi通信方式外,其他方式都需要向服務(wù)提供商付費(fèi),因此本系統(tǒng)選擇ESP8266EX作為通信模塊,該模塊提供了套度集成的Wi-Fi SoC解決案,擁有完整且自成成體系的Wi-Fi絡(luò)功能,能夠獨(dú)應(yīng)。當(dāng)ESP8266EX獨(dú)應(yīng)時(shí),能夠直接從外接flash中啟動(dòng),只需通過SPI/SDIO接或UART接即可作為Wi-Fi適配器,應(yīng)到基于任何微控制器的硬件設(shè)計(jì)中。從結(jié)構(gòu)上講,ESP8266EX集成了天線開關(guān)、射頻balun、功率放器、低噪聲放器、濾波器和電源管理模塊,因此僅需少量的外部電路,并且能將PCB尺降到最。ESP8266EX還集成了增強(qiáng)版的32-bit內(nèi)核處理器,帶上SRAM,并可以通過IO外接傳感器和其他執(zhí)行設(shè)備。ESP8266EX的芯片原理如圖1所示。
圖1 ESP8266EX芯片原理圖Fig.1 Chip principle of ESP8266EX
本控制器中選擇由深圳某公司開發(fā)的ESP8266物聯(lián)網(wǎng)開發(fā)板作為系統(tǒng)主板。主板搭載由安信可生產(chǎn)的基于ESP8266EX的ESP-12F模組,ESP-12F模組的特點(diǎn)是3.3V電源供電、26MHz晶振、32Mbit外部FLASH、PCB板載天線。主板不使用額外的單片機(jī)作為處理器,因此不需要使用AT指令,而是通過ESP8266EX提供的SDK編程,將編譯好的程序存放在外部FLASH中,ESP8266EX讀取程序并執(zhí)行。ESP8266的I/O外設(shè)引腳原理圖如圖2所示。
圖2 ESP8266的I/O外設(shè)引腳原理圖Fig.2 Schematic diagram of I/O peripheral pins for ESP8266
主板通過Mini USB口5V供電,再通過穩(wěn)壓轉(zhuǎn)換電路提供5V與3.3V兩種電壓分別為外圍電路與ESP8266模組供電。該主板提供了冗余的電源引腳,外接傳感器可以直接通過主板的電源引腳供電。
1.3.1模擬量采集
(1)ADC模擬量采集
ESP8266模塊有一路ADC引腳,可以采集一個(gè)模擬量。但外部電壓量程是0~1.0V,內(nèi)部參考電壓是3.3V,使用時(shí)需要在外圍電路串聯(lián)分壓電阻,分辨率是1/1024V。連接可燃?xì)怏w傳感器后可以用來采集可燃?xì)怏w濃度信號(hào)。
(2)DHT11溫濕度采集
GPIO5引腳可以連接DHT11溫濕度傳感器,采用3.3V電壓供電,使用單根總線與單片機(jī)進(jìn)行雙向的串行數(shù)據(jù)傳輸,信號(hào)傳輸距離可達(dá)20m以上。非常適用于對(duì)精度和實(shí)時(shí)性要求不高的溫濕度測(cè)量場合??梢圆杉?%~95%RH范圍內(nèi)濕度、-20℃~60℃范圍內(nèi)的溫度。
1.3.2 開光量采集與控制
ESP8266共有16個(gè)通IO,除4~6個(gè)用于Flash通訊、GPIO0、GPIO2、GPIO15用于復(fù)位與下載功能外,可選擇如表1所示的引腳用于開關(guān)量采集與控制。
表1 開關(guān)量GPIO引腳選用Table 1 Switch GPIO pin selection
編程采用安信可開發(fā)環(huán)境。軟件開發(fā)可以選擇Non-OS SDK與RTOS兩種方式。Non-OS SDK是不基于操作系統(tǒng)的SDK,提供IOT_Demo和AT的編譯。Non-OS SDK主要使定時(shí)器和回調(diào)函數(shù)的方式實(shí)現(xiàn)各個(gè)功能事件的嵌套,達(dá)到特定條件下觸發(fā)特定功能函數(shù)的目的。Non-OS SDK使espconn接實(shí)現(xiàn)網(wǎng)絡(luò)操作,用戶需要按照espconn接的使用規(guī)則進(jìn)行軟件開發(fā)。RTOS版本SDK使FreeRTOS系統(tǒng),引入OS多任務(wù)處理的機(jī)制,用戶可以使用FreeRTOS的標(biāo)準(zhǔn)接實(shí)現(xiàn)資源管理、循環(huán)操作、任務(wù)內(nèi)延時(shí)、任務(wù)間信息傳遞和同步等面向任務(wù)流程的設(shè)計(jì)式。
在本方案中,外設(shè)較少,功能要求相對(duì)簡單,因此選擇Non-OS SDK開發(fā)方式,采用C語言編程。
修改安信可案例工程,生成當(dāng)前工程模板。ESP8266的SDK編程是基于內(nèi)核回調(diào)的方式。用戶只需要user_main.c文件中函數(shù)void user_init(void)中進(jìn)行內(nèi)核的初始化,主要包含IO、定時(shí)器、中斷的初始化、網(wǎng)絡(luò)參數(shù)設(shè)置等工作。Non-OS SDK使用四種類型的函數(shù):
第一,應(yīng)用函數(shù):被調(diào)用。使用時(shí)加建議添加ICACHE_FLASH_ATTR宏。相應(yīng)程序?qū)⒋娣旁趂lash中,被調(diào)用時(shí)才加載到cache運(yùn)。如果添加了IRAM_ATTR宏的函數(shù),則會(huì)在上電啟動(dòng)時(shí)就加載到iRAM中,但這樣會(huì)增加單片機(jī)內(nèi)存開銷。主要用到的應(yīng)用函數(shù)有:
wifi_set_opmode (STATION_MODE);//設(shè) 置WiFi的station模式
spi_flash_read();//讀出falsh中的SSID/PASS參數(shù)
system_init_done_cb(systemStartDone)//系統(tǒng)啟動(dòng)完成(參數(shù)為回調(diào)函數(shù))
os_timer_setfn(&timer,SoftTimerCb,NULL);//設(shè)置軟件定時(shí)器
第二,回調(diào)函數(shù):系統(tǒng)某事件發(fā)生時(shí)會(huì)調(diào)用回調(diào)函數(shù)。本系統(tǒng)用到大量的回調(diào)函數(shù),要編寫回調(diào)函數(shù),用戶首先需要使用相應(yīng)的register_cb API注冊(cè)回調(diào)函數(shù)。主要用到的回調(diào)函數(shù)有:
systemStartDone()//系統(tǒng)啟動(dòng)完成后的回調(diào)函數(shù)
smartconfig_done()//配網(wǎng)完成后的回調(diào)函數(shù)
數(shù)據(jù)采集、發(fā)送數(shù)據(jù)、發(fā)送心跳報(bào)文等各類定時(shí)器的回調(diào)函數(shù)。
第三,用戶任務(wù):用戶根據(jù)具體應(yīng)用需求編寫的自定義函數(shù)。本控制器中主要編寫的用戶函數(shù)有:
Init_GPIO();//IO配置
Init_ADC();//ADC配置
uart_init(115200,115200);//調(diào)試串口的初始化
smartconfig_start(smartconfig_done);//第 三 方配網(wǎng)函數(shù)(參數(shù)為回調(diào)函數(shù))
第四,中斷服務(wù)程序(Interrupt Service Routines,ISR):發(fā)硬件中斷時(shí)會(huì)調(diào)這些函數(shù)。當(dāng)使能中斷時(shí),必須注冊(cè)相應(yīng)的中斷處理函數(shù)。ISR必須添加IRAM_ATTR。
本控制器可用于家庭廚房燃?xì)庑孤⒒馂?zāi)預(yù)警與家電(空調(diào)、電飯煲)電源開關(guān)控制的情景。在預(yù)警模式下,可以通過OneNet平臺(tái)發(fā)送預(yù)警信息到手機(jī),也可以遠(yuǎn)程發(fā)送開關(guān)量控制指令到家電開關(guān)控制繼電器。系統(tǒng)軟件設(shè)計(jì)流程圖如圖3所示。
圖3 設(shè)備層應(yīng)用軟件算法設(shè)計(jì)Fig.3 Application software algorithm design at the device layer
OneNet平臺(tái)可以實(shí)現(xiàn)多種協(xié)議設(shè)備接入,如MQTT、Modbus、HTTP、EDP、TCP等協(xié)議[1]。EDP(Enhanced Device Protocol增強(qiáng)設(shè)備協(xié)議)是OneNet平臺(tái)根據(jù)物聯(lián)網(wǎng)特點(diǎn)專門定制的完全公開的基于TCP的協(xié)議,可以廣泛應(yīng)用到智能家居、交通、物流、能源以及其他行業(yè)應(yīng)用中[2],使用簡單、方便。
本控制器實(shí)際就是一個(gè)物聯(lián)網(wǎng)設(shè)備,在OneNet平臺(tái)創(chuàng)建好賬戶、產(chǎn)品與設(shè)備信息后,平臺(tái)會(huì)生成APIkey,之后就可以在控制器中利用EDP的SDK編程實(shí)現(xiàn)對(duì)應(yīng)功能。EDP SDK主要包含Edpkit.h與Edpkit.c,利用其中的接口進(jìn)行EDP連接、報(bào)文發(fā)送等。EDP SDK主要實(shí)現(xiàn)的功能有:
①申請(qǐng)與釋放內(nèi)存
②兩種登錄包、心跳包的組裝
③連接與下發(fā)命令、功能解包
④封裝協(xié)議頭與功能包
EDP SDK中實(shí)現(xiàn)了EDP協(xié)議,通過對(duì)相應(yīng)API的調(diào)用就可以實(shí)現(xiàn)通過EDP協(xié)議的登錄、組包、解包功能。EDP協(xié)議報(bào)文消息格式如表2所示。
表2 EDP協(xié)議報(bào)文消息格式Talbe 2 EDP protocol message information format
基于ESP8266的模塊編碼、編譯完成后,生成eagle.flash.bin(0x00000)文件(括號(hào)內(nèi)為flash固件燒寫地址)、eagle.irom0text.bin(0x10000)文件。通過串口利用燒寫工具ESP_DOWNLOAD_TOOL_V2.4下載到單片機(jī)后運(yùn)行。
在OneNet平臺(tái)還需要?jiǎng)?chuàng)建可視化界面,有基于PC與手機(jī)的界面,方便手機(jī)與PC操作。其中的可視化控件通過拖拉添加布局,控件與設(shè)備端變量關(guān)聯(lián),很容易實(shí)現(xiàn)顯示與開關(guān)命令操作。OneNet云臺(tái)與設(shè)備端的協(xié)議實(shí)現(xiàn)流程圖如圖4所示。
圖4 OneNET平臺(tái)及EDP協(xié)議實(shí)現(xiàn)流程圖Fig.4 Flow chart of OneNet platform and EDP protocol implementation
控制器軟件燒寫完畢后加電啟動(dòng),使用手機(jī)連接到當(dāng)前Wi-Fi熱點(diǎn),打開安信可專用的配網(wǎng)軟件配網(wǎng)。在OneNet云平臺(tái)可查看設(shè)備在線狀態(tài)。由圖5所示可知,當(dāng)前控制器設(shè)備已經(jīng)在線,說明控制器與云平臺(tái)處于連接并通信的狀態(tài)。
圖5 控制器連接OneNet云臺(tái)狀態(tài)Fig.5 Status of the controller connected to the OneNet gimbal
進(jìn)入OneNet云臺(tái)應(yīng)用界面,加載控件、關(guān)聯(lián)設(shè)備變量。由圖6所示,可以采集到濕度實(shí)時(shí)數(shù)據(jù),連接不同的模擬量傳感器就可以采集其他數(shù)據(jù)。點(diǎn)擊開關(guān)控件就能遠(yuǎn)程控制控制器上繼電器的開合狀態(tài),進(jìn)而達(dá)到控制家電電源開關(guān)的效果。
圖6 模擬量數(shù)據(jù)與遠(yuǎn)程開關(guān)控制界面Fig.6 Analog data and remote switch control interface
進(jìn)入觸發(fā)器管理,設(shè)置觸發(fā)變量、觸發(fā)規(guī)則、信息接受方式。OneNet平臺(tái)提供免費(fèi)郵件發(fā)送預(yù)警信息服務(wù),短信息則需要服務(wù)費(fèi)用。本控制器測(cè)試階段使用郵箱接收,當(dāng)達(dá)到指定可燃?xì)怏w閾值、濕度閾值會(huì)自動(dòng)發(fā)送郵件,手機(jī)就會(huì)有新信息提示,從而達(dá)到預(yù)警功能,同時(shí)也可遠(yuǎn)程開、關(guān)繼電器,從而達(dá)到遠(yuǎn)程控制設(shè)備。