树莓派3b+用Node.js控制Arduino Uno遇模块缺失及连接超时问题求助
嘿,别担心!新手折腾硬件+JS的时候碰到这些问题太正常了,咱们一步步拆解解决你遇到的两个核心问题:
1. 「Cannot find module 'johnny_five'」错误
这个错误大概率是两个原因之一:
拼写错误(最常见!)
仔细看你的led.js第一行的引入代码——是不是写成了require('johnny_five')?Johnny-Five的正确模块名是johnny-five(用破折号,不是下划线)!把下划线改成破折号,这个问题通常就解决了。
模块未安装到本地项目
如果拼写没问题,那可能你是全局安装的Johnny-Five,但Node.js在你的本地目录(/home/pi)里找不到它。进入/home/pi目录,运行:
npm install johnny-five
把模块安装到本地项目的依赖中,这样Node.js就能正确加载了。要是之前已经全局装过,也可以用npm link johnny-five把全局模块链接到本地。
2. 「Device or Firmware Error」连接超时错误
解决完模块问题后出现的这个错误,是Johnny-Five没法和Arduino建立连接,咱们从这几个方向排查:
确认刷入的Firmata版本
Johnny-Five推荐使用StandardFirmataPlus(不是默认的StandardFirmata),打开Arduino IDE:
- 点击「文件」→「示例」→「Firmata」→「StandardFirmataPlus」
- 确保选中的是你的Arduino Uno板和正确的串口端口,然后点击上传按钮重新刷入固件。
指定正确的串口端口
错误里显示程序在连接/dev/ttyAMA0,但树莓派上Arduino Uno一般会被识别为/dev/ttyUSB0或/dev/ttyACM0。先运行命令查看所有串口设备:
ls /dev/tty*
找到对应的Arduino端口后,在你的代码里手动指定:
const five = require("johnny-five"); const board = new five.Board({ port: "/dev/ttyUSB0" }); // 换成你查到的端口
修复串口权限问题
树莓派默认用户pi可能没有访问串口的权限,把用户加入dialout组:
sudo usermod -a -G dialout pi
执行完后重启树莓派,权限才会生效。
检查硬件连接
- 确保你用的USB线是支持数据传输的(有些廉价线只能充电),换个USB口试试。
- 重新插拔Arduino板,等待几秒钟再运行你的
node led.js程序。
按照上面的步骤一步步来,先解决模块找不到的问题,再处理连接超时的问题,应该就能顺利点亮LED啦!
内容的提问来源于stack exchange,提问作者CrazyNinjaCan15

