Raspberry Pi 3 模型 B 使用 Node.js 的 GPIO
GPIO over Raspberry Pi 3 model B using Node.js
我正在尝试使用 raspberry pi 3 模型 B 来闪烁 LED,
我的机器上安装了所有必需的模块,即 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 i.e pin : 16
gpio.open(16, "output", function (err) {
gpio.read(16, function (err, value) {
console.log("Data is "+ value);
gpio.close(16);
});
});
但是上面的代码在 运行 时抛出错误,
节点app.js
错误:
尝试打开 pin 16 时出错
gpio-admin:无法将数据刷新到 /sys/class/gpio/export:设备或资源繁忙
提前致谢
我可以看到电路图和代码的任何链接。
担心:我不想更改平台,即 node.js
我正在使用的 pi-gpio 是:https://github.com/rakeshpai/pi-gpio
pi-gpio
只是在后台写入 GPIO 设备,因此您可以跳过 node.js
和 pi-gpio
并手动执行相同的操作以进行测试。
示例:
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 身份手动 closing/unexporting 引脚,然后重新运行 脚本。
# 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 的内容。首先按照我编写的顺序在没有 sudo 的情况下测试它们,如果它们不起作用,请尝试使用 sudo。如果它们仍然不起作用,我认为您遇到了 wiring/hardware 问题或需要在其他地方更改一些系统设置。
# 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
让我们使用 'rpio' 模块代替 'pi-gpio'。
https://github.com/jperkin/node-rpio
它在 Pi3、零等上工作正常
由于 pi-gpio 已经修复了新旧系统路径(issue# https://github.com/rakeshpai/pi-gpio)
但是依赖于quick2wire-gpio-admin库
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
我正在尝试使用 raspberry pi 3 模型 B 来闪烁 LED,
我的机器上安装了所有必需的模块,即 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 i.e pin : 16
gpio.open(16, "output", function (err) {
gpio.read(16, function (err, value) {
console.log("Data is "+ value);
gpio.close(16);
});
});
但是上面的代码在 运行 时抛出错误,
节点app.js
错误: 尝试打开 pin 16 时出错 gpio-admin:无法将数据刷新到 /sys/class/gpio/export:设备或资源繁忙
提前致谢
我可以看到电路图和代码的任何链接。
担心:我不想更改平台,即 node.js
我正在使用的 pi-gpio 是:https://github.com/rakeshpai/pi-gpio
pi-gpio
只是在后台写入 GPIO 设备,因此您可以跳过 node.js
和 pi-gpio
并手动执行相同的操作以进行测试。
示例:
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 身份手动 closing/unexporting 引脚,然后重新运行 脚本。
# 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 的内容。首先按照我编写的顺序在没有 sudo 的情况下测试它们,如果它们不起作用,请尝试使用 sudo。如果它们仍然不起作用,我认为您遇到了 wiring/hardware 问题或需要在其他地方更改一些系统设置。
# 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
让我们使用 'rpio' 模块代替 'pi-gpio'。
https://github.com/jperkin/node-rpio
它在 Pi3、零等上工作正常
由于 pi-gpio 已经修复了新旧系统路径(issue# https://github.com/rakeshpai/pi-gpio)
但是依赖于quick2wire-gpio-admin库
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