You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

64位树莓派4B上Node-RED RFM69Radio模块安装失败求助

问题:64位Raspi OS下无法安装node-red-contrib-rfm69radio模块

之前在32位Raspi OS的树莓派上使用node-red-contrib-rfm69radio 1.0.1节点多年,重装64位Raspi OS并安装Node-RED后,无论通过调色板菜单还是终端操作,该模块均安装失败。已提前安装pigpio、spi-device和onoff(均可正常运行),也尝试过无依赖安装,但问题未解决。由于模块近4年未更新,怀疑是与64位系统、npm、Node.js版本不兼容导致。目前需要接收RFM69Radio消息以获取多个Moteinos设备的数据,急需解决方案。

安装错误日志

martin@raspberrypi:~ $ npm -g install node-red-contrib-rfm69radio
npm ERR! code 1
npm ERR! path /home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device
npm ERR! command failed
npm ERR! command sh /tmp/install-1c43cb4b.sh
npm ERR! make: Verzeichnis „/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device/build“ wird betreten
npm ERR!   CXX(target) Release/obj.target/spi/src/spi.o
npm ERR!   CXX(target) Release/obj.target/spi/src/spidevice.o
npm ERR!   CXX(target) Release/obj.target/spi/src/open.o
npm ERR!   CXX(target) Release/obj.target/spi/src/close.o
npm ERR!   CXX(target) Release/obj.target/spi/src/transfer.o
npm ERR!   CXX(target) Release/obj.target/spi/src/getoptions.o
npm ERR! make: Verzeichnis „/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device/build“ wird verlassen
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using node-gyp@9.0.0
npm ERR! gyp info using node@16.17.1 | linux | arm64
npm ERR! gyp info find Python using Python version 3.9.2 found at "/usr/bin/python3"
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/martin/.cache/node-gyp/16.17.1/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/home/martin/.cache/node-gyp/16.17.1',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/home/martin/.cache/node-gyp/16.17.1/<(target_arch)/node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! In file included from ../../nan/nan.h:294,
npm ERR!                  from ../src/getoptions.cc:4:
npm ERR! ../../nan/nan_new.h: In instantiation of ‘typename Nan::imp::Factory<T>::return_t Nan::New(A0) [with T = v8::Uint32; A0 = long unsigned int; typename Nan::imp::Factory<T>::return_t = v8::Local<v8::Uint32>]’:
npm ERR! ../src/getoptions.cc:35:65:   required from here
npm ERR! ../../nan/nan_new.h:208:30: error: call of overloaded ‘New(long unsigned int&)’ is ambiguous
npm ERR!   208 |   return imp::Factory<T>::New(arg0);
npm ERR!       |          ~~~~~~~~~~~~~~~~~~~~^~~~~~
npm ERR! In file included from ../../nan/nan_new.h:189,
npm ERR!                  from ../../nan/nan.h:294,
npm ERR!                  from ../src/getoptions.cc:4:
npm ERR! ../../nan/nan_implementation_12_inl.h:177:1: note: candidate: ‘static Nan::imp::FactoryBase<v8::Uint32>::return_t Nan::imp::Factory<v8::Uint32>::New(int32_t)’
npm ERR!   177 | Factory<v8::Uint32>::New(int32_t value) {
npm ERR!       | ^~~~~~~~~~~~~~~~~~~
npm ERR! ../../nan/nan_implementation_12_inl.h:183:1: note: candidate: ‘static Nan::imp::FactoryBase<v8::Uint32>::return_t Nan::imp::Factory<v8::Uint32>::New(uint32_t)’
npm ERR!   183 | Factory<v8::Uint32>::New(uint32_t value) {
npm ERR!       | ^~~~~~~~~~~~~~~~~~~
npm ERR! make: *** [spi.target.mk:121: Release/obj.target/spi/src/getoptions.o] Fehler 1
npm ERR! gyp ERR! build error 
npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2
npm ERR! gyp ERR! stack     at ChildProcess.onExit (/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:513:28)
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
npm ERR! gyp ERR! System Linux 5.15.61-v8+
npm ERR! gyp ERR! command "/home/martin/.config/nvm/versions/node/v16.17.1/bin/node" "/home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /home/martin/.config/nvm/versions/node/v16.17.1/lib/node_modules/node-red-contrib-rfm69radio/node_modules/spi-device
npm ERR! gyp ERR! node -v v16.17.1
npm ERR! gyp ERR! node-gyp -v v9.0.0
npm ERR! gyp ERR! not ok

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/martin/.npm/_logs/2022-09-30T09_22_01_344Z-debug-0.log

解决方案

方案一:降级Node.js到兼容版本

错误日志显示,模块依赖的spi-device在编译时与Node.js 16的V8 API存在类型歧义问题,旧版本的spi-device仅兼容Node.js 14系列:

  • 用nvm降级Node.js:
    nvm install 14.21.3
    nvm use 14.21.3
    
  • 重新安装模块:
    npm -g install node-red-contrib-rfm69radio
    

方案二:手动修复spi-device编译问题

若不想降级Node.js,可手动修改模块内的spi-device代码解决类型歧义:

  1. 下载模块到本地并解压:
    npm download node-red-contrib-rfm69radio
    tar -xf node-red-contrib-rfm69radio-1.0.1.tgz
    cd package/node_modules/spi-device
    
  2. 编辑src/getoptions.cc第35行,将原代码中的Nan::New(value)修改为Nan::New(static_cast<uint32_t>(value)),明确类型转换;
  3. 重新编译并安装:
    npm install
    cd ../../..
    npm install -g ./package
    

方案三:替换为替代方案

由于原模块多年未维护,可采用更稳定的替代方式:

  • 使用Python脚本接收RFM69数据,再传递给Node-RED:
    1. 安装Python的rfm69库,编写接收脚本:
      from rfm69 import RFM69
      import time
      
      radio = RFM69(freq=433.0, node_id=1, network_id=100, cs_pin=8, reset_pin=25)
      radio.set_power_level(10)
      
      while True:
          packet = radio.receive(timeout=5.0)
          if packet:
              # 将数据发送到MQTT或写入本地文件,供Node-RED读取
              print(f"Received data: {packet}")
      
    2. 在Node-RED中通过exec节点调用该脚本,或用MQTT节点实现数据传递。

内容的提问来源于stack exchange,提问作者martin_pi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 20:00:58