nodejs调用本地C扩展实现控制USB继电器

前段时间在树莓派上控制USB继电器,查了下USB继电器提供了在linux下的驱动和操控代码,可以编译成本地程序。但是目前需求是需要使用web页面来访问控制继电器,如何做到呢?这里我想了两个方案。

方案一:shelljs调用本地程序

这个方案说实话相对比较简单,就是使用shelljs来启动本地应用,同时带着参数。但是经过实际测试,每次都需要2s才能完成调用。可能是我的树莓派B+太老了吧,性能比较一般。但是单独运行本地应用,基本是毫秒级别就完成了。所以这个方案就被否决了。

方案二:使用本地C扩展直接驱动继电器

这个方案是我们今天的主角。nodejs本身支持本地扩展,参照官方文档,将在C语言下的函数调用包装成了在javascript下的函数调用

其实整个过程不麻烦,主要代码是要完成从javascript运行环境中得到传递进来的参数,验证参数,再经过C调用,把返回值包裹进v8的返回值对象中,再传回去。

 

详细代码请参照 https://github.com/sharpbai/UI021-usbrelay-node-modules

这个方案的速度非常快,每次调用几乎立即就生效了!