楊功銀
(湖南開(kāi)放大學(xué)(湖南網(wǎng)絡(luò)工程職業(yè)學(xué)院),湖南 長(zhǎng)沙 410004)
隨著科技的發(fā)展和人們生活水平的提高,電視已經(jīng)在城鄉(xiāng)家庭中得到普及。電視給少年兒童帶來(lái)了知識(shí)和歡樂(lè)的同時(shí),也讓許多自制力差的孩子因?yàn)殚L(zhǎng)時(shí)間看電視導(dǎo)致視力和學(xué)習(xí)成績(jī)下降,這給家長(zhǎng)帶來(lái)了不小的困擾。解決少年兒童沉迷電視問(wèn)題是一個(gè)社會(huì)難題,本文欲從技術(shù)上解決這個(gè)問(wèn)題,設(shè)計(jì)了一款基于ESP8266EX 芯片的電視開(kāi)關(guān)控制系統(tǒng)。通過(guò)此系統(tǒng),家長(zhǎng)可以隨時(shí)利用手機(jī)微信客戶(hù)端控制家里的電視,對(duì)孩子看電視進(jìn)行有效監(jiān)管。
為了降低成本,本文設(shè)計(jì)的系統(tǒng)直接采用ESP8266EX 芯片作為主控模塊。由于ESP8266EX芯片的GPIO 引腳輸出電壓和電流能力有限,使用GPIO 引腳與繼電器模塊連接,實(shí)現(xiàn)低電壓控制高電壓的目的[1]。為了不讓電視機(jī)在高溫下長(zhǎng)時(shí)間工作,系統(tǒng)使用溫度傳感器DS18B20 實(shí)時(shí)測(cè)量當(dāng)前電視機(jī)內(nèi)部溫度。當(dāng)溫度異常,系統(tǒng)將切斷電視電源。為了遠(yuǎn)程獲取當(dāng)前電視的開(kāi)關(guān)狀態(tài),系統(tǒng)使用ESP8266EX 芯片自帶的AD 模塊采集電視電源板的輸出電壓,附加簡(jiǎn)單的外圍電路就可以實(shí)現(xiàn)設(shè)計(jì)目的。ESP8266EX 芯片是一款能夠通過(guò)無(wú)線(xiàn)網(wǎng)絡(luò)與互聯(lián)網(wǎng)相連的微控制器,可以用它與中國(guó)移動(dòng)物聯(lián)網(wǎng)開(kāi)放平臺(tái)ONENET 云平臺(tái)相連。系統(tǒng)采用目前廣泛流行的微信小程序作為應(yīng)用端,具有開(kāi)發(fā)周期短、安全性高的優(yōu)點(diǎn)[2]。本系統(tǒng)總體方案如圖1 所示。
ESP8266EX 芯片集成了一個(gè)Tensilica L 106 處理器,其內(nèi)部設(shè)計(jì)有SRAM,ADC,PWM、天線(xiàn)開(kāi)關(guān)、射頻、功率放大器、低噪聲接收放大器、濾波器以及電源管理模塊。正是因?yàn)槠浔容^完善的設(shè)計(jì),ESP8266EX 最小系統(tǒng)只需要簡(jiǎn)單的外圍電路[3]。參照ESP8266EX 相關(guān)設(shè)計(jì)資料,本文設(shè)計(jì)的系統(tǒng)核心電路如圖2 所示。
圖2 ESP8266EX 核心電路
ESP8266EX的電源由數(shù)字電源和模擬電源組成。ESP8266EX 的數(shù)字電源電壓在1.8 ~3.3 V,由Pin11和Pin17 兩個(gè)引腳外接3.3 V 提供。ESP8266EX 的模擬電源由Pin1、Pin2、Pin4、Pin29、Pin30 外接電源提供,電壓在2.5 ~3.6 V。ESP8266EX 芯片內(nèi)部的功率放大器和低噪聲功率放大器的工作電壓由Pin1、Pin3、Pin4 外接的模擬電源提供,內(nèi)置鎖相環(huán)電路工作電壓由Pin29、Pin30 引腳外接模擬電源提供。與數(shù)字電源不同的是,模擬電源的幾個(gè)引腳都使用了電容和電感元件,構(gòu)成了LC 濾波電路。濾波電路將電源引入的高頻諧波減弱或去除,提高供電質(zhì)量。為了提高電路的可靠性和穩(wěn)定性,這里選擇的電感額定電流都在1 A 左右,滿(mǎn)足其不少于500 mA 的要求。電路圖中的電容C3 容量達(dá)到10 μF,這是考慮到ESP8266EX 工作在TX 時(shí)會(huì)產(chǎn)生較大的瞬時(shí)電流,如果不加上這個(gè)大電容,電源會(huì)被拉低進(jìn)而影響電路的正常工作[4]。
ESP8266EX 的7 腳是芯片的使能引腳,外接RC 電路控制;32 腳是復(fù)位腳,在芯片內(nèi)部設(shè)計(jì)有上拉電阻,外部通過(guò)RC 電路實(shí)現(xiàn)芯片復(fù)位。由于Pin7 腳低電平持續(xù)200 μs 以上時(shí),ESP8266EX 也將重啟,因此,可以通過(guò)7 腳、32 腳實(shí)現(xiàn)系統(tǒng)重啟。
本設(shè)計(jì)采用8 個(gè)引腳的SPI 接口的Flash,容量大小為2 MB。Flash 芯片的6 腳是時(shí)鐘引腳,通過(guò)電阻R4 與ESP8266EX 芯片的21 腳相連。R4 可以使驅(qū)動(dòng)電流減少,降低外部電路的干擾和串?dāng)_,此外還可以使時(shí)序得到調(diào)節(jié)。外擴(kuò)Flash 可以保存應(yīng)用程序和系統(tǒng)參數(shù),系統(tǒng)從Flash 加載運(yùn)行。
ESP8266EX 芯片可支持多種不同頻率的時(shí)鐘。本設(shè)計(jì)采用了26 MHz 的晶振。晶振的輸入端與ESP8266EX 芯片的28 腳相連,輸出端與ESP8266EX 芯片的27 腳相連。同時(shí),晶振輸入端和輸出端分別增加了對(duì)地調(diào)節(jié)電容C2、C1。
ESP8266EX 芯片的WiFi 信號(hào)接收電路比較簡(jiǎn)單。射頻信號(hào)通過(guò)由C5、L2、C6 構(gòu)成的濾波電路進(jìn)入芯片的2 腳,然后在芯片內(nèi)部進(jìn)行處理。
本設(shè)計(jì)測(cè)溫功能用DS18B20 芯片實(shí)現(xiàn)。DS18B20 是一款體積小、抗干擾能力強(qiáng)、精度高的常用傳感器。它只有電源地端、數(shù)據(jù)信號(hào)輸入輸出端以及電源端三個(gè)引腳。AD 采集電路利用ESP8266EX 芯片的AD 采集引腳采集電視機(jī)電源板開(kāi)機(jī)后產(chǎn)生的12 V 電壓。這里的電壓只有在電視正常開(kāi)機(jī)后才會(huì)有,不開(kāi)機(jī)時(shí)是0 V。因而,通過(guò)判斷此電壓的存在,可以知曉電視機(jī)當(dāng)前是否開(kāi)機(jī)。
本系統(tǒng)軟件設(shè)計(jì)包括三部分:一是云平臺(tái)相關(guān)設(shè)備的創(chuàng)建和配置[5];二是運(yùn)行在ESP8266EX 芯片上的嵌入式軟件開(kāi)發(fā),主要完成與云平臺(tái)的通信、溫度檢測(cè)、電壓檢測(cè)及對(duì)電視機(jī)的開(kāi)關(guān)控制;三是微信小程序的開(kāi)發(fā)設(shè)計(jì)。
由于需要異地遠(yuǎn)程控制,本設(shè)計(jì)需要選用一款云平臺(tái)。中國(guó)移動(dòng)設(shè)計(jì)的ONENET 物聯(lián)網(wǎng)開(kāi)放平臺(tái)是一款面向產(chǎn)業(yè)互聯(lián)和智慧生活應(yīng)用的平臺(tái)即服務(wù)(Platform as a Service,PaaS)平臺(tái)。開(kāi)發(fā)者可以輕松使用MQTT、LwM2M、COAP、HTTP 等行業(yè)標(biāo)準(zhǔn)協(xié)議將各種傳感器和智能硬件快速接入該平臺(tái),實(shí)現(xiàn)低成本物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)和部署[6]。在本設(shè)計(jì)中,筆者登錄ONENET 官網(wǎng)(https://open.iot.10086.cn/console/summary)創(chuàng)建了一款電視開(kāi)關(guān)控制系統(tǒng)產(chǎn)品,在這個(gè)產(chǎn)品下創(chuàng)建了電視機(jī)、微信小程序控制端兩個(gè)設(shè)備并對(duì)其進(jìn)行了一些必要的相關(guān)配置。
ESP8266EX 芯片主要實(shí)現(xiàn)電視機(jī)內(nèi)部工作溫度和工作電壓采集、與云平臺(tái)進(jìn)行雙向通信。
ESP8266EX 這款芯片本身具有ADC 采集功能,可以完成對(duì)電壓的采集。溫度采集可以使用DS18B20 這個(gè)傳感器。部分關(guān)鍵代碼如下。
ESP8266EX 芯片采用消息隊(duì)列遙測(cè)傳輸(Message Queuing Telemetry Transport,MQTT)協(xié)議與云平臺(tái)通信。MQTT 協(xié)議是一個(gè)面向物聯(lián)網(wǎng)應(yīng)用的實(shí)時(shí)通信協(xié)議,底層使用TCP/IP 協(xié)議提供可靠的網(wǎng)絡(luò)連接。ESP8266EX 的軟件開(kāi)發(fā)需要實(shí)現(xiàn)MQTT協(xié)議中的幾種報(bào)文。根據(jù)MQTT 協(xié)議的相關(guān)規(guī)定和本項(xiàng)目的實(shí)際需求,本文設(shè)計(jì)的程序?qū)崿F(xiàn)了connect報(bào)文用于連接ONENET 平臺(tái),訂閱報(bào)文用于接收從微信小程序端推送來(lái)的控制信息,推送報(bào)文用于上報(bào)ESP8266EX 采集的一些溫度信息和反饋一些控制信息?;谄脚_(tái)的設(shè)備、鑒權(quán)信息、上報(bào)信息協(xié)議和格式等,本文設(shè)計(jì)實(shí)現(xiàn)的幾種報(bào)文如下。
(1)connect 報(bào)文。示例:10 26 00 04 4D 51 54 54 04 C2 00 78 00 0A 31 30 38 39 30 32 37 34 39 37 00 06 35 33 37 32 30 39 00 06 79 67 79 35 32 30。
(2)訂閱報(bào)文。示例:82 0D 00 0A 00 08 57 65 69 78 69 6E 69 66 00。
(3)PUBLISH 報(bào)文。示例:30 09 00 04 54 56 69 66 XX XX XX(XX 表示上報(bào)的數(shù)據(jù)信息)。
運(yùn)行在ESP8266EX 芯片上的程序是利用安信可公司提供的集成開(kāi)發(fā)平臺(tái)開(kāi)發(fā)的。對(duì)電視機(jī)電源的控制,采用ESP8266EX 芯片的一個(gè)GPIO引腳輸出控制繼電器的方式進(jìn)行。本設(shè)計(jì)采用ESP8266EX 芯片的GPIO4 腳進(jìn)行控制,在安信可提供的集成開(kāi)發(fā)平臺(tái)中,采用NONRTSDK 對(duì)GPIO4進(jìn)行初始化。對(duì)該引腳的初始化代碼如下。
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U,F(xiàn)UNC_GPIO4);//GPIO4 引腳配置
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);//GPIO4 輸出高電平
在MQTT 的接收?qǐng)?bào)文中,ESP8266EX 芯片對(duì)接收到的報(bào)文進(jìn)行解析。當(dāng)解析的報(bào)文來(lái)自topic為Weixinif 同時(shí)指令為T(mén)VON 時(shí),通過(guò)代碼控制GPIO 引腳輸出高電平,使繼電器接通從而使電視機(jī)接通電源工作;當(dāng)指令為T(mén)VOFF 時(shí),通過(guò)代碼控制GPIO 引腳輸出低電平,使繼電器斷開(kāi)電視機(jī)電源停止工作。此外,用戶(hù)通過(guò)閱讀電視說(shuō)明書(shū)可得到電視的長(zhǎng)時(shí)間工作溫度上限,利用微信小程序端設(shè)置電視的關(guān)機(jī)溫度,當(dāng)溫度傳感器檢測(cè)到溫度超過(guò)設(shè)定值,也可切斷電視機(jī)電源使其停止工作。電視機(jī)工作時(shí),電源板會(huì)輸出12 V 電壓,ESP8266EX芯片的AD 模塊就是通過(guò)采集電源板上的電壓來(lái)判斷電視機(jī)的開(kāi)機(jī)狀態(tài)。ESP8266EX 芯片將電視機(jī)的開(kāi)機(jī)狀態(tài)信息和溫度信息上報(bào)云平臺(tái),并通過(guò)云平臺(tái)轉(zhuǎn)發(fā)到微信小程序端,使得用戶(hù)知曉電視機(jī)的工作狀態(tài)信息并做出控制決策,這樣就可以使得少年兒童看電視的行為可控。軟件切斷電視電源的關(guān)鍵代碼如下。
微信小程序是一種基于微信的輕量級(jí)應(yīng)用程序,可以在微信內(nèi)被便捷地獲取和傳播,同時(shí)具有出色的用戶(hù)使用體驗(yàn)。本設(shè)計(jì)采用微信小程序作為用戶(hù)控制端軟件。小程序的界面設(shè)計(jì)在wxml 文件中體現(xiàn)。本文使用了text、View、input 和image 組件,并對(duì)這些組件做了合適的樣式設(shè)計(jì)。界面顯示效果如圖3 所示。
圖3 微信小程序顯示效果圖
作為控制端,小程序需要借助云平臺(tái)將控制信息發(fā)送到ESP8266EX 芯片端并接收來(lái)自ESP8266EX 芯片的一些上報(bào)信息。ESP8266EX 芯片與云平臺(tái)使用MQTT 協(xié)議進(jìn)行信息傳遞。理論上,微信端也可以通過(guò)MQTT 協(xié)議完成與云平臺(tái)的信息溝通,但是實(shí)現(xiàn)比較復(fù)雜,工作量也比較大。本設(shè)計(jì)使用ONENET 云平臺(tái)提供的應(yīng)用程序編程接口(Application Programming Interface,API)接口,使用HTTP 或HTTPS 調(diào)用進(jìn)行設(shè)備管理、數(shù)據(jù)查詢(xún)以及設(shè)備命令交互。通過(guò)查閱ONENET 云平臺(tái)的使用說(shuō)明,本設(shè)計(jì)中,給云平臺(tái)發(fā)送控制命令采用POST 方法。實(shí)現(xiàn)發(fā)送控制指令的部分關(guān)鍵代碼如下。
本文設(shè)計(jì)的基于ESP8266EX 芯片的電視開(kāi)關(guān)控制系統(tǒng)能夠采集電視的工作狀態(tài)和實(shí)時(shí)溫度信息,并通過(guò)ONENET 云平臺(tái)轉(zhuǎn)發(fā)到用戶(hù)使用的微信小程序端實(shí)現(xiàn)遠(yuǎn)程控制。為了節(jié)省成本,減小系統(tǒng)的體積,便于安裝使用,本系統(tǒng)不使用常與ESP8266EX 芯片搭配的帶串口的單片機(jī),提高了系統(tǒng)的穩(wěn)定性和可靠性。本系統(tǒng)可使得家長(zhǎng)對(duì)少年兒童的看電視行為實(shí)現(xiàn)有效監(jiān)管,減少沉迷電視對(duì)少年兒童的身心傷害。