Node.js 树莓派(Raspberry Pi) GPIO - LED 和按钮

同时使用输入和输出

在上一章中,我们学习了如何使用树莓派(Raspberry Pi) 及其 GPIO 使 LED 闪烁。

为此,我们将 GPIO 引脚用作 "Output"。

在本章中,我们将使用另一个 GPIO 引脚作为 "Input"。

我们希望 LED 在您按下连接到电路板的按钮时亮起,而不是闪烁 5 秒。


我们需要什么?

在本章中,我们将创建一个简单的示例,使用按钮控制 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. LED and Button circuit

看上面的电路图。

  1. 从我们在上一章创建的电路开始:
    在树莓派(Raspberry Pi) 上,将跳线的母腿连接到 5V 电源引脚。在我们的示例中,我们使用了物理引脚 2(5V,第 1 行,右列)
  2. 在电路板上,将连接到 5V 电源的跳线的公腿连接到 电源总线 在右侧。电路板的整个列都是连接的,所以哪一行都没有关系。在我们的示例中,我们将其附加到第 1 行
  3. 在电路板上,连接按钮,使其适合穿过海沟。在我们的示例中,它连接到第 13 行和第 15 行、E 列和 F 列
  4. 在电路板上,将 1k ohm 电阻的一条腿连接到右侧的 Ground Bus 列,另一条腿连接到右侧的 Tie-Point它连接到按钮右侧腿之一的位置。在我们的示例中,我们将一侧连接到连接点第 13 行 J 列,另一侧连接到最近的 Ground Bus
  5. 在电路板上,将公对公跳线从右侧 电源总线 连接到连接到另一条腿的右侧 Tie-Point 行按钮。在我们的示例中,我们将一侧连接到连接点第 15 行 J 列,另一侧连接到最近的 电源总线
  6. 在树莓派(Raspberry Pi) 上,将跳线的母腿连接到 GPIO 引脚。在我们的示例中,我们使用了物理引脚 11(GPIO 17,第 6 行,左列)
  7. 在电路板上,将跳线的公腿连接到左侧 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 结束程序。