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