Node.js 树莓派(Raspberry Pi) GPIO - 闪烁 LED

使用 GPIO 进行输出

在本章中,我们将使用树莓派(Raspberry Pi) 及其 GPIO 使 LED 闪烁。

我们使用带有 onoff 模块的 Node.js 来控制 GPIO。

要打开 LED 灯,我们将 GPIO 引脚用作 "Output",并创建一个脚本来打开和关闭它(闪烁)。


我们需要什么?

在本章中,我们将创建一个控制 LED 灯的简单示例。

为此,您需要:

单击上面列表中的链接了解不同组件的说明。

注释:您需要的电阻器可能与我们使用的电阻器不同,具体取决于您使用的 LED 类型。 大多数小型 LED 只需要一个小电阻,大约 200-500 欧姆。 您使用的确切值通常并不重要,但电阻值越小,LED 就会越亮。


构建电路

现在是时候在我们的电路板上构建电路了。

如果您不熟悉电子产品,我们建议您关闭树莓派(Raspberry Pi) 的电源。 并使用防静电垫或接地带,以免损坏它。

使用以下命令正确关闭树莓派(Raspberry Pi) :

pi@w3demopi:~ $ sudo shutdown -h now

在树莓派(Raspberry Pi) 上的 LED 停止闪烁后,从树莓派(Raspberry Pi) 上拔下电源插头(或关闭它所连接的电源板)。

在没有正常关机的情况下拔掉插头可能会导致存储卡损坏。

树莓派(Raspberry Pi) 3 with Breadboard. Simple LED circuit

看上面的电路图。

  1. 在树莓派(Raspberry Pi) 上,将第一根跳线的母腿连接到 Ground。您可以使用任何 GND 引脚。在此示例中,我们使用了物理引脚 9(GND,第 5 行,左列)
  2. 在电路板上,将第一根跳线的公腿连接到右侧的 Ground Bus 列。电路板的整个列都是连接的,所以哪一行都没有关系。在此示例中,我们将其附加到第 1 行
  3. 在树莓派(Raspberry Pi) 上,将第二根跨接电缆的母腿连接到 GPIO 引脚。在此示例中,我们使用了物理引脚 7(GPIO 4,第 4 行,左列)
  4. 在电路板上,将第二根跳线的公腿连接到您选择的 Tie-Point 行。在此示例中,我们将其连接到第 5 行 A 列
  5. 在电路板上,将电阻的一条腿连接到右侧的 Ground Bus 列。电路板的整个列都是连接的,所以哪一行都没有关系。在本例中,我们将其附加到第 5 行
  6. 在电路板上,将电阻器的另一条腿连接到您选择的右侧连接点行。在这个例子中,我们使用了第 5 行,第 J 列
  7. 在电路板上,将 LED 的阴极脚(最短的脚)连接到将电阻从 GND 连接到的同一 Tie-Point 行。在此示例中,我们使用了第 5 行,第 F 列
  8. 在电路板上,将 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 次),然后再次关闭!