楊永明,徐海霞
( 1.西安建筑科技大學(xué) 理學(xué)院,陜西 西安 710055;2.寧夏醫(yī)科大學(xué)圖書(shū)館,寧夏 銀川 750004)
通過(guò)網(wǎng)絡(luò)對(duì)家中設(shè)備實(shí)行遠(yuǎn)程控制或者語(yǔ)音控制,相比普通家居具有更多優(yōu)勢(shì)。具備遠(yuǎn)程控制、語(yǔ)音控制、自動(dòng)報(bào)警、在線監(jiān)控、自動(dòng)通風(fēng)等功能的智能家居發(fā)展迅速,并且依舊處于探索階段。通過(guò)物聯(lián)網(wǎng)技術(shù)開(kāi)發(fā)智能家居不僅是緊跟社會(huì)發(fā)展的明智之舉,也是搶占市場(chǎng)發(fā)展先機(jī)的必由之路。
通過(guò)學(xué)習(xí)物聯(lián)網(wǎng)技術(shù)、程序編程語(yǔ)言編寫(xiě)簡(jiǎn)易的硬件程序,實(shí)現(xiàn)硬件與軟件連接,設(shè)計(jì)制作具有遠(yuǎn)程控制功能的智能插板。
通過(guò)硬件將物體接入互聯(lián)網(wǎng),再由硬件芯片通過(guò)各種通信協(xié)議與微控制器和微處理器通信,由相應(yīng)的控制器控制設(shè)備運(yùn)轉(zhuǎn)、連接移動(dòng)端設(shè)備或者PC端,移動(dòng)端通過(guò)云端控制器實(shí)現(xiàn)物體的遠(yuǎn)程控制。本次設(shè)計(jì)包括云平臺(tái)的搭建、硬件程序設(shè)計(jì)和移動(dòng)端設(shè)計(jì)三部分。下面主要介紹介紹硬件程序設(shè)計(jì)。
選擇使用由安信公司基于ESP8266模塊設(shè)計(jì)的ESP8266-nodeMCU開(kāi)發(fā)板,雖然ESP8266-nodeMCU每個(gè)引腳都有明確的標(biāo)號(hào),且有排插,便于線路連接,但ESP8266-nodeMCU開(kāi)發(fā)板上的引腳標(biāo)號(hào)與ESP8266模塊的引腳功能并不匹配,所以需要了解ESP8266-nodeMCU開(kāi)發(fā)板引腳匹配的ESP8266模塊的引腳功能。以GPIO開(kāi)頭的引腳標(biāo)號(hào)代表實(shí)際ESP8266模塊的引腳標(biāo)號(hào),D開(kāi)頭的引腳代表ESP8266-nodeMCU開(kāi)發(fā)板上的引腳標(biāo)號(hào)。在編寫(xiě)代碼時(shí),假如使用“digitalWrite(2,HIGH)”語(yǔ)句,表示改變引腳GPIO2電平為高,對(duì)應(yīng)的開(kāi)發(fā)板引腳為D4;假如使用“digitalWrite(D2,HIGH)”語(yǔ)句,表示改變D2引腳的電平為高。
使用Arduino IDE軟件對(duì)ESP8266-nodeMCU開(kāi)發(fā)板進(jìn)行程序編譯,當(dāng)完成Arduino IDE軟件的下載之后需要更改開(kāi)發(fā)板的型號(hào)以及連接的串口。首先打開(kāi)計(jì)算機(jī)管理界面,進(jìn)入設(shè)備管理器界面,查看電腦連接ESP8266-nodeMCU開(kāi)發(fā)板使用的端口。之后進(jìn)入Arduino軟件,在其工具欄中找到“端口”一欄,選擇ESP8266-nodeMCU開(kāi)發(fā)板使用的端口,然后在此工具欄中的開(kāi)發(fā)板中選擇ESP8266-nodeMCU。
根據(jù)代碼實(shí)現(xiàn)的功能,可以將程序代碼大概分為6個(gè)部分,分別是:定義頭文件、WiFi初始化、接口定義、循環(huán)檢測(cè)、控制程序以及上傳數(shù)據(jù)。
2.2.1 頭文件定義程序
此部分程序用于定義需要用到的頭文件以及信息。WiFi_SSID和WiFi_PASSWD是定義ESP8266開(kāi)發(fā)板連接的WiFi名稱和密碼,只能連接PRODUCT_KEY、DEVICE_NAME以及DEVICE_SECRET定義之前云端搭建時(shí)創(chuàng)建的ESP8266設(shè)備的阿里云三元組信息。ALINK_TOPIC_PROP_SET定義程序接收信息時(shí)用到的Topic,ALINK_TOPIC_PROP_POST定義ESP8266開(kāi)發(fā)板上傳數(shù)據(jù)使用的Topic信息。其中,/sys/a1GccfpSkGH/esp8266/thing/service/property/set和/a1GccfpSkGH/esp8266/user/1均來(lái)自阿里云物聯(lián)網(wǎng)平臺(tái)中的云產(chǎn)品流轉(zhuǎn)規(guī)則Topic,其中一個(gè)Topic具有發(fā)布權(quán)限,另一個(gè)Topic具有訂閱權(quán)限。
2.2.2 WiFi初始化程序
WiFi初始化需調(diào)用ESP8266 WiFi庫(kù)的函數(shù)。這部分程序定義WiFi如何通過(guò)調(diào)用函數(shù)實(shí)現(xiàn)連接。
2.2.3 接口定義程序
該部分程序主要用來(lái)定義需要用到的ESP8266-nodeMCU開(kāi)發(fā)板上的引腳功能,此程序?qū)?號(hào)引腳定義為輸出引腳,并把引腳的初始電平定義為高電平。由于本次設(shè)計(jì)使用的繼電器為低電平,所以引腳電平為高,使繼電器處于關(guān)閉狀態(tài),只有ESP8266接收到開(kāi)關(guān)信號(hào)時(shí)電平變?yōu)榈碗娖讲拍苡|發(fā)繼電器工作。此處還需要注意的是,定義的引腳為ESP8266模塊上的GPIO2號(hào)引腳,在連接硬件電路時(shí),ESP8266-nodeMCU開(kāi)發(fā)板上的引腳不能選擇D2引腳,需要選擇開(kāi)發(fā)板上標(biāo)號(hào)為D4的引腳?!癷nit_WiFi(WiFi_SSID,WiFi_PASSWD)”用于調(diào)用WiFi初始化函數(shù),mqttClient.setCallback(mqtt_callback)語(yǔ)句是調(diào)用之前PubSubClient.h文件中的mqttClient函數(shù),可實(shí)現(xiàn)與阿里云端的連接。
2.2.4 循環(huán)檢測(cè)函數(shù)
程序主要調(diào)用了mqtt函數(shù)中的loop循環(huán)函數(shù),該函數(shù)主要用于對(duì)當(dāng)前mqtt的連接狀態(tài)進(jìn)行檢查,如果檢測(cè)到連接斷開(kāi),程序會(huì)自動(dòng)運(yùn)行連接函數(shù),重新連接mqtt。該函數(shù)能夠保證設(shè)備網(wǎng)絡(luò)處于連接狀態(tài)。
2.2.5 控制程序
這部分代碼可實(shí)現(xiàn)ESP8266開(kāi)發(fā)板的具體功能。前半段代碼解析需由移動(dòng)端發(fā)送Json數(shù)據(jù)。阿里云使用Topic進(jìn)行設(shè)備之間的數(shù)據(jù)傳輸,而Topic中的數(shù)據(jù)為JSON格式,解析之后將數(shù)據(jù)存進(jìn)WeChat_data,如果是數(shù)據(jù)是1,則GPIO2引腳置為低電平,使繼電器打開(kāi),插板電路接通;如果數(shù)據(jù)是0,則GPIO2引腳置為高電平,繼電器關(guān)閉,插板電路斷開(kāi)。
2.2.6 數(shù)據(jù)上傳程序
此部分程序代碼用于將ESP8266中的數(shù)據(jù)寄存于Topic中,通過(guò)Topic向移動(dòng)端發(fā)送,由移動(dòng)端接收溫度與濕度數(shù)據(jù)。由于缺少溫度與濕度的檢測(cè)裝置以及相關(guān)傳感器,所以在程序中使用隨機(jī)數(shù)替代。
運(yùn)用物聯(lián)網(wǎng)技術(shù)設(shè)計(jì)了智能插板,通過(guò)使用由上海樂(lè)鑫公司開(kāi)發(fā)的WiFi8266模塊,使得硬件電路能夠連接WiFi,這無(wú)疑是物聯(lián)網(wǎng)運(yùn)行的基礎(chǔ),而代碼功能的實(shí)現(xiàn)是硬件物聯(lián)網(wǎng)功能實(shí)現(xiàn)的核心。