遇到的問題是使用node-red的串口模塊向串口發送16進制數據,控制LED燈。
初學者經常想當然的認為只要msg的payload里放上對應的數就行了。其實不是。
Node-red是node.js環境支撐的物聯網開發工具。自然需要遵循node.js的要求。node.js是在javascript語言基礎上發展的服務器端單線程開發工具。而javascrip最初只是開發前端的工具,不具備服務器端開發的能力。node.js在改進過程中,提供了一個Buffer類,即緩沖區類。提供這個類的目的就是讓開發者在使用node.js進行開發時可以操作內存,進而直接操作二進制數據,就突破了javascript只能操作文本的局限,對於類似圖片、聲音等各種二進制保存的對象就都可以操作了。
Buffer類提供了一系列API來供開發者來創建Buffer實例:
Buffer.alloc(size[,fill[,encoding]]):可以返回一個指定大小的Buffer實例,如果開發者沒有指定fill,則默認填滿0;
Buffer.allocUnsafe(size):作用同上,但是不進行初始化。也就意味着划撥的區域如果前面有進程使用過,里面可能還放着上一個進程使用過的數據。新的進程如果直接使用,可能產生意外的結果。
Buffer.allocUnsafeSlow(size):此方法不同於Buffer.allocUnsafe()方法。在allocUnsafe()方法中,如果緩沖區大小小於4KB,則它會自動從預分配的緩沖區中切出所需的緩沖區,即不會初始化新的緩沖區。通過不分配許多小的Buffer實例來節省內存。但是,如果開發人員需要在一段時間內保留一定數量的開銷內存,則可以使用allocUnsafeSlow()方法。
Buffer.from(array):返回一個唄array的值初始化的新的Buffer實例(傳入的array的元素只能是數字,不然就會自動被0覆蓋)。
Buffer.from(arrayBuffer[,byteOffset[,length]]):返回一個新建的與給定的ArrayBuffer共享同一內存的Buffer。
更多內容可以參看:https://nodejs.org/api/buffer.html#static-method-bufferfromarraybuffer-byteoffset-length
這里用最簡單的一個方式來表達控制LED的方法
var Buffer1=Buffer.from([0x01]);
msg={payload:Buffer1};
return msg;
更多的變化無非是如何調整邏輯。