點(diǎn)擊鏈接加入群聊【Node-RED與IoT開發(fā)交流】https://jq.qq.com/?_wv=1027&k=5owlJfm
新創(chuàng)立的群灰瞻,歡迎加入鸳慈!
Node-RED Tutorial Home
介紹
建立你的第一個(gè)流
基礎(chǔ)節(jié)點(diǎn)和流
核心節(jié)點(diǎn)
例子:
使用Node-RED搭建一個(gè)天氣預(yù)報(bào)面板
基于 SIMATIC IOT2040 的 Node-RED S7 通信
Node-RED Tutorial 1 -- 簡介
這一章將會(huì)向您介紹一些Node-RED的樣例别凹,讓了解了Node-RED功能的同時(shí)又介紹它的基本概念,我們還將討論Node-RED的歷史及其起源禀挫,以便讓您了解Node-RED所擅長的靈域以及對于相對傳統(tǒng)的編程語言和環(huán)境具有哪些優(yōu)勢,何種類型的項(xiàng)目(任務(wù))才是最適合Node-RED的。到本課結(jié)束時(shí),您應(yīng)該對Node-RED唠椭、其編程模型和一些簡單的預(yù)構(gòu)建節(jié)點(diǎn)有一個(gè)深層次的理解,并深入了解Node-RED的起源和最佳用法张峰。
Node-RED是構(gòu)建物聯(lián)網(wǎng)應(yīng)用程序的一個(gè)強(qiáng)大工具泪蔫,其重點(diǎn)是簡化代碼塊的"連接"以執(zhí)行任務(wù)。它使用可視化編程方法喘批,允許開發(fā)人員將預(yù)定義的代碼塊(也叫做"節(jié)點(diǎn)")連接起來執(zhí)行任務(wù)。連接的節(jié)點(diǎn)铣揉,通常是輸入節(jié)點(diǎn)饶深、處理節(jié)點(diǎn)和輸出節(jié)點(diǎn)的組合,當(dāng)它們連接在一起時(shí)逛拱,構(gòu)成一個(gè)"流"敌厘。最初是IBM在2013年末開發(fā)的一個(gè)開源項(xiàng)目,以滿足他們快速連接硬件和設(shè)備到Web服務(wù)和其他軟件的需求--作為物聯(lián)網(wǎng)的一種粘合劑--它很快發(fā)展成為一種通用的物聯(lián)網(wǎng)編程工具朽合。重要的是俱两,Node-RED已經(jīng)迅速開發(fā)出一個(gè)重要的、不斷增長的用戶基礎(chǔ)和一個(gè)活躍的開發(fā)人員社區(qū)曹步,他們正在開發(fā)新的節(jié)點(diǎn)宪彩,允許程序員重用Node-RED色代碼來完成各種各樣的任務(wù)。
雖然Node-RED最初是用來處理物聯(lián)網(wǎng)的讲婚,也就是說尿孔,它是與現(xiàn)實(shí)世界交互和控制的設(shè)備,但隨著它的發(fā)展,它已經(jīng)成為一系列應(yīng)用的有用工具活合。
認(rèn)識(shí) Node-RED
讓我們從幾個(gè)簡單的例子入手雏婶,看看可以用Node-RED來做的事情。我們講解的目的不是讓您用Node-RED編程白指,而是通過一些高難度的例子讓您對它的能力有所了解留晚。如果您真的想直接深入了解,您可以跳到第2課告嘲,在那里您將通過創(chuàng)建和運(yùn)行您的第一個(gè)流的步驟错维。
第一個(gè)例子流將收到包含標(biāo)簽的推特信息,打開和關(guān)閉LED時(shí)状蜗,便收到了一個(gè)新的推特需五。在這個(gè)例子中我們假設(shè)node-red在Raspberry Pi中的運(yùn)行--一種對Node-RED用戶來說常用的環(huán)境
實(shí)例1.1使用推特控制Raspberry Pi
這個(gè)Node-RED流檢查推特并檢測# LED標(biāo)簽是否連接,打開LED接π如下圖所示轧坎。
如您所見宏邮,非常簡便,它由三個(gè)節(jié)點(diǎn)連接在一起-左邊的Twitter節(jié)點(diǎn)缸血,中間的觸發(fā)節(jié)點(diǎn)以及右側(cè)的Raspberry Pi (gpio)節(jié)點(diǎn)(GPIO代表通用輸入/輸出給出通用的Raspberry Pi的節(jié)點(diǎn)處理IO的名字)蜜氨。由圓形框表示的節(jié)點(diǎn)通常有一個(gè)圖標(biāo)來表示它們的類型,例如第一個(gè)節(jié)點(diǎn)中的Twitter鳥圖標(biāo)和一個(gè)可以由程序員設(shè)置的文本名稱捎泻。
這三個(gè)節(jié)點(diǎn)中的每一個(gè)都被構(gòu)建到Node-RED可視化編程工具中飒炎,并可以從一個(gè)節(jié)點(diǎn)調(diào)色板拖到主工作區(qū)。然后通過將輸出選項(xiàng)卡連接到流中下一個(gè)節(jié)點(diǎn)的輸入選項(xiàng)卡(節(jié)點(diǎn)框右邊或左邊的小灰點(diǎn))來連接它們笆豁,下一個(gè)講座將詳細(xì)討論UI郎汪,但現(xiàn)在讓我們把重點(diǎn)放在高級功能上。
Twitter節(jié)點(diǎn)是Node-RED的內(nèi)置節(jié)點(diǎn)煞赢,隱藏了使用Twitter API的所有復(fù)雜性。它可以設(shè)置用戶賬號的信息和搜索各種字符串哄孤,我們只需要簡單的搜索標(biāo)簽#LED照筑。
當(dāng)Twitter節(jié)點(diǎn)在對用戶的推文或者公共推送中看到標(biāo)簽時(shí),它會(huì)創(chuàng)建一條新消息瘦陈,其中包含推送的全部信息凝危,該消息轉(zhuǎn)發(fā)到流中的下一個(gè)節(jié)點(diǎn)。在我們的示例中晨逝,由于Twitter節(jié)點(diǎn)的輸出連接到trigger節(jié)點(diǎn)的輸入蛾默,從而trigger節(jié)點(diǎn)可以接收消息中的詳細(xì)信息。
trigger節(jié)點(diǎn)是Node-RED中的另一個(gè)內(nèi)置節(jié)點(diǎn)咏花,其默認(rèn)行為是等待其接受到的任何消息趴生。當(dāng)它收到一條消息時(shí)阀趴,它就會(huì)觸發(fā),并在其輸出上以值為"1"作為消息體發(fā)送消息苍匆。然后等待1秒刘急,并在消息正文中發(fā)送值為"0"的第二條消息。
由于trigger節(jié)點(diǎn)連接到控制輸入/輸出或IO的Raspberry Pi引腳的GPIO節(jié)點(diǎn)浸踩,1秒之后在它的輸入引腳得到的這兩個(gè)消息叔汁。
其次,gpio節(jié)點(diǎn)是隱藏設(shè)置IO Pi引腳的細(xì)節(jié)一個(gè)Node-RED內(nèi)置的節(jié)點(diǎn)检碗。當(dāng)它獲得一個(gè)具有"1"值的消息時(shí)据块,它將IO引腳pin調(diào)高,當(dāng)它接收到一個(gè)帶有"0"體的消息時(shí)折剃,它將PIN調(diào)低另假。在這個(gè)例子中,該gpio節(jié)點(diǎn)配置控制引腳數(shù)12怕犁,所以節(jié)點(diǎn)數(shù)顯示在圖標(biāo)中边篮。
如果您的Pi引腳優(yōu)先連接LED燈并且Pin設(shè)置為12,則LED燈會(huì)一秒鐘閃爍一次奏甫。
如果您仔細(xì)想想發(fā)生了什么戈轿,它實(shí)際上是一個(gè)極其強(qiáng)大的Node-RED和物聯(lián)網(wǎng)的例子。它是將Twitter文章連接到PI和LED阵子,但不需要任何編程-所有的任務(wù)都是通過預(yù)先進(jìn)行了節(jié)點(diǎn)在Node-RED思杯,只需要設(shè)置即可。這展示了了Node-RED在一個(gè)簡單的設(shè)備上比如Raspberry PI運(yùn)行的能力挠进。
所以我總結(jié)一下色乾。Node-RED是一種基于流的編程工具,它有一個(gè)可視化編輯器领突,允許您將節(jié)點(diǎn)連接在一起以創(chuàng)建流杈湾。在這種情況下,3個(gè)節(jié)點(diǎn)創(chuàng)建我們的第一流攘须。真實(shí)世界的事件,例如將帶有# LED標(biāo)簽的Twitter轉(zhuǎn)換為信息殴泰,通過流中連線傳輸數(shù)據(jù)于宙。節(jié)點(diǎn)在其輸入口中處理消息,并且將其輸出的消息發(fā)送到流中的下一個(gè)節(jié)點(diǎn)悍汛。在這個(gè)簡單的例子中捞魁,我們尋找一個(gè)帶標(biāo)簽# LED的Twitter和用它來觸發(fā)消息到Raspberry Pi節(jié)點(diǎn),導(dǎo)致IO引腳12高1秒离咐,這將導(dǎo)致LED閃爍1秒谱俭。
這個(gè)例子--以及本課的其他部分--主要是向大家展示我們可以用Node-RED來做的事情奉件。如果您想嘗試這個(gè)例子,您應(yīng)該看看第2課昆著,看看如何設(shè)置一個(gè)帳戶與FRED(基于Node-RED的能夠使用的云服務(wù))县貌,以及如何開始。
這個(gè)流的詳細(xì)信息
[{"id":"5392b19a.ac6d5","type":"twitter in","twitter":"","tags":"#led","user":"true","name":"","topic":"tweets","x":226,"y":162,"z":"4539e432.bac61c","wires":[["d5c9e9c9.2a3618"]]},{"id":"21fdbdaa.de0242","type":"rpi-gpio out","name":"","pin":"12","set":"","level":"0","out":"out","x":424.99998474121094,"y":270,"z":"4539e432.bac61c","wires":[]},{"id":"d5c9e9c9.2a3618","type":"trigger","op1":"1","op2":"0","op1type":"val","op2type":"val","duration":"1","extend":false,"units":"s","name":"","x":319,"y":220,"z":"4539e432.bac61c","wires":[["21fdbdaa.de0242"]]}]
我們的第二個(gè)例子顯示Node-RED不同的用法煤痕。不是控制設(shè)備例如Raspberry Pi,這個(gè)流會(huì)結(jié)合氣象信息和您的Fitbit信息接谨,當(dāng)天氣好且您落后于您的鍛煉計(jì)劃時(shí)會(huì)向您發(fā)送電子郵件警報(bào)摆碉。這個(gè)流有點(diǎn)復(fù)雜,使用6個(gè)節(jié)點(diǎn)脓豪,但依舊通過使用內(nèi)置節(jié)點(diǎn)巷帝,您仍可以通過很少或沒有編程來完成復(fù)雜的任務(wù)。
和以前一樣扫夜,節(jié)點(diǎn)從Node-RED UI的節(jié)點(diǎn)調(diào)色板中拖出來楞泼,并在主界面上連接在一起。從最左邊的節(jié)點(diǎn)历谍,讓我們開始一個(gè)openweather節(jié)點(diǎn)可以配置檢查設(shè)定的時(shí)間間隔在任何主要城市天氣现拒。當(dāng)它檢查時(shí),它會(huì)將結(jié)果打包到一個(gè)消息中望侈,該消息被發(fā)送至下一個(gè)節(jié)點(diǎn)印蔬,在這種情況下,是指向一個(gè)switch節(jié)點(diǎn)脱衙。switch節(jié)點(diǎn)執(zhí)行一個(gè)簡單的測試侥猬,檢查輸入消息的值,若測試的值規(guī)范且正確捐韩,則發(fā)送一個(gè)值為"1"的消息退唠。在我們的例子中,它被配置為檢測溫度值(tempc)是否為15攝氏度或更高荤胁。
當(dāng)switch節(jié)點(diǎn)測試為真瞧预,或'switches on'狀態(tài),它發(fā)送一個(gè)消息到Fitbit節(jié)點(diǎn)--流程中的下一個(gè)節(jié)點(diǎn)仅政。Fitbit節(jié)點(diǎn)是另一個(gè)強(qiáng)大的內(nèi)置的節(jié)點(diǎn)垢油,您可以在Fitbit.com網(wǎng)站的門戶網(wǎng)站中設(shè)置獲得您的Fitbit設(shè)備統(tǒng)計(jì)。Fitbit為您的設(shè)備將數(shù)據(jù)打包到一個(gè)消息中并將其發(fā)送到的流的下一個(gè)節(jié)點(diǎn)圆丹。
下一個(gè)節(jié)點(diǎn)是另一個(gè)switch節(jié)點(diǎn)滩愁。此項(xiàng)已設(shè)置成檢查您今天走過的步數(shù)是否小于1000個(gè)。它通過檢測Fitbit數(shù)據(jù)場中的summary.steps是否小于1000辫封。記住硝枉,它是從一個(gè)向Fitbit.com申請信息的Fitbit節(jié)點(diǎn)中剛剛得到這些數(shù)據(jù)廉丽。
如果您今天走了不到1000步,那么switch節(jié)點(diǎn)會(huì)生成一條消息妻味,該消息通過流傳遞給function節(jié)點(diǎn).function節(jié)點(diǎn)是一個(gè)通用的內(nèi)置節(jié)點(diǎn)正压,允許您用JavaScript編寫自己的函數(shù)。下節(jié)課將更詳細(xì)地討論這個(gè)節(jié)點(diǎn)』】桑現(xiàn)在蔑匣,您可以假設(shè)這個(gè)節(jié)點(diǎn)剛剛創(chuàng)建了一個(gè)新的信息,信息的主題行和文本正文可以通過電子郵件發(fā)送棕诵。
一旦這個(gè)消息在function節(jié)點(diǎn)中創(chuàng)建裁良,它就通過流發(fā)送到最終節(jié)點(diǎn),這是一個(gè)email節(jié)點(diǎn)校套。此節(jié)點(diǎn)將接收任何傳入消息的主體价脾,并將其發(fā)送到在初始化節(jié)點(diǎn)時(shí)配置的電子郵件帳戶。在這種情況下笛匙,設(shè)置成發(fā)送消息給您侨把。
雖然例子似乎很簡單,只是看看天氣和您在Fitbit上的活動(dòng)妹孙,您可以用類似的流檢查家庭設(shè)備的狀態(tài)秋柄,在您的服務(wù)器計(jì)算機(jī),在一個(gè)工廠等設(shè)備蠢正,然后您可以使用輸出節(jié)點(diǎn)發(fā)送郵件骇笔,Twitter,使用應(yīng)用程序接口調(diào)用后臺(tái)軟件嚣崭,控制設(shè)備-事實(shí)上選擇是非常多的笨触。Node-RED是一個(gè)非常強(qiáng)大的工具,用于連接輸入和輸出雹舀,并提供許多節(jié)點(diǎn)芦劣,無論是由Node-RED內(nèi)置或開發(fā),均可執(zhí)行一系列驚人的任務(wù)说榆。
您可以在以下片段中找到這個(gè)流的Node-RED信息:
[{"id":"78902106.876fe","type":"function","name":"Compose Email","func":"return {\n topic:\"The weather is good.\",\n payload:\"Time to go for a walk!\"\n};\n","outputs":1,"noerr":0,"x":597.0000152587891,"y":441.9999084472656,"z":"c211e0ba.3dee2","wires":[["2e121645.d1edea"]]},{"id":"3c06c7e1.c3f938","type":"fitbit","fitbit":"","name":"","dataType":"activities","x":389.0000305175781,"y":510,"z":"c211e0ba.3dee2","wires":[["1e739b5.fe18c65"]]},{"id":"45a12686.ba5ed8","type":"switch","name":"If tempc > 15","property":"payload.tempc","rules":[{"t":"gt","v":"15"}],"checkall":"true","outputs":1,"x":385.0000190734863,"y":460.9999694824219,"z":"c211e0ba.3dee2","wires":[["3c06c7e1.c3f938"]]},{"id":"1e739b5.fe18c65","type":"switch","name":"If summary.steps < 1000","property":"payload.summary.steps","rules":[{"t":"lt","v":"1000"}],"checkall":"true","outputs":1,"x":421.9999885559082,"y":556.9999694824219,"z":"c211e0ba.3dee2","wires":[["78902106.876fe"]]},{"id":"2e121645.d1edea","type":"e-mail","server":"smtp.gmail.com","port":"465","name":"user@email.com","dname":"","x":638.0000152587891,"y":496.9999694824219,"z":"c211e0ba.3dee2","wires":[]},{"id":"bbb34414.444cb8","type":"openweathermap in","name":"Weather Now","lon":"","lat":"","city":"Vancouver","country":"Canada","x":384.0000190734863,"y":410,"z":"c211e0ba.3dee2","wires":[["45a12686.ba5ed8"]]}]
我們在這個(gè)介紹中的最后一個(gè)例子是另一類流虚吟。它顯示了如何創(chuàng)建一個(gè)簡單的Web服務(wù)響應(yīng)瀏覽器因數(shù)據(jù)查詢所發(fā)送的一個(gè)HTTP請求,然后提供一個(gè)用圖形表示數(shù)據(jù)的網(wǎng)頁返回給瀏覽器-基本上Node-RED僅僅用了幾個(gè)節(jié)點(diǎn)便提供了一個(gè)Web服務(wù)器和一些簡單的服務(wù)签财。
加入之前介紹的Fitbit節(jié)點(diǎn)稍味,這個(gè)例子創(chuàng)建了一個(gè)簡單的Web服務(wù),可以讓您查詢您一天的Fitbit數(shù)據(jù)荠卷,使用好看的圈圖,通過運(yùn)動(dòng)顯示您"燒掉"多少卡路里烛愧。
流程圖如上圖所示油宜,由4個(gè)節(jié)點(diǎn)組成掂碱。第一個(gè)和最后一個(gè)節(jié)點(diǎn)是HTTP輸入和輸出節(jié)點(diǎn),它們共同工作以監(jiān)聽HTTP請求并發(fā)送HTTP響應(yīng)慎冤。此流監(jiān)聽來自任何數(shù)據(jù)源的HTTP請求疼燥,但我們假設(shè)這里有一個(gè)常用瀏覽器。當(dāng)它到來時(shí)蚁堤,它查詢您來自Fitbit.com的Fitbit數(shù)據(jù)醉者,然后使用一個(gè)template節(jié)點(diǎn)建立一個(gè)HTTP頁面,并將其傳送至送回網(wǎng)頁至瀏覽器的HTTP輸出節(jié)點(diǎn)
同樣披诗,這只是為了讓您對Node-RED的能力和靈活性有所了解撬即,而不需要了解流如何工作的所有細(xì)節(jié)。在以后的講解中您會(huì)有更多的了解呈队。在一個(gè)較高的水平剥槐,HTTP輸入節(jié)點(diǎn)已配置為監(jiān)聽對組合的托管服務(wù)URL的HTTP請求,再加上您的登錄名{用戶名}和/ Fitbit字符串宪摧。這將會(huì)在第二講中得到更詳細(xì)的解釋粒竖。
當(dāng)一個(gè)HTTP請求到達(dá)時(shí),HTTP輸入節(jié)點(diǎn)創(chuàng)建一個(gè)消息觸發(fā)Fitbit的節(jié)點(diǎn)几于,這是流中的下一個(gè)節(jié)點(diǎn)蕊苗。Fitbit節(jié)點(diǎn)為用戶獲得當(dāng)前數(shù)據(jù),然后作為信息傳輸這些數(shù)據(jù)至template節(jié)點(diǎn)沿彭。HTML template節(jié)點(diǎn)是Node-RED中的另一個(gè)內(nèi)置節(jié)點(diǎn)朽砰,它與function節(jié)點(diǎn)一樣,允許您自由編寫代碼膝蜈。然而锅移,不需要使用function節(jié)點(diǎn)那樣的JavaScript格式,template節(jié)點(diǎn)如同HTML一樣與文本協(xié)同工作饱搏。
模板節(jié)點(diǎn)中的HTML代碼如清單1.1所示非剃,因此您可以看到正在發(fā)生的事情。然而如果您不想推沸,就不必詳細(xì)檢查它了备绽。基本上鬓催, template節(jié)點(diǎn)需要的卡路里消耗數(shù)據(jù)來自Fitbit并且使用第三方的圖形庫肺素,創(chuàng)建一個(gè)簡單的HTML文件,會(huì)告訴接收瀏覽器使用第三方圖形庫顯示消耗的卡路里圈圖宇驾。
列表1.1顯示卡路里使用量甜甜圈圖的簡單HTML模板
<!doctype html>
<head>
<title>A Node-RED Example</title>
<link rel="stylesheet" >
<script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script>
</head>
<html>
<div id="chart-example" style="height: 250px;"></div> <script>
Morris.Donut({
element: 'chart-example',
data: [
{label: "Activity Calories", value: {{payload.summary.activityCalories}} },
{label: "Calories BMR", value: {{payload.summary.caloriesBMR}} },
{label: "Calories Out", value: {{payload.summary.caloriesOut}} }
]
});
</script>
</html>
一旦template節(jié)點(diǎn)生成了HTML文件倍靡,它就把它作為消息傳遞給最終的HTTP響應(yīng)節(jié)點(diǎn)。這個(gè)節(jié)點(diǎn)將HTML打包成一個(gè)HTTP響應(yīng)并將它發(fā)回瀏覽器课舍。
然后用戶會(huì)看到一個(gè)簡單的甜甜圈卡路里消耗量圖表(見圖1.4)--所有這些都是由一個(gè)簡單的Node-RED流構(gòu)建和服務(wù)的塌西!
您可以在如下找到這個(gè)Node-RED流中的信息:
[{"id":"5e17aecb.a1e85","type":"http in","name":"public/{username}/fitbit","url":"/public/fitbit","method":"get","swaggerDoc":"","x":158.0994415283203,"y":103.09091186523438,"z":"a59638c4.5a69c8","wires":[["ad752c2a.528ad"]]},{"id":"50026922.affd98","type":"template","name":"Response Body","field":"payload","format":"handlebars","template":"<!doctype html>\n<head>\n <title>A Node RED Example</title>\n <link rel=\"stylesheet\" href=\"http://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css\">\n <script src=\"http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js\"></script>\n <script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js\"></script>\n <script src=\"http://cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js\"></script>\n</head>\n<html> \n <div id=\"chart-example\" style=\"height: 250px;\"></div>\n <script>\n Morris.Donut({\n element: 'chart-example',\n data: [\n {label: \"Activity Calories\", value: {{payload.summary.activityCalories}} },\n {label: \"Calories BMR\", value: {{payload.summary.caloriesBMR}} },\n {label: \"Calories Out\", value: {{payload.summary.caloriesOut}} }\n ]\n });\n </script>\n</html>\n","x":412.0994415283203,"y":102.09091186523438,"z":"a59638c4.5a69c8","wires":[["2bfb3fab.d404c"]]},{"id":"2bfb3fab.d404c","type":"http response","name":"","x":513.0994415283203,"y":146.09091186523438,"z":"a59638c4.5a69c8","wires":[]},{"id":"ad752c2a.528ad","type":"fitbit","fitbit":"","name":"","dataType":"activities","x":280.0993194580078,"y":149.09091186523438,"z":"a59638c4.5a69c8","wires":[["50026922.affd98"]]}]
Node-RED的歷史
正如前面的示例所示,Node-RED是構(gòu)建物聯(lián)網(wǎng)應(yīng)用程序和服務(wù)的強(qiáng)大工具捡需。其成因正是由于物聯(lián)網(wǎng)原型應(yīng)用極其服務(wù)办桨。Node-RED是由IBM新興技術(shù)組特別是通過兩研究員Nick O'Leary和Dave Conway Jones的一個(gè)開源項(xiàng)目。他們最初將Node-RED作為自己的工具站辉,因?yàn)樗麄冋谘芯课锫?lián)網(wǎng)項(xiàng)目呢撞,并正在"尋找一種方法來簡化在為客戶構(gòu)建概念技術(shù)中連接系統(tǒng)和傳感器過程"。
2013年初饰剥,一個(gè)初始版本的Node-RED作為開源項(xiàng)目發(fā)布殊霞,并在2014期間建立了一個(gè)小型但活躍的用戶和開發(fā)組。在編寫的時(shí)候捐川,結(jié)紅色的仍然是一個(gè)新興的技術(shù)脓鹃,但已從創(chuàng)始人,實(shí)驗(yàn)者和一些有自己需求的大小公司中看到了顯著的青睞古沥。
如今已經(jīng)發(fā)展成了一個(gè)充滿著活躍用戶與開發(fā)人員的社區(qū)瘸右,核心小組致力于Node-RED代碼本身并且大多數(shù)開發(fā)人員為流庫貢獻(xiàn)節(jié)點(diǎn)或流。您可以查看郵件列表和GitHub庫附錄A中提供的鏈接岩齿,或者直接google這些鏈接太颤。
由于Node-RED仍然是一個(gè)迅速發(fā)展的技術(shù),要注意事物可以很快發(fā)生改變盹沈。這些文稿都寫于Node-RED的0.11.0更新(整理翻譯時(shí)已到0.18.7)龄章,事例也包含在內(nèi)。然而乞封,和任何新技術(shù)一樣做裙,如果事情不按您期望的方式運(yùn)行,檢查兼容性總是明智之舉肃晚。
Node-RED與物聯(lián)網(wǎng)
當(dāng)IBM人員創(chuàng)建Node-RED時(shí)锚贱,他們主要關(guān)注物聯(lián)網(wǎng),即將設(shè)備連接到處理和處理設(shè)備关串。作為物聯(lián)網(wǎng)快速應(yīng)用開發(fā)的工具拧廊,Node-RED既強(qiáng)大又靈活。它的能力來自兩個(gè)因素的組合:
Node-RED是基于流的編程模型的一個(gè)示例 - 表示節(jié)點(diǎn)之間的事件流的消息晋修,觸發(fā)導(dǎo)致輸出的處理吧碾。基于流的編程模型很好地映射到典型的IoT應(yīng)用墓卦,其特征在于觸發(fā)某種處理的現(xiàn)實(shí)世界事件倦春,這反過來導(dǎo)致真實(shí)世界的動(dòng)作。 Node-RED將這些事件作為消息包裝,為事件提供一個(gè)簡單而統(tǒng)一的模型溅漾,因?yàn)樗鼈冊诮M成流的節(jié)點(diǎn)之間傳輸山叮。
內(nèi)置節(jié)點(diǎn)的集合是Node-RED的第二部分。通過構(gòu)建一套強(qiáng)大的輸入和輸出節(jié)點(diǎn)添履,每個(gè)節(jié)點(diǎn)都隱藏了與現(xiàn)實(shí)世界交互的大部分復(fù)雜性,Node-RED為開發(fā)人員提供了強(qiáng)大的構(gòu)建模塊脑又,使他們能夠快速組合完成大量的流程暮胧,而無需擔(dān)心編程細(xì)節(jié)。
這兩個(gè)因素使得Node-RED成為IoT應(yīng)用程序開發(fā)的強(qiáng)大工具问麸。 當(dāng)結(jié)合靈活性創(chuàng)建和使用節(jié)點(diǎn)(如功能節(jié)點(diǎn))時(shí)往衷,允許開發(fā)人員快速編寫任意的JavaScript函數(shù),再加上正在不斷創(chuàng)建和共享新節(jié)點(diǎn)的Node-RED社區(qū)严卖,Node-RED很可能是一個(gè)IoT開發(fā)工具箱中的主要工具席舍。
然而,Node-RED并不總是用于IoT應(yīng)用程序開發(fā)的最佳工具哮笆。 雖然強(qiáng)大而靈活来颤,但并不總是正確的解決方案。 Node-RED可能不是首選的情況包括:
復(fù)雜的多功能物聯(lián)網(wǎng)應(yīng)用稠肘。 Node-RED擅長于快速應(yīng)用開發(fā)福铅,如果您愿意的話可以將其作為將事件連接到動(dòng)作或傳感器到執(zhí)行器的粘合劑。然而项阴,當(dāng)應(yīng)用程序超過一定大小時(shí)滑黔,通過Node-RED可視化編程和管理會(huì)變得復(fù)雜。有一些功能可以幫助您环揽,例如子流程(見講解5)略荡,但UI會(huì)成為最終瓶頸。
基于流程的編程是一種并不總是最適合應(yīng)用程序開發(fā)的編程模型歉胶。與某些編程語言相比汛兜,某些編程語言在某些任務(wù)中勝于其他任務(wù),基于流程的編程也有其弱點(diǎn)跨扮。一個(gè)很好的例子是循環(huán):Node-RED在處理循環(huán)時(shí)很麻煩序无。
具體用例『獯矗基于流程的編程是一個(gè)通用模型帝嗡,不針對特定需求進(jìn)行定位或優(yōu)化,例如數(shù)據(jù)分析或交互界面開發(fā)璃氢。目前哟玷,Node-RED對這些類型的應(yīng)用程序沒有特別的支持,也沒有簡單的方法來添加這樣的支持。顯然巢寡,由于Node-RED的基礎(chǔ)技術(shù)是JavaScript喉脖,您可以利用其功能滿足這些需求。如果要使用Node-RED來構(gòu)建原型抑月,一種方法是使用更適合于您的任務(wù)的其他語言來實(shí)現(xiàn)部分或全部應(yīng)用程序树叽,并使用Node-RED進(jìn)行整體控制。
話雖如此谦絮,正如本課中所示题诵,并將在以下課程中演示,Node-RED是集合大量IoT應(yīng)用程序的強(qiáng)大工具层皱。 隨著它的發(fā)展性锭,它將在更廣泛的情況下變得更加復(fù)雜和更有用。
同樣重要的是叫胖,在隨后的講座中探索Node-RED時(shí)草冈,您將會(huì)意識(shí)到,盡管Node-RED的根源在IoT中瓮增,但它是一種可用于構(gòu)建各種應(yīng)用程序的工具怎棱,而不僅僅是IoT應(yīng)用程序。 實(shí)際上钉赁,在這些講座中蹄殃,您會(huì)看到Node-RED被用于網(wǎng)絡(luò)應(yīng)用程序,社交媒體應(yīng)用程序你踩,后臺(tái)整合诅岩,IT任務(wù)管理,也就是跨越現(xiàn)代計(jì)算任務(wù)的范例带膜。
我們的希望是吩谦,在本課程結(jié)束之前,您將像我們一樣看到Node-RED作為一個(gè)靈活而強(qiáng)大的工具膝藕,可以在許多情況下用于原型設(shè)計(jì)式廷,也可用于生產(chǎn)級開發(fā)。
總結(jié)
在本講座中芭挽,我們引導(dǎo)您深入了解Node-RED滑废。 您已經(jīng)看到Node-RED如何組合構(gòu)建塊,使用可視化工具快速創(chuàng)建實(shí)際執(zhí)行復(fù)雜的現(xiàn)實(shí)世界任務(wù)的簡單流袜爪。您還了解到了一些關(guān)于Node-RED作為物聯(lián)網(wǎng)快速應(yīng)用程序開發(fā)工具的起源蠕趁,以及它如何演變,現(xiàn)在被用于各種任務(wù)辛馆,而不僅僅是IoT編程俺陋。 最后,我們已經(jīng)討論了Node-RED的局限性,并指出了其他語言和工具可以更好地為您服務(wù)的一些領(lǐng)域腊状。
在接下來的講座中诱咏,我們將開始一些真正的編程,并向您展示如何使用Node-RED提供的基本節(jié)點(diǎn)構(gòu)建自己的流缴挖。