Node.js Raspberry Pi GPIO - LED 闪烁


使用 GPIO 进行输出

在本章中,我们将使用 Raspberry Pi 及其 GPIO 来使 LED 闪烁。

我们使用 Node.js 和 onoff 模块来控制 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 上,将第一条跳线的母腿连接到地面。您可以使用任何接地别针。在此示例中,我们使用物理引脚 9 (接地,第 5 行,左列)
  2. 在面包板上,将第一条跳线的公腿连接到地面巴士右侧的列。面包板的整列都是连接的,所以哪一行并不重要。在此示例中,我们将其附加到第 1 行
  3. 在 Raspberry Pi 上,将第二条跳线的母腿连接到通用输入输出接口别针。在此示例中,我们使用物理引脚 7 (通用输入输出口4,第 4 行,左列)
  4. 在面包板上,将第二条跳线的公腿连接到您选择的连接点行。在此示例中,我们将其连接到第 5 行 A 列
  5. 在面包板上,将电阻器的一个引脚连接到地面巴士右侧的列。面包板的整列都是连接的,所以哪一行并不重要。在此示例中,我们将其附加到第 5 行
  6. 在面包板上,将电阻器的另一条腿连接到您选择的右侧连接点行。在此示例中,我们使用了第 5 行、J 列
  7. 在面包板上,将 LED 的阴极脚(最短的脚)连接到与电阻器连接的同一连接点行接地到。在此示例中,我们使用第 5 行 F 列
  8. 在面包板上,将 LED 的阳极腿(最长的腿)连接到与从连接器连接跳线的同一连接点行。通用输入输出接口固定到。在此示例中,我们使用第 5 行、E 列

您的电路现在应该已经完成​​,并且您的连接应该与上图非常相似。

现在是时候启动 Raspberry Pi 并编写 Node.js 脚本与其交互了。



Raspberry Pi 和 Node.js 闪烁 LED 脚本

现在我们已经完成了所有设置,我们可以编写一个脚本来打开和关闭 LED。

首先创建一个可以保存 Node.js 脚本的目录:

pi@w3demopi:~ $ mkdir nodetest

转到我们的新目录:

pi@w3demopi:~ $ cd nodetest

现在我们将创建一个名为“blink.js“使用 Nano 编辑器:

pi@w3demopi:~ $ nano blink.js

该文件现已打开,可以使用内置的 Nano 编辑器进行编辑。

编写或粘贴以下代码:

眨眼.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 次),然后再次关闭!