Node.js 树莓派(Raspberry Pi) GPIO - LED 和按钮
同时使用输入和输出
在上一章中,我们学习了如何使用树莓派(Raspberry Pi) 及其 GPIO 使 LED 闪烁。
为此,我们将 GPIO 引脚用作 "Output"。
在本章中,我们将使用另一个 GPIO 引脚作为 "Input"。
我们希望 LED 在您按下连接到电路板的按钮时亮起,而不是闪烁 5 秒。
我们需要什么?
在本章中,我们将创建一个简单的示例,使用按钮控制 LED 灯。
为此,您需要:
- 一个带有 Raspian、互联网、SSH 和 Node.js 的树莓派(Raspberry Pi)
- The onoff module for Node.js
- 1 x Breadboard
- 1 x 68 Ohm resistor
- 1 x 1k Ohm resistor
- 1 x Through Hole LED
- 1 x Push Button
- 4 x Female to male jumper wires
- 1 x Male to Male jumper wires
单击上面列表中的链接了解不同组件的说明。
注释:您需要的电阻器可能与我们使用的电阻器不同,具体取决于您使用的 LED 类型。 大多数小型 LED 只需要一个小电阻,大约 200-500 欧姆。 您使用的确切值通常并不重要,但电阻值越小,LED 就会越亮。
在本章中,我们将在上一章构建的电路的基础上进行构建,因此您将认识上面列表中的一些部分。
构建电路
现在是时候在我们的电路板上构建电路了。 我们将使用我们在上一章中创建的电路作为起点。
如果您不熟悉电子产品,我们建议您关闭树莓派(Raspberry Pi) 的电源。 并使用防静电垫或接地带,以免损坏它。
使用以下命令正确关闭树莓派(Raspberry Pi) :
pi@w3demopi:~ $ sudo shutdown -h now
在树莓派(Raspberry Pi) 上的 LED 停止闪烁后,从树莓派(Raspberry Pi) 上拔下电源插头(或转动它所连接的电源板)。
在没有正常关机的情况下拔掉插头可能会导致存储卡损坏。
看上面的电路图。
- 从我们在上一章创建的电路开始:
在树莓派(Raspberry Pi) 上,将跳线的母腿连接到 5V 电源引脚。在我们的示例中,我们使用了物理引脚 2(5V,第 1 行,右列) - 在电路板上,将连接到 5V 电源的跳线的公腿连接到 电源总线 在右侧。电路板的整个列都是连接的,所以哪一行都没有关系。在我们的示例中,我们将其附加到第 1 行
- 在电路板上,连接按钮,使其适合穿过海沟。在我们的示例中,它连接到第 13 行和第 15 行、E 列和 F 列
- 在电路板上,将 1k ohm 电阻的一条腿连接到右侧的 Ground Bus 列,另一条腿连接到右侧的 Tie-Point它连接到按钮右侧腿之一的位置。在我们的示例中,我们将一侧连接到连接点第 13 行 J 列,另一侧连接到最近的 Ground Bus 孔
- 在电路板上,将公对公跳线从右侧 电源总线 连接到连接到另一条腿的右侧 Tie-Point 行按钮。在我们的示例中,我们将一侧连接到连接点第 15 行 J 列,另一侧连接到最近的 电源总线 孔
- 在树莓派(Raspberry Pi) 上,将跳线的母腿连接到 GPIO 引脚。在我们的示例中,我们使用了物理引脚 11(GPIO 17,第 6 行,左列)
- 在电路板上,将跳线的公腿连接到左侧 Tie-Point 排直接穿过 接地 连接腿的按钮腿。在我们的例如,我们将其附加到第 13 行 A 列
您的电路现在应该已经完成,您的连接应该与上图非常相似。
现在是时候启动树莓派(Raspberry Pi),并编写 Node.js 脚本与之交互了。
树莓派(Raspberry Pi) 和 Node.js LED 和按钮脚本
进入 "nodetest" 目录,并创建一个名为 "buttonled.js
" 的新文件:
pi@w3demopi:~ $ nano buttonled.js
文件现已打开,可以使用内置 Nano 编辑器进行编辑。
编写或粘贴以下内容:
buttonled.js
var
Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
var
LED = new Gpio(4, 'out'); //use GPIO pin 4 as output
var pushButton = new
Gpio(17, 'in', 'both'); //use GPIO pin 17 as input, and 'both' button presses,
and releases should be handled
pushButton.watch(function (err, value) {
//Watch for hardware interrupts on pushButton GPIO, specify callback function
if (err) { //if an error
console.error('There was an
error', err); //output error message to console
return;
}
LED.writeSync(value); //turn LED on or off depending on the button state (0 or
1)
});
function unexportOnClose() { //function to run when exiting program
LED.writeSync(0); // Turn LED off
LED.unexport(); // Unexport LED
GPIO to free resources
pushButton.unexport(); // Unexport Button
GPIO to free resources
};
process.on('SIGINT', unexportOnClose); //function to
run when user closes using ctrl+c
按 "Ctrl+x
" 保存代码。 用 "y
" 确认,用 "Enter
" 确认名字。
运行代码:
pi@w3demopi:~ $ node buttonled.js
现在按下按钮时 LED 应该会亮起,松开按钮时 LED 会熄灭。
用 Ctrl+c
结束程序。