莊進(jìn)樣
一、引言
近年來(lái)物聯(lián)網(wǎng)編程工具Node-Red和樹(shù)莓派以學(xué)習(xí)門(mén)檻低、硬件成本低和具有趣味性的特點(diǎn),在中職信息技術(shù)教學(xué)中倍受青睞。如廣州市中職信息技術(shù)教研會(huì)在2019年舉行了兩期樹(shù)莓派與人工智能機(jī)器人培訓(xùn),全國(guó)職校信息技術(shù)技能大賽中職組在2018年和2019年舉行了可視化智能控制系統(tǒng)設(shè)計(jì)與調(diào)試競(jìng)賽,該賽項(xiàng)的內(nèi)容正是使用Node-Red編程工具和樹(shù)莓派。
目前的中職物聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)課程教學(xué)主要選擇單片機(jī)和C語(yǔ)言作為開(kāi)發(fā)工具,而本文則基于實(shí)踐教學(xué)設(shè)計(jì),介紹了如何使用可視化編程工具Node-Red和樹(shù)莓派進(jìn)行物聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)。
二、樹(shù)莓派和Node-Red
樹(shù)莓派(Raspberry Pi)的尺寸只有信用卡大小,是為計(jì)算機(jī)編程教育而設(shè)計(jì)的微型電腦。它除了能代替日常桌面計(jì)算機(jī)的用途外,還能使用GPIO(General-Purpose Input/Output,通用輸入/輸出端口)為物聯(lián)網(wǎng)應(yīng)用提供很好的實(shí)踐案例。官方推薦安裝操作系統(tǒng)為基于Debian的Raspbian,該系統(tǒng)中預(yù)安裝了Node-Red編程工具。
Node-Red是IBM開(kāi)發(fā)的一個(gè)開(kāi)源項(xiàng)目,以新穎有趣的方式將硬件設(shè)備、應(yīng)用程序接口、在線服務(wù)連接起來(lái),編程時(shí)只需要在瀏覽器中拖拽節(jié)點(diǎn)(Node),然后把這些節(jié)點(diǎn)用線連接起來(lái),而數(shù)據(jù)則通過(guò)這些連線在節(jié)點(diǎn)間傳遞。節(jié)點(diǎn)是封裝了特定功能的模塊,核心節(jié)點(diǎn)會(huì)隨Node-Red一起被默認(rèn)安裝,包括8個(gè)主要類(lèi)別:輸入、輸出、功能、社交、存儲(chǔ)、高級(jí)和Raspberry Pi。除了核心節(jié)點(diǎn)外,用戶(hù)還可以在線安裝其他節(jié)點(diǎn),如儀表盤(pán)節(jié)點(diǎn)(node-red-dashboard)、DHT溫濕度傳感器(node-dht-sensor)等等。正是由于Node-Red這種簡(jiǎn)單、高效的編程方式,它被用作物聯(lián)網(wǎng)的一種粘合劑并很快發(fā)展成為一種通用的、可視化的物聯(lián)網(wǎng)編程工具。
三、系統(tǒng)功能設(shè)計(jì)
物聯(lián)網(wǎng)應(yīng)用系統(tǒng)以智能教室系統(tǒng)為例,實(shí)現(xiàn)的功能包括:在終端顯示教室燈光當(dāng)前的狀態(tài);進(jìn)行開(kāi)燈、關(guān)燈操作;顯示教室實(shí)時(shí)的溫度和濕度。除此之外,系統(tǒng)還能夠設(shè)定溫度的閾值,如果溫度高于設(shè)定的值,系統(tǒng)則發(fā)出人聲報(bào)警(“濕度太高,可以開(kāi)空調(diào)”)和蜂鳴器鳴叫,并能夠設(shè)定濕度的閾值,如果濕度高于設(shè)定的值,則自動(dòng)打開(kāi)排氣扇進(jìn)行抽濕。
四、硬件設(shè)計(jì)
現(xiàn)實(shí)智能教室功能的硬件主要包括樹(shù)莓派、LED、DHT11溫濕度傳感器、蜂鳴器、12V排氣扇、12V電源、繼電器、杜邦線。然而因?yàn)闃?shù)莓派GPIO輸出不能達(dá)到12V,無(wú)法直接驅(qū)動(dòng)排氣扇,所以需要使用繼電器進(jìn)行電路轉(zhuǎn)換。
樹(shù)莓派提供40個(gè)GPIO引腳,通過(guò)它們輸出高低電平或者通過(guò)它們讀入引腳的狀態(tài):高電平或低電平。用戶(hù)可以通過(guò)樹(shù)莓派的GPIO口和硬件進(jìn)行數(shù)據(jù)交互、控制硬件工作、讀取硬件的工作狀態(tài)信號(hào)等,GPIO引腳如圖1所示。
圖1樹(shù)莓派的GPIO示意圖
各種傳感器和執(zhí)行器在樹(shù)莓派GPIO上的連接設(shè)計(jì)盡可能布局合理,減少線材交叉,達(dá)到方便編寫(xiě)程序又美觀的目的。具體說(shuō)明如下表1所示。
五、編程設(shè)計(jì)
(一)編程環(huán)境
Node-Red可視化編程在智能控制系統(tǒng)的應(yīng)用,只需要拖拽節(jié)點(diǎn),設(shè)置相應(yīng)的參數(shù),連接節(jié)點(diǎn),即可搭建一個(gè)具備數(shù)據(jù)顯示、處理與控制界面的控制系統(tǒng),可用于通信與控制、物聯(lián)網(wǎng)、互聯(lián)網(wǎng)+等行業(yè)。Node-Red既可以下載安裝在電腦中,也可以在安裝了Raspbian操作系統(tǒng)的樹(shù)莓派中直接使用,更多的安裝使用方法可以參考官方網(wǎng)址https://nodered.org/docs/getting-started/,也可以使用在線版Node-Red,如:在瀏覽器中輸入網(wǎng)址https://goiot.cc/,注冊(cè)登錄后即可開(kāi)始Node-Red的編程之旅。
因?yàn)楸局悄芙淌蚁到y(tǒng)以樹(shù)莓派為控制中心,所以更方便的編程方式是在樹(shù)莓派中開(kāi)啟Node-Red服務(wù),然后在同一局域網(wǎng)中電腦端的瀏覽器中訪問(wèn)http://<樹(shù)莓派IP>:1880/即可進(jìn)行Node-Red程序編寫(xiě),以及訪問(wèn)http://<樹(shù)莓派IP>:1880/UI即可運(yùn)行用戶(hù)交互界面。
(二)顯示和交互界面
儀表盤(pán)節(jié)點(diǎn)(Dashboard)主要用于創(chuàng)建實(shí)時(shí)圖形化交互界面,與其它節(jié)點(diǎn)安裝類(lèi)似,在菜單中的“節(jié)點(diǎn)管理”中“安裝”選項(xiàng)卡中輸入“dashboard”,找到名為“node-red-dashboard”并點(diǎn)擊安裝即可。
儀表盤(pán)的布局由Tab和Group兩個(gè)屬性組成。Tab相當(dāng)于分頁(yè),Group是分組,每個(gè)Tab中可以包含多個(gè)Group。智能教室系統(tǒng)設(shè)置一個(gè)Tab,命名為:智能教室;設(shè)置三個(gè)Group,分別命名為:燈光控制、濕度控制、溫度控制。每個(gè)Group包括dashboard的若干個(gè)節(jié)點(diǎn):
燈光控制:text節(jié)點(diǎn),用于顯示當(dāng)前燈光的狀態(tài)(亮或滅);button節(jié)點(diǎn)兩個(gè),分別對(duì)應(yīng)開(kāi)燈和關(guān)燈的按鈕。
溫度控制:text節(jié)點(diǎn),用于顯示當(dāng)前設(shè)置閾值;slider節(jié)點(diǎn),用于調(diào)節(jié)溫度的臨界值,即當(dāng)教室的溫度高于設(shè)定的閾值時(shí),觸發(fā)蜂鳴器鳴叫和人聲報(bào)警(人聲報(bào)警使用文字轉(zhuǎn)語(yǔ)音節(jié)點(diǎn)實(shí)現(xiàn));guage節(jié)點(diǎn),用于顯示教室的實(shí)時(shí)溫度。
濕度控制:與溫度控制類(lèi)似,當(dāng)環(huán)境濕度高于設(shè)置的閾值時(shí),自動(dòng)開(kāi)啟排氣扇進(jìn)行抽濕。
智能教室系統(tǒng)的顯示和交互界面,如圖2、圖3所示。
(三)燈光控制程序
開(kāi)燈和關(guān)燈使用節(jié)點(diǎn)button,控制樹(shù)莓派引腳使用節(jié)點(diǎn)rpi-gpio out。在開(kāi)燈節(jié)點(diǎn)button發(fā)送有效載荷設(shè)置為數(shù)字1(高電平),關(guān)燈節(jié)點(diǎn)button發(fā)送有效載荷設(shè)置為數(shù)字0(低電平)。然后分別從兩個(gè)節(jié)點(diǎn)button右邊的小方塊拉出連接線,并連接到節(jié)點(diǎn)rpi-gpio out左邊的小方塊,如圖4所示。
燈光LED的正極與引腳40-GPIO21相連,因此可以初始化該引腳為低電平(0),使燈光處于滅的狀態(tài)。當(dāng)用戶(hù)點(diǎn)擊“開(kāi)燈”時(shí),數(shù)據(jù)流向右邊發(fā)送,使引腳40-GPIO21處于高電平狀態(tài),從而點(diǎn)亮教室的燈光;當(dāng)用戶(hù)點(diǎn)擊“關(guān)燈”時(shí),數(shù)據(jù)流向右邊發(fā)送,使引腳40-GPIO21處于低電平狀態(tài),從而熄滅教室的燈光。
變量msg.payload是從上一流程中接收到的有效載荷,最終函數(shù)返回對(duì)象msg,實(shí)現(xiàn)其轉(zhuǎn)換后的有效載荷往下一流程發(fā)送。完成后的燈光控制程序,如圖5所示。
圖5燈光控制的程序
(四)獲取并顯示溫濕度程序
獲取連接到樹(shù)莓派引腳溫濕度傳感器DHT11的數(shù)據(jù),需要安裝節(jié)點(diǎn)rpi-dht22(支持dht11和dht22)。值得注意的是:智能教室的溫濕度數(shù)據(jù)并不是獲取一次就終止了,而是按一定的時(shí)間間隔(如5秒)重復(fù)地獲取實(shí)時(shí)數(shù)據(jù)并在終端上更新。
節(jié)點(diǎn)inject能以有規(guī)律的時(shí)間間隔向下一節(jié)點(diǎn)發(fā)送消息,該消息中的有效載荷可以是字符串、Javascript對(duì)象或者當(dāng)前時(shí)間等。把節(jié)點(diǎn)inject發(fā)送的內(nèi)容設(shè)置成當(dāng)前時(shí)間,并每隔5秒執(zhí)行一次,正符合我們的設(shè)計(jì)要求。
節(jié)點(diǎn)rpi-dht11獲取到的溫度數(shù)據(jù)包含在msg.payload中,而獲取到的濕度數(shù)據(jù)則包含在msg.humidity。為了在儀表上能分別顯示溫度和濕度,可以使用節(jié)點(diǎn)function編寫(xiě)Javascript代碼進(jìn)行有效載荷的轉(zhuǎn)換,溫濕度顯示的程序如圖6所示。
(五)溫濕度與報(bào)警的聯(lián)動(dòng)程序
在智能教室系統(tǒng)中,當(dāng)溫度高于設(shè)定的閾值時(shí),將會(huì)觸發(fā)報(bào)警,蜂鳴器鳴叫,同時(shí)把警示文字轉(zhuǎn)換成語(yǔ)音在終端中播放;當(dāng)濕度高于設(shè)定的閾值時(shí),將會(huì)觸發(fā)繼電器接通排氣扇進(jìn)行抽濕。
以溫度高于閾值報(bào)警為例,用戶(hù)設(shè)置的閾值保存為函數(shù)節(jié)點(diǎn)中的全局變量,代碼為:flow.set(‘yuzhi_wendu,msg.payload)。在下一節(jié)點(diǎn)的函數(shù)中則獲取上一節(jié)點(diǎn)的全局變量后存放于新的變量yuzhi_wendu中,如果獲取失敗,則賦值26,代碼為:varyuzhi_wendu=flow.get(‘yuzhi_wendu)||26。實(shí)時(shí)溫度與用戶(hù)設(shè)置的閾值相比較,使用else-if條件分支語(yǔ)句進(jìn)行判斷,程序如圖7所示。
濕度高于用戶(hù)設(shè)置的閾值時(shí)將會(huì)觸發(fā)排氣扇抽濕的程序,與溫度高于閾值時(shí)將會(huì)觸發(fā)報(bào)警程序的原理一致,只需要在上述程序基礎(chǔ)上修改少量代碼即可實(shí)現(xiàn)。
六、結(jié)語(yǔ)
用于實(shí)踐教學(xué)設(shè)計(jì)的中職物聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā),因使用Node-Red和樹(shù)莓派而變得簡(jiǎn)單和有趣,又因以智能教室為例,是學(xué)生所熟悉的情境,能夠較好地促進(jìn)教學(xué)目標(biāo)的達(dá)成?;贜ode-Red和樹(shù)莓派學(xué)習(xí)開(kāi)發(fā)智能教室系統(tǒng),能幫助學(xué)生掌握物聯(lián)網(wǎng)應(yīng)用系統(tǒng)開(kāi)發(fā)的基本方法,同時(shí),通過(guò)替換、增加傳感器和融入更多的Node-Red節(jié)點(diǎn),使學(xué)生能夠開(kāi)發(fā)功能更加完備的應(yīng)用系統(tǒng),從而更好地進(jìn)行創(chuàng)新創(chuàng)業(yè)活動(dòng)。
責(zé)任編輯陳春陽(yáng)