Node.js 树莓派 GPIO - LED 和按钮
使用输入和输出
在上一章中,我们学习了如何使用树莓派及其 GPIO 使 LED 闪烁。
为此,我们使用了 GPIO 引脚作为“输出”。
在本章中,我们将使用另一个 GPIO 引脚作为“输入”。
我们不想让 LED 闪烁 5 秒,而是希望当您按下连接到面包板的按钮时 LED 亮起。
我们需要什么?
在本章中,我们将创建一个简单的示例,我们用一个按钮来控制一个 LED 灯。
为此,您需要
- 安装了 Node.js 的树莓派,配有 Raspian 系统、互联网、SSH
- Node.js 的 onoff 模块
- 1 个 面包板
- 1 个 68 欧姆电阻
- 1 个 1k 欧姆电阻
- 1 个 通孔 LED
- 1 个 按钮开关
- 4 个 母对公跳线
- 1 个 公对公跳线
点击上面的列表中的链接,查看不同组件的描述。
注意:您需要的电阻可能与我们使用的不一样,具体取决于您使用的 LED 类型。大多数小型 LED 只需要一个小电阻,大约 200-500 欧姆。一般来说,电阻值的大小并不重要,但电阻值越小,LED 的亮度就越高。
在本章中,我们将基于上一章构建的电路,因此您会识别出上面列表中的一些部件。
构建电路
现在是时候在面包板上构建电路了。我们将使用 上一章创建的电路 作为起点。
如果您不熟悉电子学,我们建议您关闭树莓派的电源。并使用防静电垫或接地带,以避免损坏树莓派。
使用以下命令正确关闭树莓派
pi@w3demopi:~ $ sudo shutdown -h now
树莓派上的 LED 停止闪烁后,拔掉树莓派的电源插头(或关闭连接到它的电源线)。
如果在没有正确关闭的情况下直接拔掉插头,可能会导致内存卡损坏。
查看上面电路的示意图。
- 从上一章创建的电路开始
在树莓派上,将跳线的母端连接到一个 5V 电源引脚。在我们的示例中,我们使用的是物理引脚 2 (5V,第 1 行,最右边一列) - 在面包板上,将连接到 5V 电源的跳线的公端连接到右边面包板的 电源总线。面包板的整列都是连接在一起的,所以连接到哪一行都没有关系。在我们的示例中,我们把它连接到了第 1 行
- 在面包板上,将按钮连接到沟槽上。在我们的示例中,它连接到第 13 和 15 行,E 和 F 列
- 在面包板上,将 1k 欧姆电阻的一端连接到右边面包板的 地线总线,另一端连接到右边连接到按钮的一侧的连接点的行。在我们的示例中,我们把一端连接到第 13 行,J 列,另一端连接到最近的 地线总线 孔
- 在面包板上,将公对公跳线从右边 电源总线 连接到右边连接到按钮另一侧的连接点的行。在我们的示例中,我们把一端连接到第 15 行,J 列,另一端连接到最近的 电源总线 孔
- 在树莓派上,将跳线的母端连接到一个 GPIO 引脚。在我们的示例中,我们使用的是物理引脚 11 (GPIO 17,第 6 行,最左边一列)
- 在面包板上,将跳线的公端连接到按钮与 地线 连接的另一侧的连接点的行。在我们的示例中,我们把它连接到了第 13 行,A 列
您的电路现在应该已经完成,您的连接应该与上面的示意图非常相似。
现在是时候启动树莓派,并编写 Node.js 脚本与它进行交互了。
树莓派和 Node.js LED 和按钮脚本
转到“nodetest”目录,并创建一个名为 "buttonled.js
" 的新文件
pi@w3demopi:~ $ nano buttonled.js
现在该文件已打开,可以使用内置的 Nano 编辑器进行编辑。
编写或粘贴以下内容
buttonled.js
var Gpio = require('onoff').Gpio; //包含 onoff 模块来与 GPIO 交互
var LED = new Gpio(4, 'out'); //使用 GPIO 引脚 4 作为输出
var pushButton = new Gpio(17, 'in', 'both'); //使用 GPIO 引脚 17 作为输入,并处理按钮按下和释放
pushButton.watch(function (err, value) { //监听按钮 GPIO 上的硬件中断,指定回调函数
if (err) { //如果有错误
console.error('There was an error', err); //在控制台中输出错误消息
return;
}
LED.writeSync(value); //根据按钮状态(0 或 1)打开或关闭 LED
});
function unexportOnClose() { //退出程序时运行的函数
LED.writeSync(0); //关闭 LED
LED.unexport(); //取消导出 LED GPIO 以释放资源
pushButton.unexport(); //取消导出按钮 GPIO 以释放资源
};
process.on('SIGINT', unexportOnClose); //用户使用 ctrl+c 关闭时运行的函数
按 "Ctrl+x
" 保存代码。用 "y
" 确认,用 "Enter
" 确认文件名。
运行代码
pi@w3demopi:~ $ node buttonled.js
现在,当您按下按钮时,LED 应该会亮起,当您松开按钮时,LED 应该会熄灭。
使用 Ctrl+c
结束程序。