由測評者HonestQiao提供
視頻搶先看↓↓↓
這篇分享,內容較長,涉及知識點多,需耐心閱讀,目錄如下:
前言
一、安裝node-red
二、系統命令控制LED
三、LED權限設置
四、Node-RED控制系統LED
五、系統命令控制GPIO
六、Node-RED控制GPIO
七、開發板上的S3按鍵使用
八、在Node-RED中使用S3按鍵控制LED
九、Node-RED使用I2C接口讀取SHT30溫濕度傳感器數據
十:Node-RED使用儀表盤顯示溫濕度傳感器數據
十一:總結
前言:
如果有心查看米爾MYC-J1028X核心板及開發板的官方界面:
你會發現,介紹中透露出濃厚的工業味兒。工業!工業!工業!
今天,我們就在MYC-J1028X開發板上,搭建Node-RED環境,將開發板變身為工業物聯網控制網關。
很多人了解或者知道Node-RED,是從智能家居或者小型物聯網控制開始的,有的人認為只是一個類似的圖形界面編程的工具。
其實,在工業互聯網中,Node-RED可以用于數據收集、關聯性觸發控制、儀表呈現等,在低成本投入的情況下,也能獲得較好的效果。
一、安裝node-red
安裝node-red,可以參考官方的文檔:https://nodered.org/docs/getting-started/raspberrypi
雖然這篇文檔,是針對樹莓派的,但是對于Debian系的系統,都是可以參考的。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
執行上述命令后,將自動下載安裝腳本,啟動安裝進程,安裝過程中的問題,一律選y即可。
安裝過程可能耗時比較長,先沏一杯茶或者咖啡,等著吧:
首次安裝,可能會遇到莫名其妙的Node-RED core沒裝上,核心都沒裝上,怎么玩?
不管,再次執行安裝命令,就能好了:
如果提示那個shortcut有問題,先不管,不影響使用。
因為是首次安裝,所以執行node-red admin init進行初始化:
初始化完成后,就可以執行 node-red start 啟動Node-RED了。
正常啟動后,就可以通過網址 http://開發板IP:1880/ 進行訪問了:
輸入初始化的時候設置的賬戶密碼,登錄后,按照下面的設置,即可切換到中文界面:
設置完成后,需要刷新頁面,才能正式生效。
二、系統命令控制LED
現在,我們就可以開始在Node-RED中,開始進行外設控制了。
第一個控制邏輯,還是點燈,能點燈,我們就成功一大半了。
通過查看官方的手冊,可以了解到:
這個LED,系統已經做好了設備關聯,不能通過GPIO進行控制。
我們可以先使用上面的指令,測試能否控制系統的D22-LED。
echo 0 | sudo tee /sys/class/leds/d22/brightness
echo 1 | sudo tee /sys/class/leds/d22/brightness
三、LED權限設置:
通過查看Node-RED的文檔資料,可以了解到,有一個Exec Node,可以用于執行系統的命令,那我們正好可以使用其來執行上面手冊中,控制D22的指令。
要使得普通用戶運行的Node-RED能夠控制系統LED,需要在udev中,添加對應的權限處理規則,否則操作時將會提示沒有權限。
sudo groupadd -f -r leds
sudo usermod -a -G leds $USER
sudo vim /etc/udev/rules.d/99-leds.rules
SUBSYSTEM=="leds", ACTION=="add", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
SUBSYSTEM=="leds", ACTION=="change", ENV{TRIGGER}!="none", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
將上面的最后兩行設置,添加到/etc/udev/rules.d/99-leds.rules 后,需要重啟系統才能生效。
友情提醒:類似在udev中進行普通用戶權限的設置,后續還有很多次,一定要仔細設置。
重啟后(sudo reboot),可以測試使用普通用戶權限,來操作LED:
echo 0 | tee /sys/class/leds/d22/brightness
echo 1 | tee /sys/class/leds/d22/brightness
四、Node-RED控制系統LED
先在Node-RED界面中,參考下圖,添加兩個inject node,再添加兩個Exec Node。
Exec Node的命令部分,參考下圖填寫,記住一個為echo 0,一個為echo 1,對應熄滅和點亮LED
兩個injection Node的設置,分別如下:
上面的邏輯表示:
injection 0于第0秒開始執行,觸發echo 0對應的Exec,熄滅LED
injection 1于第1秒開始執行,觸發echo 1對應的Exec,點亮LED
第2秒,injection 0再次執行,熄滅LED
第1+2秒,injection 1再次執行,點亮LED
因為設置了周期執行,所以上面兩個觸發器,交替執行,就實現了LED的亮滅效果。
五、系統命令控制GPIO:
在官方手冊上,有說明如何操作GPIO:
結合開發板和原理圖上我們可以了解到,J18是我們可以方便使用的引腳區域:
J18上可供使用的GPIO對應關系如下:
J18 - Pin 32 - GPIO3_5:421
J18 - Pin 22 - GPIO3_6:422
J18 - Pin 29 - GPIO3_8:424
J18 - Pin 31 - GPIO3_9:425
J18 - Pin 33 - GPIO3_10:426
J18 - Pin 36 - GPIO3_12:428
類似系統LED,如果要在普通用戶下控制GPIO,也需要在udev中進行一些設置,具體設置如下:
sudo groupadd -f -r gpio
sudo usermod -a -G gpio $USER
sudo vim /etc/udev/rules.d/99-gpio.rules
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", RUN+="/bin/chgrp -R gpio /sys/class/gpio/export /sys/class/gpio/unexport", RUN+="/bin/chmod -R g=u /sys/class/gpio/export /sys/class/gpio/unexport"
SUBSYSTEM=="gpio*", KERNEL=="gpio*", ACTION=="add", RUN+="/bin/chgrp -R gpio /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
SUBSYSTEM=="gpio*", KERNEL=="gpio*", ACTION=="change", ENV{TRIGGER}!="none", RUN+="/bin/chgrp -R gpio /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
將上述最后三行內容寫入/etc/udev/rules.d/99-gpio.rules,然后重啟開發板即可生效。
重啟完成后,我們就可以現在命令行下進行測試。
首先按照原理圖,將可以用3.3V驅動的LED,連接到GPIO3_9引腳上。
然后使用下面的命令進行測試:
echo 425 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio425/direction
for i in {1..100};do
echo $((i%2)) > /sys/class/gpio/gpio425/value
sleep 1
done
執行完命令后,連接到GPIO3_9引腳上的LED,將每秒閃爍一次。
測試控制成功后,我們就可以到Node-RED中進行控制了。
六、Node-RED控制GPIO
要在Node-Red中控制GPIO,可以安裝OPI-GPIO插件,按照以下步驟安裝即可:
安裝完成后,在右邊組件選擇欄,就會出現Orange Pi,選擇其中的output pin,然后將之前設置的injection 0和1連接到新添加的控件上,再按照下面的步驟,設置對應的GPIO端口號。
因為GPIO3_9對應425,所以pin填寫425即可。但Orange Pi在填寫后,再次打開的時候,界面會變成初始狀態,所以務必仔細填寫。
填寫完成,點擊右上角的部署,連接到GPIO3_9上的LED,就會開始閃爍了,和板子上的D22-LED同步。
七、開發板上的S3按鍵使用:
在開發板上,有一個可供用戶編程使用的按鍵S3:
具體位置如下:
S3按鍵,使用系統/dev/input/event0來監聽接收,普通用戶使用,需要做如下設置:
sudo usermod -a -G input $USER
sudo vim /etc/udev/rules.d/99-event.rules
KERNEL=="event[0-9]*", SUBSYSTEM=="input", TAG+="uaccess"
設置好以后,重啟才能生效。
重啟后,使用evtest指令測試:
S3按鍵后,就能夠收到按鍵的消息了。
為了能夠更好的接收到按鍵信息,我們需要使用Python去進行檢測,這需要使用到python3-evdev庫,先安裝:
pip3 install evdev
然后,使用下面的python腳本進行測試:
from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event0')
while True:
r,w,x=select([dev],[],[])
for event in dev.read():
print(event)
按下S3按鍵然后釋放,就會收到信息了:
需要注意的是,S3按鍵使用系統Event接收,按下去和釋放,都會觸發一次。
按下去對應:
event at 1664670749.634839, code 02, type 01, val 01
event at 1664670749.634839, code 00, type 00, val 00
釋放對應:
event at 1664670750.350823, code 02, type 01, val 00
event at 1664670750.350823, code 00, type 00, val 00
我們可以將程序完善一下,直接按鍵輸出1,釋放輸出0:
from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event0')
while True:
r,w,x=select([dev],[],[])
for event in dev.read():
if event.code == 2 and event.type == 1:
print("value: %d" % event.value)
按下S3按鍵然后釋放,就會收到下面的信息了:
這樣,我們就準備好將按鍵值提供給Node-RED使用了。
八、在Node-RED中使用S3按鍵控制LED:
要在Node-RED中,獲取到Python提供的按鍵值,然后控制LED,需要使用下面的邏輯:
在Node-RED中的控制邏輯如下:
下面進行詳細的說明。
首先,我們再次調整上面的監控腳本,使得監控按鍵的邏輯,符合實際需要,即:
根據按鍵次數,奇數次按鍵輸出1(用于點亮LED),偶數次按鍵輸出0(用于熄滅LED)
默認輸出0
注意:這里是根據按鍵奇偶次數來輸出1或者0,而不是根據按下和釋放來輸出1或者0
具體代碼如下:
from evdev import InputDevice
from select import select
dev = InputDevice('/dev/input/event0')
keypress_times = 0
print(keypress_times % 2)
while True:
r,w,x=select([dev],[],[])
for event in dev.read():
if event.value == 1:
keypress_times = keypress_times + 1
print(keypress_times % 2)
將上述代碼保存到/home/HonestQiao/Projects/event/evdev_key.py (具體路徑,請根據你的實際情況設定),然后運行測試:
測試無誤后,就可以在Node-RED中真正調用了。
要在Node-RED中,啟動運行上面的監聽腳本,需要使用到node-red-node-daemon插件,安裝即可:
然后,按照下面的方式,使用daemon控件并進行設置:
因為evdev_key.py輸出的內容,為【0或者1 并附帶回車】,所以Node-RED收到后,需要進行一次轉換,才能使用。
按照下面的步驟,添加轉換控件,并設置好轉換邏輯即可:
然后,添加GPIO3_10對應426引腳控制,并與轉換為數字控件進行關聯:
忘記說了,我在J18的GPIO3_10對應的引腳,連接了第二個LED:
然后,再添加一個debug控件,以便能夠查看到中間過程的數據信息:
將S3的三個輸出、轉換數字控件的輸出,都連接到debug控件。
點擊部署后,在右邊,就能看到調試輸出信息了。
嘗試一下按鍵,就能夠看到腳本輸出的字符串信息,已經轉換為數字信息,并且GPIO3_10連接的黃色LED,也能夠被正常控制了。
九、Node-RED使用I2C接口讀取SHT30溫濕度傳感器數據:
前面的部分,都是LED控制、GPIO控制、按鍵讀取,相對比較簡單。
下面,再來一個感覺稍微提高一點點的實例,就是使用I2C接口讀取SHT30溫濕度傳感器。
在之前看過的電路原理圖中,J18接口上,就有I2C接口。
將I2C接口的SHT30,連接到J18對應的接口上:
要在普通用戶權限下,使用i2c接口,我們又需要在udev中做一些設置:
sudo vim /etc/udev/rules.d/99-i2c.rules
KERNEL=="i2c-[0-9]*", GROUP="i2c"
將這行內容,寫入到/etc/udev/rules.d/99-i2c.rules,然后重啟生效。
重啟完成后,在命令下下,測試是否能夠找到SHT30:
先使用 i2cdetect -l 命令查看一下可供使用的i2c接口:
從上面可以看到,i2c-0、i2c-1可供使用。
然后,再使用 i2cdetect -y 0 和 i2cdetect -y 1 查看i2c掛載的設備:
在i2c-1中,有一個44的設備,這個正是 SHT30的默認i2c通訊地址。
可以嘗試,把SHT30連線斷開,再使用 i2cdetect -y 1 查看,有什么不同。
在Node-RED中,要讀取SHT3X的數據,可以使用 node-red-contrib-sht 插件:
然后,按照如下步驟,先添加一個injection控件,用于周期性觸發,再掛一個SHT3X控件,用于讀取SHT3X的數據,最后再掛一個debug模塊,輸出調試信息:
邏輯設置完成,點擊右上角的部署后,調試區域,就會打印出來,實際讀取到的溫濕度信息了。
對著溫濕度傳感器哈哈氣,就會發現讀取到的數值,發生了變化。
十:Node-RED使用儀表盤顯示溫濕度傳感器數據:
Node-RED還有一個迷人又強大的地方,那就是它不僅能夠方便你用圖形界面設計物聯網設備的控制交互流程,還能夠很方便的使用儀表盤,提供數據查看界面。
下面,我就在上一步讀取到溫濕度傳感器的基礎上,再做一個,可以在手機界面上查看訪問的儀表盤。
首先,安裝一個dashboard儀表盤控件:
有好多可供選擇的,我直接安裝了第一個dashboard-evi。其他的,大家也可以嘗試一下。
然后,在SHT3X空間上,掛兩個change,用于轉換溫濕度值:
上述兩個change,一個用于將溫度值轉換為只有1位小數,一個將濕度值轉換為無小數。
而溫濕度值,各掛一個gauge,用于顯示最終的數據,其內容,參考如下設置即可:
溫度gauge:
濕度gauge:
注意,務必需要設置Range,也就是數值范圍,否則可能不會正常顯示。
在第一次設置gauge的時候,如上面的溫度gauge,要點 (4) 進入,設置group節點和Tab節點,具體如下:
經過以上設置,就能夠將溫濕度值,輸出到儀表盤上了。
為了效果更好,我再添加一個當前日期時間轉換,并使用文本控件顯示。
先按照下面的步驟,添加一個function控件,別編寫轉換代碼:
function formatDate(value) {
var date = new Date(value);
var y = date.getFullYear(),
m = date.getMonth() + 1,
d = date.getDate(),
h = date.getHours(),
i = date.getMinutes(),
s = date.getSeconds();
if (m < 10) { m = '0' + m; }
if (d < 10) { d = '0' + d; }
if (h < 10) { h = '0' + h; }
if (i < 10) { i = '0' + i; }
if (s < 10) { s = '0' + s; }
var t = y + '-' + m + '-' + d + ' ' + h + ':' + i + ':' + s;
return t;
}
return { payload: formatDate(msg.payload) };
其中的 formatDate() 函數,就是一個js中標準的把當前時間戳轉換為YYYY-mm-dd HHSS格式的函數。
這也是Node-RED的一個強大之處,除了編寫好的控件,還可以使用腳本進行中間過程的處理。
設置好了日期時間轉換,再在其后掛一個text控件,用作顯示即可:
全部設計完成后,點擊右上角的部署,就可以使用手機進行查看了。
在手機上,訪問網址 http://開發板IP:1880/ui ,就能看到如下的界面了:
十一、總結:
這篇分享,基于米爾MYC-J1028X開發板,結合Node-RED,將其變身為工業控制網關。
看到這里,看似分享了不少內容,但涉及到Node-RED的部分,只有Node-RED全部功能的萬分之一都不到,而且都是非常基礎的使用。
對于米爾MYC-J1028X開發板的使用,也是用到了實際功能的百分之一都不到。
Node-RED還有很多很多很多強大的功能,可以方便我們快速的獲取外部設備的數據,并編寫合適的邏輯處理流程來規整數據,并進行數據的呈現,或者對外部設備進行控制。
而這一切,并不需要特別專業的編程技能,就能夠完成。
基于米爾MYC-J1028X開發板強勁的運算能力,以及豐富的外設接口,結合Node-RED所構建的工業控制網關,完全可以應用在實際場合中,發揮重大的作用。
將其部署在工業現場,用于收集、存儲、處理和分析網絡邊緣的數據,能夠減輕對云和數據中心的壓力。
這套系統,可以通過靈活的I/O簡化通信和控制,對數據進行主動采集、解析及過濾、匯聚,來可視化現場數據和控制邏輯,既能方便預測性維護,又能開展實時數據處理與決策。
-
網關
+關注
關注
9文章
4605瀏覽量
51551 -
開發板
+關注
關注
25文章
5128瀏覽量
98323
發布評論請先 登錄
相關推薦
追加名額丨米爾瑞芯微RK3576開發板有獎試用
![追加名額丨<b class='flag-5'>米爾</b>瑞芯微RK3576<b class='flag-5'>開發板</b>有獎試用](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
基于OPENCV的相機捕捉視頻進行人臉檢測--米爾NXP i.MX93開發板
![基于OPENCV的相機捕捉視頻進行人臉檢測--<b class='flag-5'>米爾</b><b class='flag-5'>NXP</b> i.MX93<b class='flag-5'>開發板</b>](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
NXP FRDM-MCXC444開發板在RT-Thread環境下的上手過程
![<b class='flag-5'>NXP</b> FRDM-MCXC444<b class='flag-5'>開發板</b>在RT-Thread<b class='flag-5'>環境</b>下的上手過程](https://file1.elecfans.com/web2/M00/09/55/wKgZomcJ8qyABY71AABFpko_594666.png)
198元,米爾NXP i.MX 93開發板,限購300套
![198元,<b class='flag-5'>米爾</b><b class='flag-5'>NXP</b> i.MX 93<b class='flag-5'>開發板</b>,限購300套](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
ARMxy ARM 物聯網邊緣計算網關支持 Node-RED 用于工業控制
![ARMxy ARM 物聯網邊緣計算<b class='flag-5'>網關</b>支持 <b class='flag-5'>Node-RED</b> 用于<b class='flag-5'>工業</b><b class='flag-5'>控制</b>](https://file1.elecfans.com/web2/M00/04/4A/wKgaombDCd2AAOXOAAQ_5bhIzWA681.png)
米爾基于NXP iMX.93開發板的M33處理器應用開發筆記
![<b class='flag-5'>米爾</b>基于<b class='flag-5'>NXP</b> iMX.93<b class='flag-5'>開發板</b>的M33處理器應用<b class='flag-5'>開發</b>筆記](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
Node-RED初學者教程-三分鐘學習
![<b class='flag-5'>Node-RED</b>初學者教程-三分鐘學習](https://file1.elecfans.com/web2/M00/F3/A9/wKgZomZ9K8iAJEx9AAFuddar79s482.png)
Node-RED安裝本地教程
![<b class='flag-5'>Node-RED</b>安裝本地教程](https://file1.elecfans.com/web2/M00/F2/44/wKgZomZ48jSAYAspAAGqA7WBuU8775.png)
點擊參與米爾NXP i.MX 93開發板有獎試用
![點擊參與<b class='flag-5'>米爾</b><b class='flag-5'>NXP</b> i.MX 93<b class='flag-5'>開發板</b>有獎試用](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
Node-RED實現電表數據采集并上云
![<b class='flag-5'>Node-RED</b>實現電表數據采集并上云](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
米爾NXP i.MX 93開發板的Qt開發指南
![<b class='flag-5'>米爾</b><b class='flag-5'>NXP</b> i.MX 93<b class='flag-5'>開發板</b>的Qt<b class='flag-5'>開發</b>指南](https://file.elecfans.com/web2/M00/08/64/pYYBAGDwFEGADIPWAAFlJOlmLxg664.jpg)
評論