node.js缓冲区类与node-red向串口发数据

Posted on 2021-11-28 16:16  fatrabit  阅读(1111)  评论(0编辑  收藏  举报

遇到的问题是使用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;

更多的变化无非是如何调整逻辑。

Copyright © 2025 fatrabit
Powered by .NET 9.0 on Kubernetes