Node.js & Raspberry Pi & WS2812B RGB LEDs strip All In One
Node.js & Raspberry Pi & WS2812B RGB LEDs strip All In One
Node.js & Raspberry Pi & WS2812B RGB LED 灯带
Node.js
To interface with the GPIO on the Raspberry Pi using Node.js, we will use a Module called "onoff".
# install
$ npm install onoff
https://www.npmjs.com/package/onoff
https://github.com/fivdi/onoff
//include onoff to interact with the GPIO
var Gpio = require('onoff').Gpio;
var LED = new Gpio(18, 'out');
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)
}
}
//run the blinkLED function every 500ms
var blinkInterval = setInterval(blinkLED, 500);
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, 3000); //stop blinking after 3 seconds
https://www.npmjs.com/package/rpi-ws281x-native
GPIO
General Purpose Input Output
Breadboard
面包版
电路连通图解

demos
GPIO channel 占用 bug ❌
RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.

$ ./gpio.py 3
arg1 = 3
⏰ current datetime = 2023-05-13 00:37:25
/home/pi/Desktop/node-led/./gpio.py:28: RuntimeWarning: This channel is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
GPIO.setup(PIN, GPIO.OUT)
n = 3
开始闪烁⏳
i = 0
i = 1
i = 2
结束闪烁 👌🏻
https://raspberrypi.stackexchange.com/questions/55143/gpio-warning-channel-already-in-use
http://raspi.tv/2013/rpi-gpio-basics-3-how-to-exit-gpio-programs-cleanly-avoid-warnings-and-protect-your-pi
GPIO.cleanup() 将您在 RPi.GPIO 中使用的任何 GPIO 设置为 INPUT 模式。
如果该行为是可取的,请在退出脚本之前调用该方法
GPIO.cleanup()
#!/usr/bin/env python3
# coding: utf8
import RPi.GPIO as GPIO
from datetime import datetime
import time
import sys
arg1 = sys.argv[1]
print("arg1 =", arg1);
# shell 获取时间戳 ✅
# SH_DATE=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d %T');
# datetime = $(date '+%Y-%m-%d %T')
# Python 获取时间戳 ✅
now = datetime.now()
# 转换为指定的格式
currentTime = now.strftime("%Y-%m-%d %H:%M:%S")
print("⏰ current datetime =", currentTime);
# $ pinout 命令查看,或 https://pinout.xyz/
# 指定 BCM 模式下的 GPIO 针脚编号是 12
# 对应的物理针脚编号是 32
PIN = 12
# BCM 模式
GPIO.setmode(GPIO.BCM)
# 指定 GPIO 针脚为一个电流输出针脚
GPIO.setup(PIN, GPIO.OUT)
# 输出低电平
GPIO.output(PIN, GPIO.LOW)
# index
i = 0
# 类型转换,str => int
n = int(arg1)
print("n =", n)
print('开始闪烁⏳')
while (i < n):
print("i =", i)
# 高电平,LED 点亮
GPIO.output(PIN, GPIO.HIGH)
# 休眠 1 秒,防止 LED 长时间点亮烧坏了
time.sleep(1.0)
# 低电平,LED 熄灭
GPIO.output(PIN, GPIO.LOW)
# 休眠 1 秒
time.sleep(1.0)
i = i + 1
# 输出低电平,LED 关闭
# GPIO.output(PIN, GPIO.LOW)
# 清除,释放内存
GPIO.cleanup()
print('结束闪烁 👌🏻')
poweroff
$ sudo reboot
$ sudo shutdown -h now
PCB Design Software
Fritzing
https://fritzing.org/

refs
https://www.w3schools.com/nodejs/nodejs_raspberrypi.asp
©xgqfrms 2012-2021
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
未经授权禁止转载,违者必究!