Node-RED是一種可視化編程工具,可以將Raspberry Pi的 GPIO引腳 上的組件與各種網(wǎng)站和在線服務(wù)進(jìn)行接合。該軟件由IBM開(kāi)發(fā),具有開(kāi)源許可證,并且它的使用只需要編寫(xiě)很少的代碼。
為了向您展示該軟件是如何工作的,我們現(xiàn)在使用Node-RED創(chuàng)建一個(gè)項(xiàng)目,功能為按下按鈕即可獲悉廷巴克圖的溫度。
一個(gè)帶電源的Raspberry Pi |
一個(gè)面包板 |
一個(gè)p按鈕 |
您還需要一些跳線或電線,以及一個(gè)Android或Apple OS手機(jī)。
Node-RED的工作原理
如果您在不了解的情況下點(diǎn)擊菜單中的Node-RED,所看到的只是一個(gè)終端窗口以及其中顯示的一些狀態(tài)消息。看起來(lái)并沒(méi)有什么,對(duì)嗎?
其實(shí)它正在做的工作是啟動(dòng)一個(gè)Node-RED服務(wù)器。您可以使用本地計(jì)算機(jī)或本地網(wǎng)絡(luò)上的另一臺(tái)機(jī)器上的Web瀏覽器對(duì)其進(jìn)行訪問(wèn)。
Node-RED構(gòu)建在名為Node.js的服務(wù)器技術(shù)之上。這是一種用于物聯(lián)網(wǎng)的低代碼編程環(huán)境。
它提供了一個(gè)圖形化環(huán)境,可以讓您與項(xiàng)目中各種元素相對(duì)應(yīng)的不同節(jié)點(diǎn)進(jìn)行連接。這些元素包括GPIO引腳上的組件或互聯(lián)網(wǎng)托管服務(wù)。
在Raspberry Pi上安裝Node-RED
Node-RED預(yù)裝在Raspberry Pi OS上的一些軟件中。請(qǐng)查看桌面上的菜單確認(rèn)是否有該選項(xiàng)。
如果沒(méi)有的話,您需要安裝該軟件。這要求您的Raspberry Pi連接互聯(lián)網(wǎng)。
您的操作系統(tǒng)應(yīng)為Raspbian Jesse及之后的版本。如果您的Raspberry Pi的操作系統(tǒng)是在2016年之前安裝的,需要注意這一點(diǎn)。
這些代碼很長(zhǎng),所以直接復(fù)制和粘貼會(huì)更便捷一些。您可以通過(guò)SSH連接或通過(guò)在Raspberry Pi桌面環(huán)境中打開(kāi)終端窗口來(lái)執(zhí)行該程序。
如果需要的話,您可以通過(guò)輸入以下內(nèi)容來(lái)啟動(dòng)桌面:
startx
在此之前,我們先來(lái)確認(rèn)一下操作系統(tǒng)已經(jīng)更新。打開(kāi)終端窗口并輸入:
sudo apt update && sudo apt upgrade -y
現(xiàn)在我們可以使用現(xiàn)成的腳本來(lái)安裝Node-RED了。要運(yùn)行該腳本,請(qǐng)輸入:
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
當(dāng)您運(yùn)行該腳本時(shí),它可能會(huì)詢問(wèn)您是否要升級(jí)舊版本的node.js,以及是否要安裝特定于Pi的節(jié)點(diǎn)。對(duì)兩者都選擇“y”。
Node-RED現(xiàn)在已經(jīng)完成了安裝,可以進(jìn)行啟動(dòng)了。
啟動(dòng)Node-RED并在瀏覽器中對(duì)其進(jìn)行訪問(wèn)
您可以從桌面菜單中啟動(dòng)Node-RED,它位于“programming”目錄下。
您也可以從命令行執(zhí)行同樣的操作,輸入以下內(nèi)容:
node-red-pi –max-old-space-size=256
現(xiàn)在該程序正在運(yùn)行中,您可以使用本地網(wǎng)絡(luò)上的web瀏覽器,在端口1880上對(duì)其進(jìn)行訪問(wèn)。如果您使用的是Raspberry Pi上的瀏覽器,則可以通過(guò)在地址欄中輸入http://127.0.0.1:1880來(lái)進(jìn)行訪問(wèn)。
如果您正在遠(yuǎn)程訪問(wèn)Raspberry Pi,請(qǐng)將其替換為您用于登錄SSH會(huì)話的IP地址。例如,在我的本地網(wǎng)絡(luò)上,我的Raspberry Pi地址為192.168.0.8,所以我可以通過(guò)在地址欄中輸入http://192.168.0.8:1880將Web瀏覽器定向到Node-RED。
最后,您將會(huì)看到Node-RED的界面。
左側(cè)的列項(xiàng)包含了一系列節(jié)點(diǎn),我們可以將這些節(jié)點(diǎn)移動(dòng)到工作區(qū)以構(gòu)建將我們的設(shè)備連接到在線服務(wù)的流(flows)。
If This, Then That
那么,接下來(lái)我們應(yīng)該如何使用Node-RED實(shí)現(xiàn)在手機(jī)上顯示消息通知呢?
我們可以向名為If This Then That(或IFTTT)的工具發(fā)送http請(qǐng)求。這將有助于應(yīng)用程序和設(shè)備之間的連接,對(duì)我們使用Node-RED和Raspberry Pi所構(gòu)建的DIY項(xiàng)目會(huì)很有用。
如果您還沒(méi)有IFTTT,請(qǐng)從應(yīng)用商城或play store進(jìn)行下載和安裝,并創(chuàng)建一個(gè)賬戶。這是免費(fèi)的。
現(xiàn)在切換回您的Raspberry Pi或您用來(lái)訪問(wèn)Node-RED的計(jì)算機(jī)。讓Node-RED頁(yè)面保持打開(kāi)狀態(tài),同時(shí)打開(kāi)一個(gè)新的頁(yè)面以前往 https://ifttt.com/ 并登錄您的賬號(hào)。單擊創(chuàng)建(Create)。您將會(huì)看到如下所示的屏幕:
“this”字段需要一個(gè)觸發(fā)器,即它所要響應(yīng)的事件?!皌hat”字段需要設(shè)置一個(gè)動(dòng)作,即它的響應(yīng)動(dòng)作。
我們將要使用的觸發(fā)器是Node-RED所發(fā)送的http請(qǐng)求。IFTTT會(huì)獲取這些“webhooks(鉤子)”,我們將其輸入搜索欄中,并進(jìn)行選擇。當(dāng)要求您對(duì)事件進(jìn)行命名時(shí),輸入weather_button,并點(diǎn)擊“Create trigger”。
現(xiàn)在我們開(kāi)始設(shè)置響應(yīng)動(dòng)作。我們希望動(dòng)作為發(fā)送一個(gè)通知,所以搜索“notifications”并進(jìn)行選擇。使用一般通知就可以。當(dāng)要求輸入消息文本時(shí),輸入:
The temperature in Timbuktu is {{Value1}} degrees
現(xiàn)在來(lái)測(cè)試一下此通知是否能出現(xiàn)在您的手機(jī)上。
點(diǎn)擊右上角的頭像打開(kāi)菜單,然后點(diǎn)擊“My Services”。瀏覽到底部,并選擇“Webhooks”,然后點(diǎn)擊右上角的“Documentation”鏈接。
您會(huì)看到一個(gè)快捷小表單,我們可以用它來(lái)測(cè)試所構(gòu)建的項(xiàng)目。我們的事件名稱為weather_button,因此在網(wǎng)址中輸入該事件名稱,然后在“value1”字段輸入數(shù)字42,最后點(diǎn)擊“test it”。
您的手機(jī)應(yīng)該會(huì)在幾秒內(nèi)受到一條通知,告訴您廷巴克圖的氣溫為42度。如果沒(méi)有收到通知,請(qǐng)檢查您手機(jī)上的IFTTT應(yīng)用程序是否安裝正確,以及是否具有發(fā)送通知的權(quán)限,然后重試。
不要關(guān)閉這個(gè)瀏覽器頁(yè)面,我們下面的操作中還會(huì)用到。
將Node-RED 與IFTTT連接
在此documentation頁(yè)面上,您將會(huì)看到有關(guān)如何通過(guò)一個(gè)特定URL的POST 或GET請(qǐng)求來(lái)觸發(fā)事件的說(shuō)明。POST和GET都是我們可以從Node-RED發(fā)送到IFTTT的http請(qǐng)求。
因此,將您的節(jié)點(diǎn)拖動(dòng)到工作區(qū)上的http請(qǐng)求節(jié)點(diǎn)(http request node)。我們需要對(duì)該節(jié)點(diǎn)進(jìn)行配置,雙擊節(jié)點(diǎn)會(huì)打開(kāi)一個(gè)窗口。對(duì)于方法,選擇一個(gè)POST請(qǐng)求(a POST request);對(duì)于URL,復(fù)制IFTTT documentation頁(yè)面中的URL。
為了測(cè)試是否有效,我們需要另一個(gè)節(jié)點(diǎn)來(lái)發(fā)送包含溫度值的消息。將一個(gè)注入節(jié)點(diǎn)(inject node)拖到http請(qǐng)求左側(cè)的工作區(qū),然后雙擊進(jìn)行配置。當(dāng)設(shè)置時(shí)間戳?xí)r,將其更改為JSON并輸入以下代碼: {“value1”:”16”}
點(diǎn)擊Done,然后將注入節(jié)點(diǎn)的右側(cè)與http請(qǐng)求節(jié)點(diǎn)的左側(cè)點(diǎn)相連接。點(diǎn)擊Deploy(部署),然后點(diǎn)擊Confirm deploy(確認(rèn)部署)。
然后按下注入節(jié)點(diǎn)的左側(cè)按鈕以測(cè)試其是否工作正常。您的手機(jī)是否接收到了一條廷巴克圖氣溫為16度的通知? 如果一切正常,您就可以關(guān)閉IFFT頁(yè)面了。需要該頁(yè)面的工作已經(jīng)完成。
獲取真實(shí)的天氣信息
既然我們有了獲得消息通知的功能了,現(xiàn)在讓我們來(lái)讀取真實(shí)的溫度信息。
首先,我們需要斷開(kāi)注入節(jié)點(diǎn)和http請(qǐng)求節(jié)點(diǎn)的連接,所以點(diǎn)擊連接了節(jié)點(diǎn)的那條線,按下delete鍵。
向下滾動(dòng)節(jié)點(diǎn)列表,直到出現(xiàn)天氣選項(xiàng)。現(xiàn)在將天氣節(jié)點(diǎn)(weather node)拖拽到工作區(qū),并雙擊… 等一下!什么天氣節(jié)點(diǎn)?什么天氣選項(xiàng)?根本沒(méi)有這些內(nèi)容,不是嗎?
不用擔(dān)心,Node-RED會(huì)讓該節(jié)點(diǎn)(以及其他節(jié)點(diǎn))的安裝變得輕松而快捷。
點(diǎn)擊右上角的菜單欄,然后選擇Manage Palette。點(diǎn)擊install,然后再搜索欄中輸入openweathermap。點(diǎn)擊node-red-node-openweathermap上的install按鈕,然后在出現(xiàn)的對(duì)話框中點(diǎn)擊install。
現(xiàn)在我們就有了天氣節(jié)點(diǎn)了。接下來(lái),將一個(gè)天氣節(jié)點(diǎn)拖拽到工作區(qū)中,并雙擊進(jìn)行配置。在城市字段輸入Timbuktu(廷巴克圖),國(guó)家字段輸入ML(即馬里)。
我們現(xiàn)在需要獲取API密鑰。前往https://openweathermap.org/并注冊(cè)一個(gè)免費(fèi)賬號(hào)。確認(rèn)您的電子郵件地址后,點(diǎn)擊包含API密鑰的鏈接,并復(fù)制該密鑰。切換回Node-RED頁(yè)面,并將該密鑰粘貼到API Key字段中。
當(dāng)天氣節(jié)點(diǎn)被激活時(shí),會(huì)獲取一個(gè)名為tempc的變量,但I(xiàn)FTTT正在尋找的是一個(gè)名為value1的變量。我們可以使用功能節(jié)點(diǎn)(function node)來(lái)分配該值。
因此,在天氣節(jié)點(diǎn)和http請(qǐng)求節(jié)點(diǎn)之間拖入一個(gè)功能節(jié)點(diǎn),雙擊該節(jié)點(diǎn),并輸入以下代碼:
msg.payload.value1 = msg.payload.tempc
現(xiàn)在將注入節(jié)點(diǎn)連接到天氣節(jié)點(diǎn),天氣節(jié)點(diǎn)連接到功能節(jié)點(diǎn),功能節(jié)點(diǎn)連接到http請(qǐng)求節(jié)點(diǎn)。然后再執(zhí)行一次上文中的部署流程。
按下注入節(jié)點(diǎn)上的按鈕,測(cè)試是否工作正常。這可能需要幾秒鐘的時(shí)間,如果一切正常,您應(yīng)該會(huì)收到帶有廷巴克圖實(shí)際溫度信息的IFTTT通知。
引入GPIO引腳
該功能也可以通過(guò)單擊鼠標(biāo)來(lái)實(shí)現(xiàn),現(xiàn)在我們嘗試通過(guò)實(shí)際觸摸按鈕來(lái)實(shí)現(xiàn)該目的。這里不再需要注入節(jié)點(diǎn),所以雙擊該節(jié)點(diǎn)然后按下delete鍵。
然后我們連接面包板。首先,將3.3v電源引腳連接到沿著板底部部署的正電源軌。
接下來(lái),將按鈕放在板的中間。將一個(gè)引腳連接到GPIO引腳13,并將對(duì)角相對(duì)的引腳連接到正電源軌。
所有的連接已經(jīng)完成!接下來(lái)要在Node-RED中進(jìn)行配置了。向下滾動(dòng)節(jié)點(diǎn)列表,直到看到rpio gpio。將其拖拽到您的工作區(qū)。雙擊節(jié)點(diǎn)進(jìn)行配置,并選擇GPIO13。
現(xiàn)在我們已經(jīng)連接了按鈕,當(dāng)按鈕被按下時(shí),它會(huì)閉合連接了3.3V電源軌的電路,所以我們希望在引腳上有一個(gè)下拉電阻,以確保電路斷開(kāi)時(shí)它的讀取值為0。為此,請(qǐng)?jiān)陔娮璨藛沃羞x擇pulldown(下拉電阻)。
接下來(lái),將gpio節(jié)點(diǎn)連接到天氣節(jié)點(diǎn),并再次部署。
按下面包板上的按鈕。如果您完成了所有的連接,手機(jī)上應(yīng)該會(huì)接收到通知。
為什么會(huì)發(fā)送兩條相同消息?
您可能會(huì)注意到,按一次按鈕,會(huì)出現(xiàn)幾乎同時(shí)到達(dá)的兩個(gè)通知。
由于gpio節(jié)點(diǎn)直接連接到了天氣節(jié)點(diǎn),每次邏輯電平發(fā)生變化都會(huì)觸發(fā)事件。而按下按鈕時(shí)邏輯電平會(huì)發(fā)生一次變化,釋放按鈕時(shí)會(huì)發(fā)生另一次變化。
為了僅發(fā)送這些消息中的一個(gè),我們需要在這些節(jié)點(diǎn)中插入另一個(gè)節(jié)點(diǎn)。我們可以利用一個(gè)轉(zhuǎn)換節(jié)點(diǎn)(switch node)將消息發(fā)送到不同節(jié)點(diǎn)。
首先刪除gpio節(jié)點(diǎn)和天氣節(jié)點(diǎn)之間的連接,然后在它們之間放置一個(gè)轉(zhuǎn)換節(jié)點(diǎn)。雙擊進(jìn)行配置,然后在“==”旁邊的文本字段寫(xiě)入數(shù)字1。
點(diǎn)擊Done,然后將其連接到gpio節(jié)點(diǎn)和天氣節(jié)點(diǎn),再次部署。
現(xiàn)在,當(dāng)您按下按鈕時(shí),應(yīng)該只會(huì)收到一條通知了。
顯然,這是一個(gè)專為練習(xí)而構(gòu)建的項(xiàng)目
通過(guò)在手機(jī)上安裝一個(gè)預(yù)報(bào)天氣的應(yīng)用程序來(lái)獲取廷巴克圖(或其他任何城市)的天氣信息會(huì)容易得多。
但是我們?cè)谶@里所探索的工作原理會(huì)很有用。例如,您可以配置一個(gè)設(shè)備,來(lái)為網(wǎng)站或應(yīng)用程序提供實(shí)時(shí)消息。
您還可以通過(guò)其他方式來(lái)進(jìn)行連接,并使用來(lái)自線上服務(wù)的消息來(lái)控制您的設(shè)備,比如通過(guò)使用天氣報(bào)告和預(yù)報(bào)來(lái)為家庭或花園進(jìn)行自動(dòng)化工作。
Node-RED是一種將事物相接合的一種快捷方法
Node-RED經(jīng)常被描述為一種讓沒(méi)有編程背景的人入門物聯(lián)網(wǎng)的工具。但是,雖然它只需要編寫(xiě)很少的代碼,您仍然需要掌握在使用編程語(yǔ)言時(shí)所用到的Web和嵌入式系統(tǒng)的概念。
在這個(gè)介紹性的項(xiàng)目中,我們涉及到了http請(qǐng)求、API、JSON數(shù)據(jù)、邏輯電平、上拉和下拉電阻。我們還需要編寫(xiě)一個(gè)非常簡(jiǎn)短的函數(shù)。
了解這些內(nèi)容并不需要您具有相關(guān)專業(yè)的學(xué)位。但是,如果您以前從來(lái)沒(méi)有作過(guò)相關(guān)的工作,那么使用更傳統(tǒng)的環(huán)境(Python)來(lái)入門確實(shí)會(huì)更合適,也更容易。
如果您已經(jīng)克服入門時(shí)的一些障礙,那么Node-RED將會(huì)是很棒的選擇。您可以快速地將所有事物連接在一起,并且明晰地知道它們之間的聯(lián)系。這是一個(gè)用于快速原型設(shè)計(jì)以及協(xié)調(diào)不同設(shè)備的出色工具。
DevicePlus 編輯團(tuán)隊(duì)
設(shè)備升級(jí)版適用于所有熱愛(ài)電子和機(jī)電一體化的人。
審核編輯黃宇
-
可視化編程
+關(guān)注
關(guān)注
0文章
5瀏覽量
6185 -
Raspberry Pi
+關(guān)注
關(guān)注
2文章
559瀏覽量
22315
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論