徐朝農(nóng),劉志卓
(中國(guó)石油大學(xué) 信息科學(xué)與工程學(xué)院,北京 102200)
黨中央和國(guó)務(wù)院高度重視物聯(lián)網(wǎng)技術(shù)的發(fā)展,明確指出要加快推動(dòng)物聯(lián)網(wǎng)技術(shù)研發(fā)和應(yīng)用示范。大部分地區(qū)也將物聯(lián)網(wǎng)作為發(fā)展重點(diǎn),出臺(tái)了相應(yīng)的發(fā)展規(guī)劃和行動(dòng)計(jì)劃,許多行業(yè)部門將物聯(lián)網(wǎng)應(yīng)用作為推動(dòng)本行業(yè)發(fā)展的重點(diǎn)工作加以支持。
隨著物聯(lián)網(wǎng)技術(shù)不斷推向應(yīng)用,全國(guó)各類物聯(lián)網(wǎng)設(shè)計(jì)競(jìng)賽也不斷涌現(xiàn),這些競(jìng)賽大大促發(fā)大學(xué)生們學(xué)習(xí)物聯(lián)網(wǎng)技術(shù)的熱情。然而,物聯(lián)網(wǎng)技術(shù)是典型的軟硬件結(jié)合技術(shù),對(duì)研發(fā)平臺(tái)有一定的穩(wěn)定性要求,硬件只要稍有變化,都會(huì)帶來(lái)系統(tǒng)的各種故障[1]。而這些故障的解決需要很強(qiáng)的計(jì)算機(jī)硬件和軟件技能以及現(xiàn)場(chǎng)應(yīng)用經(jīng)驗(yàn),學(xué)生一般難以自行解決。事實(shí)上,調(diào)試的結(jié)果往往是因?yàn)樵O(shè)備移動(dòng)等造成的連線故障、連線錯(cuò)接等,這些本來(lái)很不必要的麻煩會(huì)牽扯巨大的精力投入,讓帶隊(duì)教師疲于應(yīng)付。為克服上述困難,方便學(xué)生學(xué)習(xí)和教師指導(dǎo),設(shè)計(jì)一個(gè)面向物聯(lián)網(wǎng)應(yīng)用的通用競(jìng)賽平臺(tái)已成為教學(xué)與實(shí)踐改革的重點(diǎn)。本文介紹了這樣一個(gè)平臺(tái)的設(shè)計(jì)與應(yīng)用。
出現(xiàn)上述問題,主要是因?yàn)閰⑴c競(jìng)賽的硬件設(shè)備種類較多,設(shè)備的機(jī)械、電氣接口不統(tǒng)一造成的。可以說(shuō),學(xué)生要想憑實(shí)力獲得比較好的競(jìng)賽成績(jī),相對(duì)固定的場(chǎng)所是必要的,具有統(tǒng)一接口的研發(fā)平臺(tái)也是極其重要的,這樣,學(xué)生可以在這個(gè)研發(fā)平臺(tái)上暫時(shí)擺脫由于硬件不穩(wěn)定而帶來(lái)的困擾,集中精力逐步熟悉軟硬協(xié)同的操作,并逐步過渡到研發(fā)過程。有了自主設(shè)計(jì)能力,學(xué)生的學(xué)習(xí)興趣和能力一定大增,參加競(jìng)賽獲獎(jiǎng)的概率就自然提高了[2]。
本文力圖建立具有統(tǒng)一接口的物聯(lián)網(wǎng)競(jìng)賽軟硬件平臺(tái),讓學(xué)生熟悉物聯(lián)網(wǎng)開發(fā)的流程和過程,并逐步增強(qiáng)設(shè)計(jì)能力,為學(xué)生參加全國(guó)競(jìng)賽打下先期條件。當(dāng)然,在全國(guó)競(jìng)賽上獲獎(jiǎng),不僅是對(duì)學(xué)生巨大的激勵(lì),也表明了學(xué)校在學(xué)生培養(yǎng)方面工作具有實(shí)效性,是學(xué)校對(duì)外最好的宣傳名片。建立該平臺(tái)的必要性自然是不言而喻的。
市面上已擁有多款物聯(lián)網(wǎng)平臺(tái),其中Particle 物聯(lián)網(wǎng)平臺(tái)是一款企業(yè)級(jí)物聯(lián)網(wǎng)平臺(tái),它的優(yōu)勢(shì)在于可與其開發(fā)套件進(jìn)行網(wǎng)狀連接,適用于原型設(shè)計(jì)。Adafruit IoT 平臺(tái)用于可穿戴設(shè)備或手持設(shè)備,具有靈活、便攜和輕便的特點(diǎn)。Arduino IoT 平臺(tái)優(yōu)勢(shì)在于擁有軟件工具和第三方庫(kù)的支持,用戶可以方便地從社區(qū)獲取資源和支持。本文所介紹的物聯(lián)網(wǎng)競(jìng)賽平臺(tái)面向?qū)W生競(jìng)賽使用需求來(lái)設(shè)計(jì),可供指導(dǎo)老師和學(xué)生遠(yuǎn)程開發(fā)、在線調(diào)試和仿真使用,使得老師和學(xué)生可以進(jìn)行實(shí)時(shí)遠(yuǎn)程交互,極大地方便老師指導(dǎo)和學(xué)生調(diào)試;此外,底層硬件設(shè)計(jì)完全開放給學(xué)生,學(xué)生可根據(jù)參賽設(shè)計(jì)需求自行添加模塊和進(jìn)行二次開發(fā)。下面將分兩部分介紹該平臺(tái)的設(shè)計(jì),包括硬件設(shè)備研制及軟件平臺(tái)研發(fā)。
在進(jìn)行硬件平臺(tái)設(shè)計(jì)時(shí),需要堅(jiān)持一些設(shè)計(jì)原則,包括高可用性、高擴(kuò)展性和高安全性。并進(jìn)行統(tǒng)一規(guī)劃,以保證平臺(tái)使用的便利性和運(yùn)行的穩(wěn)定性。
本文所設(shè)計(jì)的物聯(lián)網(wǎng)競(jìng)賽平臺(tái),作用是將物聯(lián)網(wǎng)設(shè)備以有線、無(wú)線的方式集成起來(lái),構(gòu)建成一個(gè)統(tǒng)一的物聯(lián)網(wǎng)平臺(tái)。
如圖1 展示了一種通用物聯(lián)網(wǎng)競(jìng)賽平臺(tái)。市面上的傳感器和智能設(shè)備等可以用海量來(lái)形容,為了使得這些設(shè)備可以盡可能地融入該平臺(tái),將容易布線的傳感器設(shè)備直接與該平臺(tái)相連;同時(shí),該平臺(tái)提供了無(wú)線基站模塊,以使得距離較遠(yuǎn)的、不易布線的傳感器和控制器等設(shè)備可以通過無(wú)線方式與該平臺(tái)建立連接。

