GPIO通过使用Node.js的Raspberry Pi 3模型B.

我试图眨眼使用覆盆子pi 3模型B,

我已经在我的机器上安装了所有必需的模块,即npm,nodejs,pi-gpio(修复了检测gpio的小改动)

代码是:

var gpio = require("pi-gpio"); gpio.open(16, "output", function(err) { gpio.write(16, 1, function() { gpio.close(16); }); }); //reading the data on the pin ie pin : 16 gpio.open(16, "output", function (err) { gpio.read(16, function (err, value) { console.log("Data is "+ value); gpio.close(16); }); }); 

但是上面的代码在运行时会抛出错误,

节点app.js

错误: 尝试打开引脚16时出错gpio-admin:无法将数据刷新到/ sys / class / gpio / export:设备或资源忙

提前致谢

任何链接,我可以看到电路图和代码。

担心:我不想更改平台,即node.js

我正在使用的pi-gpio是: https : //github.com/rakeshpai/pi-gpio

pi-gpio只是在后台写入GPIO设备,所以你可以跳过node.jspi-gpio ,手动进行testing。

例:

 gpio.open(16, ... # is the same as writing in terminal: echo 16 > /sys/class/gpio/export 

 ... "output" ... # is the same as writing in terminal: echo "out" > /sys/class/gpio/gpio16/direction 

等等

首先,尝试重新启动Pi,看看是否照顾到这个问题。

如果没有帮助,请尝试以root身份手动closures/取消导出引脚,然后重新运行脚本。

 # unexport the pin as root in case something's holding on to it sudo echo 16 > /sys/class/gpio/unexport 

下面的命令基本上构成了pi-gpio API。 这些行是你将放在一个shell脚本来控制你的GPIO。 首先按照我写的顺序testing它们,如果它们不起作用,请尝试使用sudo。 如果他们仍然不工作,我认为你有一个布线/硬件问题,或需要改变其他地方的一些系统设置。

 # unexport the pin sudo echo 16 > /sys/class/gpio/unexport # export it again sudo echo 16 > /sys/class/gpio/export # make it an output sudo echo "out" > /sys/class/gpio/gpio16/direction # write a HIGH - is the LED on now? sudo echo 1 > /sys/class/gpio/gpio16/value # read the value of the pin - is it 1 after writing a 1 to the pin? cat /sys/class/gpio/gpio16/value # write a LOW - did it turn off? sudo echo 0 > /sys/class/gpio/gpio16/value 

由于pi-gpio已经修复了旧的和新的sysPath(issue# https://github.com/rakeshpai/pi-gpio

但是它依赖于quick2wire-gpio-admin lib。

所以quick2wire-gpio-admin需要小的修复程序

 git clone https://github.com/quick2wire/quick2wire-gpio-admin.git cd quick2wire-gpio-admin 

src/gpio-admin.c

 int size = snprintf(path, PATH_MAX, "/sys/devices/virtual/gpio/gpio%u/%s", pin, filename); 

用。。。来代替 :

 int size = snprintf(path, PATH_MAX, GPIO_CLASS_PATH "gpio%u/%s", pin, filename); 

然后转到cd quick2wire-gpio-admin目录

然后sudo make uninstall

 sudo make install 

然后它运行良好。

代码如下:(文件名:blinking12.js)

 var gpio = require("pi-gpio"); var intervalId; var durationId; var gpioPin = 12; gpio.open(gpioPin, "output", function (err) { var on =1 ; console.log("GPIO pin "+gpioPin+" is open toggling LED every 100mS for 10s"); intervalId = setInterval( function () { gpio.write(gpioPin, on, function () { on = (on + 1)% 2; }); }, 100); }); durationId = setTimeout (function () { clearInterval(intervalId); clearTimeout(durationId); console.log('10 seconds blinking completed'); gpio.write(gpioPin, 0, function () { gpio.close(gpioPin); //process.exit(0); }); }, 10000); 

运行代码:

 node blinking12.js 

在我的机器上输出:

 GPIO pin 12 is open toggling LED every 100mS for 10s 10 seconds blinking completed 

我们使用'rpio'模块而不是'pi-gpio'。

https://github.com/jperkin/node-rpio

它在Pi3,零等工作正常