Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Node.js 树莓派 GPIO - LED 和按钮


使用输入和输出

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

为此,我们使用了 GPIO 引脚作为“输出”。

在本章中,我们将使用另一个 GPIO 引脚作为“输入”。

我们不想让 LED 闪烁 5 秒,而是希望当您按下连接到面包板的按钮时 LED 亮起。


我们需要什么?

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

为此,您需要

点击上面的列表中的链接,查看不同组件的描述。

注意:您需要的电阻可能与我们使用的不一样,具体取决于您使用的 LED 类型。大多数小型 LED 只需要一个小电阻,大约 200-500 欧姆。一般来说,电阻值的大小并不重要,但电阻值越小,LED 的亮度就越高。

在本章中,我们将基于上一章构建的电路,因此您会识别出上面列表中的一些部件。


构建电路

现在是时候在面包板上构建电路了。我们将使用 上一章创建的电路 作为起点。

如果您不熟悉电子学,我们建议您关闭树莓派的电源。并使用防静电垫或接地带,以避免损坏树莓派。

使用以下命令正确关闭树莓派

pi@w3demopi:~ $ sudo shutdown -h now

树莓派上的 LED 停止闪烁后,拔掉树莓派的电源插头(或关闭连接到它的电源线)。

如果在没有正确关闭的情况下直接拔掉插头,可能会导致内存卡损坏。

Raspberry Pi 3 with Breadboard. LED and Button circuit

查看上面电路的示意图。

  1. 从上一章创建的电路开始
    在树莓派上,将跳线的母端连接到一个 5V 电源引脚。在我们的示例中,我们使用的是物理引脚 2 (5V,第 1 行,最右边一列)
  2. 在面包板上,将连接到 5V 电源的跳线的公端连接到右边面包板的 电源总线。面包板的整列都是连接在一起的,所以连接到哪一行都没有关系。在我们的示例中,我们把它连接到了第 1 行
  3. 在面包板上,将按钮连接到沟槽上。在我们的示例中,它连接到第 13 和 15 行,E 和 F 列
  4. 在面包板上,将 1k 欧姆电阻的一端连接到右边面包板的 地线总线,另一端连接到右边连接到按钮的一侧的连接点的行。在我们的示例中,我们把一端连接到第 13 行,J 列,另一端连接到最近的 地线总线
  5. 在面包板上,将公对公跳线从右边 电源总线 连接到右边连接到按钮另一侧的连接点的行。在我们的示例中,我们把一端连接到第 15 行,J 列,另一端连接到最近的 电源总线
  6. 在树莓派上,将跳线的母端连接到一个 GPIO 引脚。在我们的示例中,我们使用的是物理引脚 11 (GPIO 17,第 6 行,最左边一列)
  7. 在面包板上,将跳线的公端连接到按钮与 地线 连接的另一侧的连接点的行。在我们的示例中,我们把它连接到了第 13 行,A 列

您的电路现在应该已经完成,您的连接应该与上面的示意图非常相似。

现在是时候启动树莓派,并编写 Node.js 脚本与它进行交互了。



树莓派和 Node.js LED 和按钮脚本

转到“nodetest”目录,并创建一个名为 "buttonled.js" 的新文件

pi@w3demopi:~ $ nano buttonled.js

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

编写或粘贴以下内容

buttonled.js

var Gpio = require('onoff').Gpio; //包含 onoff 模块来与 GPIO 交互
var LED = new Gpio(4, 'out'); //使用 GPIO 引脚 4 作为输出
var pushButton = new Gpio(17, 'in', 'both'); //使用 GPIO 引脚 17 作为输入,并处理按钮按下和释放

pushButton.watch(function (err, value) { //监听按钮 GPIO 上的硬件中断,指定回调函数
  if (err) { //如果有错误
    console.error('There was an error', err); //在控制台中输出错误消息
  return;
  }
  LED.writeSync(value); //根据按钮状态(0 或 1)打开或关闭 LED
});

function unexportOnClose() { //退出程序时运行的函数
  LED.writeSync(0); //关闭 LED
  LED.unexport(); //取消导出 LED GPIO 以释放资源
  pushButton.unexport(); //取消导出按钮 GPIO 以释放资源
};

process.on('SIGINT', unexportOnClose); //用户使用 ctrl+c 关闭时运行的函数

按 "Ctrl+x" 保存代码。用 "y" 确认,用 "Enter" 确认文件名。

运行代码

pi@w3demopi:~ $ node buttonled.js

现在,当您按下按钮时,LED 应该会亮起,当您松开按钮时,LED 应该会熄灭。

使用 Ctrl+c 结束程序。


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.