在树莓派上使用johnny-five遇阻,求助解决raspi-io兼容问题
树莓派Johnny-Five灯光切换方案(解决raspi-io兼容问题)
一、解决raspi-io依赖缺失与版本兼容问题
1. 切换兼容Node.js版本
raspi-io对v20+的Node.js兼容性不佳,推荐用nvm切换到v18.x版本:
先安装nvm(Node版本管理工具),然后执行:
nvm install 18 nvm use 18
2. 重新安装依赖
在项目根目录执行完整安装命令,避免全局安装导致的模块找不到问题:
npm install johnny-five raspi-io --save
若仍有依赖报错,清理缓存后重装:
npm cache clean --force rm -rf node_modules package-lock.json npm install
3. 替代方案:用pigpio适配高版本Node.js
如果raspi-io仍无法正常使用,改用pigpio(兼容v20+ Node.js):
npm install johnny-five pigpio --save
二、灯光切换代码实现
方案1:基于raspi-io(版本兼容时)
假设LED接GPIO17(对应物理引脚11):
const five = require("johnny-five"); const Raspi = require("raspi-io"); const board = new five.Board({ io: new Raspi() }); board.on("ready", () => { const led = new five.Led("P1-11"); let isOn = false; // 每秒切换一次LED状态 setInterval(() => { isOn = !isOn; isOn ? led.on() : led.off(); console.log(`LED: ${isOn ? '开启' : '关闭'}`); }, 1000); });
方案2:基于pigpio(高版本Node.js)
const five = require("johnny-five"); const { Gpio } = require("pigpio"); const board = new five.Board({ io: { digitalWrite(pin, value) { const gpio = new Gpio(pin); gpio.mode(Gpio.OUTPUT); gpio.digitalWrite(value ? 1 : 0); } } }); board.on("ready", () => { const led = new five.Led(17); let isOn = false; setInterval(() => { isOn = !isOn; isOn ? led.on() : led.off(); console.log(`LED: ${isOn ? '开启' : '关闭'}`); }, 1000); });
三、必要配置
- 启用树莓派GPIO:执行
raspi-config,选择Interfacing Options -> GPIO -> Enable。 - 运行脚本需sudo权限:
sudo node your-script.js
内容的提问来源于stack exchange,提问作者An Trieu
相关产品推荐
相关产品推荐

