如何用Node.js结合Raspberry Pi 3与5V继电器实现灯具通断控制?
Node.js控制树莓派3继电器实现灯具开关方案
嘿,我之前也用Node.js折腾过树莓派控制继电器,完全懂你找了一周示例却跑不起来的崩溃!既然Python已经搞定,转Node.js其实很简单,我给你一套亲测可行的步骤,跟着来绝对没问题:
第一步:安装靠谱的GPIO控制库
推荐用onoff这个库,它是树莓派GPIO控制里最稳定、文档最清晰的Node.js库之一,比一些小众库靠谱多了。在树莓派的终端里运行:
npm install onoff
第二步:确认硬件接线(对应你的图)
先确认你的继电器和树莓派的接线(断电操作!安全第一):
- 继电器的
VCC接树莓派的5V引脚(物理引脚2或4) - 继电器的
GND接树莓派的GND引脚(比如物理引脚6) - 继电器的
IN接树莓派的任意GPIO引脚,我这里用BCM编号17(对应物理引脚11,你可以根据自己的接线调整) - 继电器输出端:家用灯具的火线接继电器的
NO(常开端),继电器公共端COM接灯具一端,零线直接接灯具另一端
第三步:基础开关控制代码
先写个最简单的测试代码,验证继电器能正常工作:
const Gpio = require('onoff').Gpio; // 初始化GPIO:BCM17引脚,输出模式,初始电平为低(继电器断开,灯具关闭) const relay = new Gpio(17, 'out', 'low'); // 打开灯具(继电器闭合) function turnLightOn() { relay.writeSync(1); console.log('灯具已打开 ✅'); } // 关闭灯具(继电器断开) function turnLightOff() { relay.writeSync(0); console.log('灯具已关闭 ❌'); } // 测试:打开5秒后自动关闭 turnLightOn(); setTimeout(turnLightOff, 5000); // 程序退出时清理GPIO资源(重要,避免引脚占用) process.on('SIGINT', () => { relay.unexport(); console.log('已释放GPIO资源,程序退出'); process.exit(); });
运行代码的时候需要注意:访问树莓派GPIO需要root权限,所以要用sudo运行:
sudo node relay-control.js
第四步:进阶:Web远程控制(可选)
如果想通过手机或电脑远程控制,加个简单的Web服务就行,用express框架:
首先安装express:
npm install express
然后写Web控制代码:
const express = require('express'); const Gpio = require('onoff').Gpio; const app = express(); const port = 3000; const relay = new Gpio(17, 'out', 'low'); // 打开灯具接口 app.get('/light/on', (req, res) => { relay.writeSync(1); res.send('<h1>灯具已打开 ✅</h1>'); }); // 关闭灯具接口 app.get('/light/off', (req, res) => { relay.writeSync(0); res.send('<h1>灯具已关闭 ❌</h1>'); }); // 查询灯具状态接口 app.get('/light/status', (req, res) => { const status = relay.readSync() ? '打开' : '关闭'; res.send(`<h1>当前灯具状态:${status}</h1>`); }); // 启动服务器 app.listen(port, () => { console.log(`控制服务器已启动,访问地址:http://你的树莓派IP:${port}`); }); // 退出时清理GPIO process.on('SIGINT', () => { relay.unexport(); process.exit(); });
运行后,在浏览器里输入http://树莓派IP:3000/light/on就能打开灯具,输入/light/off关闭,非常方便!
常见坑点提醒
- GPIO编号问题:
onoff用的是BCM编号(树莓派的GPIO编号),不是物理引脚编号,别搞混了! - 权限问题:必须用
sudo运行Node程序,否则会提示无法访问GPIO - 继电器触发电平:有些继电器是低电平触发,那初始化的时候要改成
'high',如果你的继电器接上去没反应,试试调整初始电平 - 电源问题:如果继电器带动的灯具功率较大,树莓派的5V引脚可能供电不足,这时候需要给继电器加外部5V电源
内容的提问来源于stack exchange,提问作者Cristian Muscalu
相关产品推荐
相关产品推荐

