node.js緩衝區類與node-red向串列埠發資料
遇到的問題是使用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;
更多的變化無非是如何調整邏輯。