圖1 平臺(tái)實(shí)物圖Fig.1 Physical map of the platform
由于本地傳感器安裝位置與物聯(lián)網(wǎng)平臺(tái)距離較近,具有容易布線的特點(diǎn),因此針對(duì)這些本地傳感器,物聯(lián)網(wǎng)平臺(tái)提供有線接口來(lái)將它們接入。本地傳感器具有多種接口類型,物聯(lián)網(wǎng)平臺(tái)包括與之匹配的多種接口類型,基本上涵蓋市面上現(xiàn)有的通信協(xié)議。按照本地傳感器對(duì)通信速率需求的不同,物聯(lián)網(wǎng)平臺(tái)提供高速與低速兩種通信接口。如圖2 所示,高速通信接口包括PCIe、USB、SATA、HDMI 和RJ-45 接口等;低速接口包括UART、SPI、JTAG 和I2C接口等。

圖2 與本地傳感器接口Fig.2 Interface with the local sensor
一些傳感器布置較為分散,與物聯(lián)網(wǎng)平臺(tái)距離遠(yuǎn),無(wú)法通過有線方式進(jìn)行通信,稱這些傳感器為遠(yuǎn)程傳感器。對(duì)于這些遠(yuǎn)程傳感器,物聯(lián)網(wǎng)競(jìng)賽平臺(tái)為其提供無(wú)線通信接口。
物聯(lián)網(wǎng)競(jìng)賽平臺(tái)遠(yuǎn)程通信接口支持ZigBee、Lo-Ra、WIFI、藍(lán)牙和433M 無(wú)線通信等協(xié)議,以滿足傳感器的遠(yuǎn)程通信需求。物聯(lián)網(wǎng)競(jìng)賽平臺(tái)有自動(dòng)識(shí)別與保存功能。具體的,在遠(yuǎn)程傳感器設(shè)備首次與物聯(lián)網(wǎng)競(jìng)賽平臺(tái)連接后,平臺(tái)將自動(dòng)保存?zhèn)鞲衅黝愋筒⒕幪?hào),同時(shí)提供編輯功能,使得學(xué)生可以自主地對(duì)傳感器進(jìn)行分組和打標(biāo)簽等操作。平臺(tái)會(huì)定時(shí)對(duì)已連接傳感器發(fā)送握手報(bào)文,以驗(yàn)證各傳感器在線狀態(tài),如發(fā)現(xiàn)傳感器長(zhǎng)時(shí)間無(wú)回應(yīng)則判斷為斷連,平臺(tái)會(huì)及時(shí)更新傳感器狀態(tài)并通知用戶。在學(xué)生實(shí)驗(yàn)中時(shí)常需要發(fā)送報(bào)文給遠(yuǎn)程傳感器,物聯(lián)網(wǎng)競(jìng)賽平臺(tái)提供單發(fā)與群發(fā)功能,在執(zhí)行完上述操作后一定時(shí)間內(nèi),平臺(tái)會(huì)自動(dòng)發(fā)送查詢報(bào)文以驗(yàn)證傳感器執(zhí)行結(jié)果,方便了學(xué)生對(duì)傳感器的管理與控制。
針對(duì)大學(xué)生競(jìng)賽而言,穩(wěn)定性是學(xué)生取得好成績(jī)的重要前提,這就對(duì)物聯(lián)網(wǎng)競(jìng)賽平臺(tái)的可靠性提出很高的要求。
在物聯(lián)網(wǎng)競(jìng)賽平臺(tái)使用時(shí),由于學(xué)生誤操作等原因,可能會(huì)發(fā)生數(shù)據(jù)掉電丟失現(xiàn)象,這就需要在設(shè)計(jì)中考慮數(shù)據(jù)保護(hù)功能。在設(shè)計(jì)中,物聯(lián)網(wǎng)競(jìng)賽平臺(tái)加入了保險(xiǎn)絲、防反接模塊、限流措施等,保證了用電安全,增加了操作的容錯(cuò)性。提供直流不間斷電源與掉電自動(dòng)檢測(cè)功能,在發(fā)生掉電現(xiàn)象時(shí)平臺(tái)會(huì)立即檢測(cè)到這一現(xiàn)象并通知用戶,同時(shí)切換到直流不間斷電源供電。雖然直流不間斷電源電量有限,但為學(xué)生保存實(shí)驗(yàn)過程中的數(shù)據(jù)提供了寶貴的時(shí)間。提供數(shù)據(jù)自動(dòng)保存功能,物聯(lián)網(wǎng)平臺(tái)會(huì)定時(shí)對(duì)暫存數(shù)據(jù)進(jìn)行保存;特別的,在異常情況發(fā)生后,系統(tǒng)會(huì)立即執(zhí)行一次數(shù)據(jù)保存操作。在系統(tǒng)從異常狀態(tài)中恢復(fù)后,學(xué)生可自行恢復(fù)數(shù)據(jù)。
在對(duì)物聯(lián)網(wǎng)競(jìng)賽的需求進(jìn)行全面調(diào)研后,平臺(tái)將多種傳感器,如溫濕度傳感器、氣體傳感器、熱電偶傳感器、超聲波傳感器、壓力傳感器等聯(lián)合起來(lái),建立統(tǒng)一的“采集-報(bào)送-儲(chǔ)存”機(jī)制。同樣與傳感器一樣,智能設(shè)備在近幾年也逐漸興起,成為物聯(lián)網(wǎng)的重要組成部分。物聯(lián)網(wǎng)平臺(tái)將智能電表、智能門鎖和智能水表等設(shè)備統(tǒng)一起來(lái),設(shè)計(jì)一致的接口。為了保證數(shù)據(jù)的及時(shí)性和有效性,為這些設(shè)備設(shè)定統(tǒng)一的數(shù)據(jù)幀格式,并針對(duì)每個(gè)設(shè)備的特點(diǎn)設(shè)定上報(bào)時(shí)間、上報(bào)間隔等,這些設(shè)定是可調(diào)的。平臺(tái)收集到這些數(shù)據(jù)后就進(jìn)行計(jì)算、處理和打包,以向上提供統(tǒng)一的數(shù)據(jù)報(bào)送接口。
建立一個(gè)物聯(lián)網(wǎng)競(jìng)賽硬件平臺(tái),在該設(shè)備上搭載一個(gè)軟件平臺(tái),使得該平臺(tái)的功能可以被參賽選手直接使用。
由于Linux 具有系統(tǒng)內(nèi)核小、開放源代碼、效率高和內(nèi)核網(wǎng)絡(luò)結(jié)構(gòu)完整等特點(diǎn)[3],因此平臺(tái)選用Linux 作為操作系統(tǒng)。不僅方便指導(dǎo)教師的教學(xué),同時(shí)學(xué)生可以從網(wǎng)絡(luò)上方便地獲取文檔和技術(shù)支持。相對(duì)于其它系統(tǒng),Linux 系統(tǒng)運(yùn)行穩(wěn)定,有助于學(xué)生日常訓(xùn)練和競(jìng)賽使用,滿足平臺(tái)設(shè)計(jì)之初對(duì)穩(wěn)定性的要求。
搭建交叉開發(fā)環(huán)境,使得在PC 機(jī)開發(fā)的程序可以在嵌入式系統(tǒng)上運(yùn)行。如圖3 為軟件平臺(tái)開發(fā)流程,分為BootLoader 移植、Linux 內(nèi)核的配置與設(shè)備驅(qū)動(dòng)添加、設(shè)備樹文件的修改和文件系統(tǒng)的構(gòu)建四個(gè)部分[4]。開發(fā)完成后進(jìn)行系統(tǒng)集成測(cè)試,以驗(yàn)證移植是否成功。

