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;

更多的變化無非是如何調整邏輯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM