楊丹 肖娟
關(guān)鍵詞:智能家居;Linux網(wǎng)關(guān);BLE Mesh;低功耗
中圖分類號:TP393 文獻標(biāo)識碼:A
文章編號:1009-3044(2024)03-0094-03
0 引言
在智能家居系統(tǒng)中,通常需要實現(xiàn)將一個家庭內(nèi)的各房間、各位置的傳感器和執(zhí)行器連接上云平臺。如果單個設(shè)備都直接與互聯(lián)網(wǎng)連接,將會增大硬件成本、功耗和配置難度[1]。因此家庭內(nèi)一般需要一個智能家居網(wǎng)關(guān),將所有的傳感器匯聚到網(wǎng)關(guān)上統(tǒng)一上報云平臺,云平臺對執(zhí)行器的操作也通過網(wǎng)關(guān)分發(fā)到家庭中。
本文研究設(shè)計了一套智能家居網(wǎng)關(guān)系統(tǒng),包括一個Linux智能網(wǎng)關(guān),支持BLE組網(wǎng)功能,再配合具有BLE功能的終端節(jié)點,實現(xiàn)應(yīng)用到家庭中的整套智能方案。
1 設(shè)計方案
智能家居平臺硬件包括智能家居網(wǎng)關(guān)和終端節(jié)點。它們組成BLE Mesh網(wǎng)絡(luò),系統(tǒng)拓?fù)浣Y(jié)構(gòu)圖如圖1 所示。
2 網(wǎng)關(guān)的設(shè)計
網(wǎng)關(guān)采用基于Linux的嵌入式操作系統(tǒng),CPU使用NXP i.MX 6ULL應(yīng)用處理器,NXP i.MX 6ULL應(yīng)用處理器是一款高性能、超高效器件,采用單個ARM Cortex?-A7內(nèi)核,運行速度高達(dá)528MHz。網(wǎng)關(guān)硬件上主要包括有線網(wǎng)絡(luò)、無線網(wǎng)絡(luò)和BLE模組,軟件主要包括系統(tǒng)配置軟件、傳感器和執(zhí)行器通信軟件和與云平臺通信的軟件。
2.1 網(wǎng)關(guān)硬件設(shè)計
網(wǎng)關(guān)的硬件采用I.MX6U-MINI開發(fā)板加上若干個外接子模塊構(gòu)成。本文網(wǎng)關(guān)采用開發(fā)板通過串口模塊接口與BLE 5.0模組相連接,通過SDIO WiFi接口與RTL8189網(wǎng)卡相連接,網(wǎng)關(guān)搭配了512MB DDR3L內(nèi)存和8GB EMMC,可以輕松應(yīng)付智能家居場景下的BLE Mesh數(shù)據(jù)采集和分發(fā),云平臺的實時訪問等功能。
2.2 網(wǎng)關(guān)軟件設(shè)計
網(wǎng)關(guān)軟件基于Linux嵌入式C語言開發(fā),采用多進程、多線程的開發(fā)模式,共開發(fā)了網(wǎng)關(guān)主軟件和網(wǎng)關(guān)與云平臺網(wǎng)絡(luò)通信軟件兩個進程。進程間使用消息隊列進行通信,消息隊列本質(zhì)上是位于內(nèi)核空間的鏈表,鏈表的每個節(jié)點都是一條消息。每一條消息都有自己的消息類型,消息類型用整數(shù)來表示,其中數(shù)字 1 表示類型為 1 的消息,數(shù)字2、3、4 類似。讀取消息類型為 0 消息代表按順序讀取隊列類所有消息[2]。
1) 網(wǎng)關(guān)主軟件
網(wǎng)關(guān)主軟件包括網(wǎng)關(guān)配置程序和與BLE組網(wǎng)通信程序,使用多線程的方式實現(xiàn),流程圖如圖2所示。程序啟動后判斷是否進入配置模式,如果網(wǎng)關(guān)從未配置過,將自動進入配置模式,如果網(wǎng)關(guān)已配置過,則在開機過程中通過長按按鍵進入配置模式,否則將自動進入運行模式運行。
配置模式下分別啟動一個TCP服務(wù)器和UDP服務(wù)器,PC端網(wǎng)關(guān)配置軟件將通過搜索的方式搜索該網(wǎng)關(guān),然后通過TCP協(xié)議連接網(wǎng)關(guān)。主要功能是利用PC端網(wǎng)關(guān)配置軟件給網(wǎng)關(guān)綁定傳感器等終端節(jié)點,并且與云平臺上的項目信息和終端節(jié)點實現(xiàn)同步。
正常運行模式下,需要啟動BLE網(wǎng)絡(luò)通信,并開啟與云平臺網(wǎng)絡(luò)通信程序。網(wǎng)關(guān)一方面實時讀取BLE網(wǎng)絡(luò)上的傳感器數(shù)據(jù),通過消息隊列的方法轉(zhuǎn)發(fā)給網(wǎng)絡(luò)通信程序,進而上報給云平臺。另一方面從消息隊列中接收云平臺通過網(wǎng)絡(luò)通信程序下發(fā)的控制指令,再通過BLE網(wǎng)絡(luò)專用指令直接控制相應(yīng)終端節(jié)點。
網(wǎng)關(guān)主軟件主要涉及使用Linux實現(xiàn)TCP、UDP 的服務(wù)器軟件,按鍵解析,Json通信格式解析,UART 串口通信,文件操作,多線程程序設(shè)計以及進程間消息隊列通信等技術(shù)。
2) 網(wǎng)關(guān)與云平臺網(wǎng)絡(luò)通信軟件
網(wǎng)關(guān)與云平臺網(wǎng)絡(luò)通信軟件主要目的是創(chuàng)建一個TCP客戶端,實現(xiàn)網(wǎng)關(guān)訪問云平臺。該軟件包含上報數(shù)據(jù)和接收數(shù)據(jù)兩個線程,分別處理傳感器數(shù)據(jù)的實時轉(zhuǎn)發(fā)上報和云平臺的控制指令接收。流程圖如圖3所示。
首先通信軟件需要利用云平臺上的設(shè)備信息和密鑰進行鑒權(quán),鑒權(quán)成功后才可以上報數(shù)據(jù)和接收數(shù)據(jù),并且要不斷地發(fā)送心跳包維持連接。如果程序從消息隊列中獲取到了BLE網(wǎng)絡(luò)請求上報數(shù)據(jù)的消息,則將該消息打包成Json格式上報給云平臺,如果上報數(shù)據(jù)因網(wǎng)絡(luò)原因失敗,則需要嘗試重新連接云平臺并進行鑒權(quán)。
在接收線程中,需要不斷地讀取云平臺下發(fā)的信息,并判斷信息屬性是心跳消息、連接響應(yīng)、上報數(shù)據(jù)響應(yīng)還是命令請求,做出不同的策略。如果是命令請求,則將命令解析后發(fā)送到消息隊列,經(jīng)過網(wǎng)關(guān)主軟件解析后轉(zhuǎn)發(fā)到BLE網(wǎng)絡(luò)控制相應(yīng)設(shè)備。
網(wǎng)絡(luò)通信軟件主要涉及使用Linux實現(xiàn)TCP的客戶端軟件、Json通信格式解析、文件操作、多線程程序設(shè)計以及進程間消息隊列通信等技術(shù)。在TCP通信中,要注意保持連接的靈活性和確保網(wǎng)絡(luò)中斷后的TCP通信重新連接。
3 終端節(jié)點的設(shè)計
終端節(jié)點的功能是采集各類傳感器的信息上報和接收網(wǎng)關(guān)的控制命令操作執(zhí)行器,每個終端節(jié)點都需要搭載BLE模組。終端節(jié)點采用自制PCB板的方案,考慮到成本及通用性,將傳感器和執(zhí)行器做成一塊通用PCB,根據(jù)不同的焊接方案選擇不同的功能。終端節(jié)點主要采用STM32+JDY-24M BLE模組方案,STM32負(fù)責(zé)采集傳感器數(shù)據(jù)和配置BLE模組,BLE模組主要負(fù)責(zé)與網(wǎng)關(guān)和其他終端節(jié)點BLE組網(wǎng)通信。STM32F030微控制器集成了以48 MHz頻率工作的高性能Arm Cortex-M0內(nèi)核及多種外設(shè)。STM32F030微控制器適合設(shè)計低功耗應(yīng)用。JDY-24M 超級藍(lán)牙支持主從透傳、iBeacon、BLE 探針、iBeacon 探測、MESH 組網(wǎng),組網(wǎng)數(shù)量最大支持65 280個設(shè)備,組網(wǎng)通信速度支持50ms發(fā)16字節(jié)數(shù)據(jù),單模塊支持路由節(jié)點與終端節(jié)點,JDY-24M 組網(wǎng)只需要配置好組網(wǎng) NETID、短路地址后即可自動組網(wǎng)[3-4]。
3.1 終端節(jié)點硬件設(shè)計
終端節(jié)點的硬件設(shè)計以主控MCU STM32和BLE 模組為主,外接電源模塊、傳感器模塊、繼電器模塊組成一個終端節(jié)點。
1) 主控模塊設(shè)計
主控模塊采用STM32F030F4P6最小系統(tǒng)板,引出了5.0V/3.3V的供電引腳、編程下載用的SWD串行調(diào)試接口、ADC功能采集引腳、USARTs通信接口以及普通IO口[5]。終端節(jié)點需要有模擬傳感器數(shù)據(jù)采集、數(shù)字式傳感器采集、開關(guān)式傳感器采集的功能和串口通信的功能,故這些引腳的引出滿足設(shè)計需要。
2) BLE模塊設(shè)計
JDY-24M BLE模組與主控MCU之間采用UART 接口連接,通過標(biāo)準(zhǔn)AT指令通信。BLE模組具備無線控制輸出IO功能,可直接經(jīng)過驅(qū)動電路對繼電器施加控制,進而控制電燈、電風(fēng)扇等執(zhí)行設(shè)備的開啟和關(guān)閉。
3) 電源模塊設(shè)計
為方便終端節(jié)點的電源接入,共設(shè)計了三路電源,分別是兩節(jié)干電池3.0V供電、220V交流電供電以及5V適配器供電,便于終端節(jié)點的各種場景下使用。
220交流電采用整流模塊輸出5.0V和3.3V兩路電源,干電池通過PW5100-5.0V芯片實現(xiàn)升壓輸出5.0V,此外STM32最小系統(tǒng)板具備5.0V轉(zhuǎn)3.3V供電功能。
4) 傳感器模塊設(shè)計
傳感器模塊是各種傳感器的統(tǒng)一接口,此接口支持5V/3.3V兩路電源、多路ADC采樣、I2C通信、SPI通信和普通IO接口等多種通信方式,能夠?qū)崿F(xiàn)一個接口可以支持溫濕度、光照強度、可燃?xì)怏w、人體紅外、火焰等多種傳感器的數(shù)據(jù)采集,傳感器子采集設(shè)備采用江西信息應(yīng)用職業(yè)技術(shù)學(xué)院已經(jīng)具備的北京新大陸教育公司提供的各種子設(shè)備。
5) 繼電器模塊設(shè)計
繼電器模塊是將弱電控制信號控制大電流通斷的自動開關(guān)裝置。本項目中是用來控制電燈、電風(fēng)扇以及插座等執(zhí)行設(shè)備的打開和關(guān)閉,所以繼電器選用220V的交流繼電器。因繼電器的控制端需要使用5V 電壓驅(qū)動,但是BLE模組或STM32芯片的IO輸出為3.3V,所以需要用三極管放大電路增大驅(qū)動能力再連接到繼電器。
3.2 終端節(jié)點軟件設(shè)計
終端節(jié)點軟件是基于C語言的STM32單片機開發(fā),采用KEIL集成開發(fā)工具完成軟件開發(fā)。軟件基于STM32標(biāo)準(zhǔn)庫,采用模塊化設(shè)計,主要包括主程序、定時器程序、按鍵程序、傳感器采樣程序及BLE模組通信程序等。
1) 主程序
主程序主要完成基本外設(shè)的初始化,包括GPIO 口、UART、ADC模塊等。主程序還負(fù)責(zé)終端節(jié)點配置模式和正常模式的切換,在配置模式下,程序接收網(wǎng)關(guān)的配置指令,將終端節(jié)點加入網(wǎng)關(guān)組成的BLE網(wǎng)絡(luò)下;在正常模式下,程序不斷采集當(dāng)前傳感器的數(shù)據(jù),并通過BLE網(wǎng)絡(luò)發(fā)送給網(wǎng)關(guān)。
2) 定時器程序
MCU的硬件定時器定時范圍廣,定時精準(zhǔn),但是硬件定時器的數(shù)量往往滿足不了項目的定時需求。本項目中LED、按鍵檢測、數(shù)據(jù)采集都需要用到定時器,軟件定時器只需要利用一個硬件定時器就可以完成多個定時需求,并且將定時器新增、刪除和暫停做成統(tǒng)一接口,可以方便地管理多個任務(wù)的定時需求。
采用結(jié)構(gòu)體數(shù)組來存儲每個軟件定時器的信息,包括句柄、時間、狀態(tài)、參數(shù)、重復(fù)類型、執(zhí)行時效和回調(diào)函數(shù)。硬件定時器中斷函數(shù)負(fù)責(zé)對所有激活的定時器進行計時,根據(jù)執(zhí)行時效判定是否需要到中斷函數(shù)內(nèi)執(zhí)行回調(diào)函數(shù),對于時間要求精準(zhǔn)并執(zhí)行快速的回調(diào)函數(shù)可以設(shè)置在中斷函數(shù)中立即響應(yīng),而對于時間要求不是很嚴(yán)格或者執(zhí)行實際較長的回調(diào)函數(shù)可以設(shè)置在主程序中響應(yīng)。
3) 按鍵程序
按鍵程序用于處理按鍵長短按,實現(xiàn)終端節(jié)點的正常模式和配置模式切換。按鍵通過GPIO口實現(xiàn),每100ms檢測一次按鍵狀態(tài)。為消除按鍵抖動,連續(xù)兩次檢測到按鍵按下才判定為有效按鍵,即按鍵持續(xù)時間大于100ms,如果持續(xù)時間小于1 000ms釋放,則觸發(fā)為短按;如果持續(xù)時間大于1 000ms,則在相應(yīng)時間觸發(fā)長按,本設(shè)計按鍵達(dá)到2 000ms觸發(fā)長按。
4) 傳感器采樣程序
節(jié)點搭配的傳感器類型有很多種,程序要同時支持ADC采樣、數(shù)字采樣和開關(guān)量采樣。如果是光照、火焰、空氣質(zhì)量及可燃?xì)怏w等模擬式傳感器,則調(diào)用ADC轉(zhuǎn)換函數(shù)讀取以10mV為單位的電壓值;如果是人體紅外等開關(guān)式傳感器,則讀取IO口狀態(tài)得到布爾值;如果數(shù)字式溫濕度傳感器,則調(diào)用SHT1x程序讀取當(dāng)前溫濕度數(shù)據(jù)。最終再根據(jù)傳感器類型將數(shù)據(jù)打包發(fā)送給網(wǎng)關(guān)。
5) BLE模組通信程序
BLE模組使用UART接口和MCU連接,使用AT 指令進行通信,在設(shè)備上電后,需要根據(jù)正常模式或配置模式下對模組分別初始化。配置模式下,將BLE 網(wǎng)絡(luò)的NETID設(shè)置為配置網(wǎng)絡(luò)0001,正常模式下,將BLE網(wǎng)絡(luò)的NETID設(shè)置為網(wǎng)關(guān)BLE的地址后四位,此網(wǎng)絡(luò)號在第一次配置時保存在Flash中。
BLE 模組在每次采集完一次數(shù)據(jù)后都會調(diào)用BLE數(shù)據(jù)發(fā)送函數(shù)將數(shù)據(jù)發(fā)送給網(wǎng)關(guān),通過MESH網(wǎng)絡(luò)發(fā)送數(shù)據(jù)指令格式為“AT+MESH”后接具體數(shù)據(jù),UART數(shù)據(jù)打包形式如圖4所示,共15個字節(jié)。
4 智能家居平臺調(diào)試
根據(jù)上述網(wǎng)關(guān)和終端節(jié)點的設(shè)計方案,分別完成網(wǎng)關(guān)、終端傳感器、終端執(zhí)行器三部分的制作,如圖5 所示,經(jīng)過調(diào)試,通過Android App可以實現(xiàn)傳感器數(shù)據(jù)的采集和執(zhí)行設(shè)備的控制。
5 結(jié)束語
本文主要設(shè)計了一套用于智能家居的智能網(wǎng)關(guān)和終端節(jié)點設(shè)備。智能網(wǎng)關(guān)主要功能是訪問云平臺以及與終端節(jié)點無線連接,是整個智能家居系統(tǒng)的中樞,終端節(jié)點主要負(fù)責(zé)采集傳感數(shù)據(jù)和控制電器開關(guān)。系統(tǒng)采用Linux操作系統(tǒng)實現(xiàn)網(wǎng)關(guān)的設(shè)計,可以快速地實現(xiàn)BLE和以太網(wǎng)之間通信協(xié)議轉(zhuǎn)換,同時終端節(jié)點采用BLE實現(xiàn)組網(wǎng),其低功耗的特性可以實現(xiàn)系統(tǒng)低碳、環(huán)保的運行。
【通聯(lián)編輯:謝媛媛】