圖3 軟件平臺(tái)開發(fā)流程Fig.3 Software platform development process
BootLoader,即引導(dǎo)加載程序。與PC 端的BIOS 類似,BootLoader 在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行,它的作用包括初始化硬件設(shè)備、建立內(nèi)存空間映射圖等,從而為操作系統(tǒng)內(nèi)核的正確運(yùn)行提供合適的環(huán)境。由于U-Boot 適配多種嵌入式操作系統(tǒng)內(nèi)核,具有高可靠性和穩(wěn)定性。因此在本平臺(tái)軟件平臺(tái)開發(fā)時(shí),使用UBoot 這種BootLoader。
按照如圖4 流程進(jìn)行U-Boot 移植。U-Boot 目的主要有兩個(gè),即初始化內(nèi)存和將內(nèi)核搬運(yùn)到內(nèi)存中運(yùn)行。其主要分為兩個(gè)階段,第一階段對(duì)所有硬件設(shè)備進(jìn)行初始化,為后續(xù)啟動(dòng)設(shè)置合適的內(nèi)存空間,以及設(shè)置堆棧等。然后跳轉(zhuǎn)到第二階段,在初始化本階段所使用的硬件設(shè)備后,U-Boot 將內(nèi)核映像加載到內(nèi)存中。最后調(diào)用內(nèi)核。

