Node.js 树莓派(Raspberry Pi) GPIO - 闪烁 LED
使用 GPIO 进行输出
在本章中,我们将使用树莓派(Raspberry Pi) 及其 GPIO 使 LED 闪烁。
我们使用带有 onoff 模块的 Node.js 来控制 GPIO。
要打开 LED 灯,我们将 GPIO 引脚用作 "Output",并创建一个脚本来打开和关闭它(闪烁)。
我们需要什么?
在本章中,我们将创建一个控制 LED 灯的简单示例。
为此,您需要:
- 一个带有 Raspian、互联网、SSH 和 Node.js 的树莓派(Raspberry Pi)
- The onoff module for Node.js
- 1 x Breadboard
- 1 x 68 Ohm resistor
- 1 x Through Hole LED
- 2 x Female 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) 上,将第一根跳线的母腿连接到 Ground。您可以使用任何 GND 引脚。在此示例中,我们使用了物理引脚 9(GND,第 5 行,左列)
- 在电路板上,将第一根跳线的公腿连接到右侧的 Ground Bus 列。电路板的整个列都是连接的,所以哪一行都没有关系。在此示例中,我们将其附加到第 1 行
- 在树莓派(Raspberry Pi) 上,将第二根跨接电缆的母腿连接到 GPIO 引脚。在此示例中,我们使用了物理引脚 7(GPIO 4,第 4 行,左列)
- 在电路板上,将第二根跳线的公腿连接到您选择的 Tie-Point 行。在此示例中,我们将其连接到第 5 行 A 列
- 在电路板上,将电阻的一条腿连接到右侧的 Ground Bus 列。电路板的整个列都是连接的,所以哪一行都没有关系。在本例中,我们将其附加到第 5 行
- 在电路板上,将电阻器的另一条腿连接到您选择的右侧连接点行。在这个例子中,我们使用了第 5 行,第 J 列
- 在电路板上,将 LED 的阴极脚(最短的脚)连接到将电阻从 GND 连接到的同一 Tie-Point 行。在此示例中,我们使用了第 5 行,第 F 列
- 在电路板上,将 LED 的阳极腿(最长的腿)连接到您将跳线从 GPIO 引脚连接到的同一 Tie-Point 行.在这个例子中,我们使用了第 5 行,E 列
您的电路现在应该已经完成,您的连接应该与上图非常相似。
现在是时候启动树莓派(Raspberry Pi),并编写 Node.js 脚本与之交互了。
树莓派(Raspberry Pi) 和 Node.js 闪烁 LED 脚本
现在我们已经完成了所有设置,我们可以编写一个脚本来打开和关闭 LED。
首先创建一个目录来保存我们的 Node.js 脚本:
pi@w3demopi:~ $ mkdir nodetest
转到我们的新目录:
pi@w3demopi:~ $ cd nodetest
现在我们将使用 Nano 编辑器创建一个名为"blink.js
"的新文件:
pi@w3demopi:~ $ nano blink.js
文件现已打开,可以使用内置 Nano 编辑器进行编辑。
编写或粘贴以下代码:
blink.js
var Gpio = require('onoff').Gpio; //include onoff to interact with the GPIO
var LED = new Gpio(4, 'out');
//use GPIO pin 4, and specify that it is output
var
blinkInterval = setInterval(blinkLED, 250); //run the blinkLED function every
250ms
function blinkLED() { //function to start blinking
if (LED.readSync() ===
0) { //check the pin state, if the state is 0 (or off)
LED.writeSync(1);
//set pin state to 1 (turn LED on)
} else {
LED.writeSync(0);
//set pin state to 0 (turn LED off)
}
}
function endBlink()
{ //function to stop blinking
clearInterval(blinkInterval); // Stop blink intervals
LED.writeSync(0); // Turn LED off
LED.unexport(); // Unexport GPIO
to free resources
}
setTimeout(endBlink, 5000); //stop blinking
after 5 seconds
按 "Ctrl+x
" 保存代码。 用 "y
" 确认,用 "Enter
" 确认名字。
运行代码:
pi@w3demopi:~ $ node blink.js
现在 LED 应闪烁 5 秒(10 次),然后再次关闭!