關(guān)宇晟
(廣西慧云信息技術(shù)有限公司,廣西 南寧 530007)
將傳統(tǒng)人工監(jiān)測(cè)數(shù)據(jù)升級(jí)為物聯(lián)網(wǎng)監(jiān)控有多種方式,使用華為云IoTDA 物聯(lián)網(wǎng)平臺(tái)的環(huán)境數(shù)據(jù)采集系統(tǒng)可進(jìn)行數(shù)據(jù)處理和傳送。底層通過(guò)RS485 總線采集環(huán)境傳感器數(shù)據(jù),解析環(huán)境數(shù)據(jù)后傳輸給網(wǎng)關(guān)設(shè)備,網(wǎng)關(guān)設(shè)備通過(guò)MQTT 協(xié)議與華為云物聯(lián)網(wǎng)平臺(tái)對(duì)接,最終實(shí)現(xiàn)在華為云IoTDA 物聯(lián)網(wǎng)平臺(tái)展示環(huán)境數(shù)據(jù)、查閱數(shù)據(jù)、統(tǒng)計(jì)報(bào)表等監(jiān)控現(xiàn)場(chǎng)環(huán)境數(shù)據(jù)變化的功能。
系統(tǒng)選用華為云IoTDA 作為物聯(lián)網(wǎng)云平臺(tái),通過(guò)云平臺(tái)可以實(shí)現(xiàn)查看上報(bào)的傳感器數(shù)據(jù)及一段時(shí)間內(nèi)的數(shù)據(jù)變化報(bào)表,訂閱或發(fā)布指定話題,數(shù)據(jù)規(guī)則轉(zhuǎn)發(fā)等。同時(shí)設(shè)備可向云平臺(tái)上報(bào)屬性、事件。
硬件設(shè)備的設(shè)計(jì),如圖1 所示。用一個(gè)擁有RS485 采集的接口,專門用于接入RS485 總線通信的傳感器,安裝傳感器對(duì)應(yīng)的Modbus 協(xié)議,解析出傳感器的具體數(shù)據(jù)。若存在多路傳感器則需將不同類型的傳感器設(shè)置為不同的地址,在程序中按照設(shè)置好的地址依次讀取傳感器數(shù)據(jù)。
圖1 系統(tǒng)框架設(shè)計(jì)
為了方便軟件設(shè)計(jì)和管理,將MQTT 接入華為云IoTDA 的這部分作為一個(gè)進(jìn)程(簡(jiǎn)稱網(wǎng)關(guān)),將獲取傳感器數(shù)據(jù)的這部分作為另一個(gè)進(jìn)程(簡(jiǎn)稱采集),采集和網(wǎng)關(guān)相互獨(dú)立運(yùn)行,進(jìn)程間的通信使用消息隊(duì)列的方式,將需要上報(bào)到云平臺(tái)的傳感器數(shù)據(jù)交給網(wǎng)關(guān)上傳。網(wǎng)關(guān)進(jìn)程中運(yùn)行華為云設(shè)備接入的SDK,通過(guò)4G或有線網(wǎng)絡(luò)與華為云IoTDA 物聯(lián)網(wǎng)平臺(tái)進(jìn)行通信。
為了同時(shí)實(shí)現(xiàn)傳感器采集功能和網(wǎng)關(guān)功能,需要同時(shí)具備這兩項(xiàng)功能的芯片,可穩(wěn)定運(yùn)行作為產(chǎn)品推廣。網(wǎng)關(guān)的功能需要運(yùn)行華為云IoTDA 的SDK,所以需要一個(gè)可以運(yùn)行嵌入式Linux 的核心板,4G 通信功能需要具備USB 功能,有線網(wǎng)絡(luò)通信需要具有網(wǎng)口,采集功能需要芯片具有串口外設(shè)。綜上所述,設(shè)計(jì)選用I.MAX6ULL 作為設(shè)備的主芯片,同時(shí)具備了上述所需的所有功能,且價(jià)格適合,供貨穩(wěn)定。由于整個(gè)系統(tǒng)設(shè)計(jì)的模塊較多,僅挑選幾個(gè)關(guān)鍵環(huán)節(jié)做說(shuō)明。
輸入電壓設(shè)計(jì)為7 ~21 V 的寬電壓,可在室外配合鋰電池加太陽(yáng)能板的供電組合,也可直接使用常規(guī)的DC 12V 電源適配器供電。需要注意的是核心板需要先上電,再通過(guò)核心板上電后的PMIC_ON_REQ引腳讓其他外設(shè)再上電,否則會(huì)出現(xiàn)核心板不能正常啟動(dòng)的現(xiàn)象。設(shè)計(jì)中使用了兩個(gè)SY8303 DCDC 電源通過(guò)不同的分壓電阻分別提供5 V 和3.3 V 的電壓給核心板和外設(shè)供電,如圖2 所示。
圖2 電源設(shè)計(jì)
如圖3 所示,選用BL3085 作為RS485 收發(fā)電路,工作電壓為3.3 V。為了方便軟件編程和節(jié)約IO引腳,RS485 電路使用了自動(dòng)收發(fā)設(shè)計(jì)。此電路控制簡(jiǎn)單,不需要額外的控制引腳進(jìn)行干預(yù),缺點(diǎn)為通信速率有一定的限制,設(shè)計(jì)支持波特率為9600 的串口通信,而市面上使用的RS485 傳感器通常波特率也為9600,可正常進(jìn)行通信使用。
圖3 RS485 采集接口設(shè)計(jì)
嵌入式網(wǎng)絡(luò)硬件主要分為MAC 和PHY,由于選用的芯片已經(jīng)集成了MAC,只需要選用一款PHY 芯片配合RJ45 底座即可。在這里選用PHY 芯片為L(zhǎng)AN8720A,RJ45 底座為了方便設(shè)計(jì)選用了內(nèi)置了網(wǎng)絡(luò)變壓器,而如果選用了沒有內(nèi)置變壓器的需要在RJ45 座后額外增加網(wǎng)絡(luò)變壓器,否則網(wǎng)絡(luò)不能正常工作,如圖4 所示。
圖4 網(wǎng)口設(shè)計(jì)
主要設(shè)計(jì)PCIE 座與SIM 卡槽的連接,卡槽的主要信號(hào)線添加TVS,防止在拔插SIM 卡時(shí)產(chǎn)生靜電,損壞元器件。通過(guò)USB 與主芯片進(jìn)行通信,4G 模塊使用3.3 V 電源進(jìn)行工作。
通過(guò)分壓電阻來(lái)采集硬件設(shè)備的輸入電壓值,由于芯片的基準(zhǔn)電壓為3.3 V,需要預(yù)留最大的輸入電壓分壓之后依然小于3.3 V,否則會(huì)有測(cè)量不準(zhǔn)確甚至燒毀芯片的隱患。系統(tǒng)設(shè)計(jì)的最高輸入電壓為21 V,則可使用1∶10 的分壓電阻進(jìn)行分壓,最終可能達(dá)到的最高輸入電壓為2.1 V,滿ADC 足測(cè)量范圍。通過(guò)上報(bào)的設(shè)備電壓至云平臺(tái)可以隨時(shí)觀察到設(shè)備的供電情況,及時(shí)排查故障。
說(shuō)起“祭紅”,民間還有一傳說(shuō)。話說(shuō)一窯口接到圣旨為宮廷燒制祭紅瓷器,前段燒制過(guò)程非常順利,在投柴最后的尾段突然天降暴雨,將干燥的松柴澆濕,瞬間旺盛的窯火暗淡下來(lái),燒窯師傅知道其中的厲害之處,最后關(guān)頭窯火的變?nèi)醣厝辉斐杉兰t色澤黯淡無(wú)光。這樣督陶官必然降罪于窯口全體窯工,這將是死罪。燒窯師傅有一位女兒,女兒為救父親及全體窯工憤然投窯以自己的鮮血染紅這一窯祭紅瓷器,祭紅瓷因此而得名。
一個(gè)完整的嵌入式系統(tǒng)主要由U-Boot、kernel 以及rootfs 構(gòu)成,每一部分的涉及面都十分廣而深,現(xiàn)主要介紹一些基礎(chǔ)功能。圖5 表示整個(gè)軟件結(jié)構(gòu)。
圖5 軟件結(jié)構(gòu)
U-Boot 是一段嵌入式Linux 系統(tǒng)啟動(dòng)的引導(dǎo)程序,可對(duì)芯片的出廠源碼進(jìn)行編譯,根據(jù)芯片所使用的的Flash 大小、Ram 大小、啟動(dòng)地址、環(huán)境變量等進(jìn)行配置,引導(dǎo)芯片能夠正確地加載kernel 和rootfs。
kernel 即嵌入式Linux 系統(tǒng)的內(nèi)核部分,需要自己進(jìn)行裁剪。有許多系統(tǒng)需要的功能是沒有編譯進(jìn)內(nèi)核的,需要手動(dòng)進(jìn)行添加。包括4G 上網(wǎng)相關(guān)的PPP撥號(hào)驅(qū)動(dòng)、USB 相關(guān)驅(qū)動(dòng)。串口和ADC 相關(guān)的驅(qū)動(dòng)則需要在設(shè)備樹中進(jìn)行添加或修改,還有一些基礎(chǔ)的LED 顯示驅(qū)動(dòng),輸入輸出驅(qū)動(dòng)也需要根據(jù)原理圖中設(shè)計(jì)好的GPIO 接口來(lái)同步編寫驅(qū)動(dòng)。
rootfs 是嵌入式Linux 系統(tǒng)里的根文件系統(tǒng),系統(tǒng)及上層應(yīng)用的相關(guān)庫(kù)文件、軟件、配置文件等都存放在這里。設(shè)計(jì)選用了一款輕量級(jí)的嵌入式系統(tǒng)buildroot 來(lái)作為芯片的根文件系統(tǒng),buildroot 集成了一些常見的第三方庫(kù)和軟件,可以縮短開發(fā)周期。
由于嵌入式Linux 的內(nèi)部資源有限,而基礎(chǔ)的rootfs 只需要10M 左右的空間便能構(gòu)建完成。所以,還需要一個(gè)完整的Linux 系統(tǒng)來(lái)進(jìn)行應(yīng)用程序的開發(fā)和編譯,編譯出的可執(zhí)行文件是僅能運(yùn)行在對(duì)應(yīng)的嵌入式Linux 系統(tǒng)中,而不能運(yùn)行在宿主機(jī)中,所以還需要將對(duì)應(yīng)的文件拷貝到芯片當(dāng)中。
在網(wǎng)關(guān)和采集程序運(yùn)行之前,還需進(jìn)行一些基礎(chǔ)的系統(tǒng)初始化配置。
首先,開啟ssh 服務(wù),方便后期的應(yīng)用程序調(diào)試。然后配置4G 自動(dòng)撥號(hào)聯(lián)網(wǎng)或使用有線網(wǎng)絡(luò)配置IP地址、網(wǎng)關(guān)、子網(wǎng)掩碼、DNS 服務(wù)器,生成網(wǎng)卡便于網(wǎng)關(guān)進(jìn)程的MQTT 聯(lián)網(wǎng)服務(wù)。最后設(shè)置開機(jī)自啟動(dòng)程序,確保采集進(jìn)程和網(wǎng)關(guān)進(jìn)程能夠在系統(tǒng)開機(jī)后自動(dòng)運(yùn)行,設(shè)置守護(hù)進(jìn)程確保采集進(jìn)程和網(wǎng)關(guān)進(jìn)程的正常運(yùn)作。
在使用華為云IoTDA 的SDK 開發(fā)之前,需要做一些前期準(zhǔn)備工作,根據(jù)huaweicloud-iot-devicesdk-c 開發(fā)指南,需要安裝openssl 庫(kù)、paho 庫(kù)和zlib庫(kù),并將對(duì)應(yīng)庫(kù)拷貝到根文件系統(tǒng)buildroot 中的/usr/lib 下,只要完成3 個(gè)庫(kù)的移植安裝,就能對(duì)SDK 進(jìn)行正常的編譯。然后需要登錄華為云物聯(lián)網(wǎng)平臺(tái)創(chuàng)建一個(gè)產(chǎn)品和設(shè)備并注冊(cè)設(shè)備,同時(shí)在產(chǎn)品中添加需要上報(bào)的傳感器數(shù)據(jù)類型,這里添加了DataInterval、DeviceID、Voltage、Temperature、Humidity、Illumination等常見傳感器類型。通過(guò)創(chuàng)建好的設(shè)備ID 和認(rèn)證秘鑰,修改SDK 中的username 和password,同時(shí)將平臺(tái)的接入地址和MQTT 端口號(hào)進(jìn)行修改。網(wǎng)關(guān)進(jìn)程中從消息隊(duì)列中接收到實(shí)際的傳感器數(shù)值,將數(shù)值轉(zhuǎn)換為JSON 格式,并打包調(diào)用IOTA_PropertiesReport()函數(shù)進(jìn)行設(shè)備屬性上報(bào),這里需保證每一個(gè)字符都與平臺(tái)設(shè)定的數(shù)據(jù)屬性字符相對(duì)應(yīng),否則會(huì)出現(xiàn)解析錯(cuò)誤。至此,一個(gè)簡(jiǎn)單的傳感器聯(lián)網(wǎng)系統(tǒng)完成。
將設(shè)計(jì)好的原理圖導(dǎo)出為PCB 文件,進(jìn)行元器件擺放、布線,注意網(wǎng)口和USB 等高速信號(hào)在進(jìn)行PCB 走線時(shí)需要做90 歐姆的阻抗匹配,差分信號(hào)進(jìn)行等長(zhǎng)走線。將設(shè)計(jì)好的PCB 發(fā)給廠家進(jìn)行生產(chǎn),并購(gòu)買對(duì)應(yīng)的元器件進(jìn)行加工焊接。制造完成后使用CAD 按照PCB 接口高度進(jìn)行開孔設(shè)計(jì),設(shè)計(jì)出對(duì)應(yīng)外殼的開孔大小,提交圖紙給外殼廠家生產(chǎn),最終得到的實(shí)際產(chǎn)品如圖6。
圖6 華為云數(shù)據(jù)采集硬件設(shè)備
硬件設(shè)備安裝完畢后,將一套溫度、濕度、光照度、大氣壓力多合一傳感器通過(guò)RS485 總線連接到硬件設(shè)備,將設(shè)備安裝到葡萄大棚內(nèi),進(jìn)行葡萄大棚的生長(zhǎng)環(huán)境數(shù)據(jù)監(jiān)控。通過(guò)每天溫度、濕度的變化曲線,調(diào)整大棚的卷簾開度,將大棚溫度控制在適合葡萄生長(zhǎng)溫度。通過(guò)光照度的變化,調(diào)整頂棚遮陽(yáng)板的開度,讓葡萄能夠進(jìn)行適宜的光合作用。
硬件設(shè)備上電測(cè)試完成,基本硬件運(yùn)行正常后,可開始對(duì)傳感器數(shù)據(jù)是否正常上傳到IoT 平臺(tái)進(jìn)行測(cè)試。如圖7 所示。
圖7 華為云IoT 平臺(tái)的設(shè)備屬性數(shù)據(jù)
可以看到,硬件設(shè)備采集到的傳感器數(shù)值已經(jīng)成功上傳到華為云IoTDA,通過(guò)查看每一項(xiàng)傳感器數(shù)據(jù)的報(bào)表,可以知道當(dāng)天的數(shù)據(jù)變化情況。如在10 ∶45時(shí),溫度為23.5 ℃、濕度為46.7%、光照度為7 805 lux,可知當(dāng)時(shí)的溫度是比較舒適的,光照較弱,為陰天。
通過(guò)華為云物聯(lián)網(wǎng)平臺(tái)的數(shù)據(jù)報(bào)表統(tǒng)計(jì),可觀察傳感器數(shù)值的變化情況,從而進(jìn)行一些環(huán)境預(yù)警。如在農(nóng)田里安裝溫濕度傳感器,配合設(shè)計(jì)的物聯(lián)網(wǎng)設(shè)備使用,定時(shí)回傳田里的溫度數(shù)據(jù)。當(dāng)夜間溫度出現(xiàn)突然過(guò)低的現(xiàn)象時(shí),則可能出現(xiàn)了霜凍天氣或一些極端氣候,此時(shí)通過(guò)手機(jī)APP 給農(nóng)戶推送預(yù)警信息,及時(shí)處理,從而降低農(nóng)產(chǎn)品的不良品率。在河邊安裝水位計(jì)配合物聯(lián)網(wǎng)設(shè)備,出現(xiàn)汛情時(shí)及時(shí)通知到相關(guān)部門,組織人員疏散和抗汛。
完成設(shè)計(jì)的一款使用華為云IoTDA 作為物聯(lián)網(wǎng)平臺(tái)的環(huán)境數(shù)據(jù)采集系統(tǒng),該系統(tǒng)將傳感器數(shù)據(jù)采集和網(wǎng)關(guān)功能做了集成,使用一套設(shè)備可完成數(shù)據(jù)的采集和上報(bào)功能。
為將來(lái)成千上萬(wàn)的傳感器接入物聯(lián)網(wǎng)提供了一種思路,此物聯(lián)網(wǎng)接入方案可廣泛應(yīng)用于農(nóng)業(yè)、工業(yè)、民生等領(lǐng)域,且具有安裝部署方便,低成本等特點(diǎn),對(duì)將來(lái)實(shí)現(xiàn)萬(wàn)物互聯(lián)、大數(shù)據(jù)分析有非常重要的意義。