圖4 U-Boot 移植流程Fig.4 The migration process of U-Boot
Linux 系統(tǒng)的內(nèi)核包括了進(jìn)程調(diào)度、內(nèi)存管理、文件系統(tǒng)、設(shè)備驅(qū)動(dòng)等,這些模塊擁有直接操控底層硬件的能力,對(duì)Linux 內(nèi)核配置并將其移植到本平臺(tái)上。
如圖5 為L(zhǎng)inux 內(nèi)核移植流程。在配置內(nèi)核選項(xiàng)時(shí),添加所有平臺(tái)模塊對(duì)應(yīng)的驅(qū)動(dòng)以及對(duì)文件系統(tǒng)的支持。完成后便開始編譯和安裝。至此Linux 內(nèi)核移植完成。

圖5 內(nèi)核移植流程Fig.5 The kernel migration process
設(shè)備樹作用在于描述硬件平臺(tái)所擁有的硬件資源,Linux 內(nèi)核不直接訪問硬件本身而是通過訪問設(shè)備樹來(lái)間接獲取硬件信息。
在修改設(shè)備樹的過程中最重要的部分為節(jié)點(diǎn)屬性的添加,后續(xù)的驅(qū)動(dòng)則通過函數(shù)來(lái)獲取這些節(jié)點(diǎn)屬性信息。將平臺(tái)所有的硬件資源添加至設(shè)備樹文件中。后續(xù)只需更新設(shè)備樹文件即可。
在Linux 系統(tǒng)移植的最后部分,平臺(tái)進(jìn)行文件系統(tǒng)的構(gòu)建,即創(chuàng)建根文件系統(tǒng)。在文件系統(tǒng)中添加庫(kù)函數(shù)、配置信息、常用的軟件等,至此完成了一個(gè)完整的Linux 最小系統(tǒng)。后續(xù)可在這個(gè)系統(tǒng)上添加一些第三方組件,使得Linux 系統(tǒng)功能更為齊全與完善。
將制作好的U-Boot 文件、內(nèi)核文件、設(shè)備樹文件和系統(tǒng)鏡像下載到平臺(tái)上,即可開始測(cè)試。觀察啟動(dòng)信息表明U-Boot 成功引導(dǎo)內(nèi)核啟動(dòng),成功加載了設(shè)備樹文件和驅(qū)動(dòng)文件,以及文件系統(tǒng)掛載成功。
本校物聯(lián)網(wǎng)競(jìng)賽參賽隊(duì)伍已開始使用本平臺(tái),針對(duì)參賽隊(duì)伍訓(xùn)練過程中的反饋進(jìn)行了優(yōu)化。目前,該平臺(tái)處于穩(wěn)定運(yùn)行狀態(tài)。學(xué)生使用該平臺(tái)可以方便地進(jìn)行上層軟件的開發(fā)和對(duì)硬件的二次開發(fā),為后續(xù)學(xué)生參加各種物聯(lián)網(wǎng)設(shè)計(jì)競(jìng)賽提供了強(qiáng)有力的幫助,為本校物聯(lián)網(wǎng)競(jìng)賽取得好成績(jī)打下了堅(jiān)實(shí)的基礎(chǔ)。