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.js
和pi-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