树莓派3与Node-RED搭配Grove电容式湿度传感器报错求助
问题描述
树莓派3搭配Grove扩展板、Node-RED开发,已完成DHT11、Ds18b20、继电器的正常连接及手机远程控制,但使用node-red-contrib-grove-capacitive-moisture-sensor节点时服务器崩溃,日志报错:
error: command failed : python -u /home/pi/.node-red/node_modules/node-red-contrib-grove-capacitive-moisture-sensor/grove-capacity-moisture-sensor.py 4 at ChildProcess.exithandler (node:child_process:400:12) at ChildProcess.emit (node:events:513:28) at maybeClose (node:internal/child_process:1093:16) at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5) { code: 2, killed: false, signal: null, cmd: 'python -u /home/pi/.node-red/node_modules/node-red-contrib-grove-capacitive-moisture-sensor/grove-capacitive-moisture-sensor.py 4' }
传感器为模拟设备,连接在A4接口,节点配置(时间戳触发)与其他传感器一致,但无法工作。手动运行对应Python脚本无任何输出:
pi@raspberrypi:~/.node-red/node_modules/node-red-contrib-grove-capacitive-moisture-sensor $ python -u grove-capacitive-moisture-sensor.py 4 pi@raspberrypi:~/.node-red/node_modules/node-red-contrib-grove-capacitive-moisture-sensor $
排查思路
- 检查Python版本与依赖:脚本返回code 2多为参数错误或依赖缺失。先执行
python --version确认版本,Grove脚本通常需要Python3,若当前python指向Python2,改用python3运行脚本测试。 - 验证接口映射关系:Grove扩展板的A4接口对应的ADC通道号可能不是4,查扩展板引脚映射表,确认实际通道号后替换脚本参数重试。
- 检查脚本权限与内容:用
ls -l grove-capacitive-moisture-sensor.py确认脚本有可执行权限,若无则执行chmod +x grove-capacitive-moisture-sensor.py。查看脚本源码,确认是否依赖grove.py库,若缺失则安装。 - 测试ADC基础功能:运行官方测试代码验证A4接口是否正常:
python3 -c "from grove.adc import ADC; adc = ADC(); print(adc.read(4))",若报错则说明ADC硬件或驱动存在问题。
解决方法
- 切换Python版本:
修改Node-RED节点的执行命令,将python替换为python3;或全局设置python指向Python3:sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 1 - 补全依赖与权限:
安装Grove Python库:
给脚本添加执行权限:pip3 install grove.pychmod +x /home/pi/.node-red/node_modules/node-red-contrib-grove-capacitive-moisture-sensor/grove-capacitive-moisture-sensor.py - 修正通道参数:
若扩展板A4对应ADC通道不是4,替换脚本参数为正确值。比如部分扩展板A4对应通道0,执行python3 grove-capacitive-moisture-sensor.py 0测试。 - 自定义读取脚本:
放弃第三方节点,用自定义Python脚本读取数据,通过Node-RED的exec节点调用。示例脚本:from grove.adc import ADC # 替换为实际通道号 CHANNEL = 4 adc = ADC() try: moisture_value = adc.read(CHANNEL) print(moisture_value) except Exception as e: print(f"Error: {str(e)}")
内容的提问来源于stack exchange,提问作者nico Lanseman
相关产品推荐
相关产品推荐

