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

求助:Arduino Uno与Raspberry Pi 4的nRF24L01数据传输正确代码

问题解决:nRF24L01 Arduino发射端硬件错误+树莓派接收失败

先解决发射端"hardware error"问题

你的代码里连续调用了两次radio.begin(),这会导致初始化冲突,是触发硬件错误提示的直接原因。同时必须先确认硬件基础配置:

  • nRF24L01必须接3.3V电源,接5V会烧毁模块
  • Arduino Uno与nRF24L01的SPI接线:
    • MOSI → D11
    • MISO → D12
    • SCK → D13
    • CE → D7(代码定义引脚)
    • CSN → D8(代码定义引脚)
  • 建议给nRF24L01模块并联100uF滤波电容,解决电源波动导致的通信不稳定

修正后的Arduino发射端代码

#include <SPI.h>
#include <RF24.h>

// CE、CSN引脚定义
RF24 radio(7, 8);

// 接收端地址,必须和树莓派端完全一致,长度为5字节+1结束符
const byte rxAddr[6] = "00001";

void setup() {
  Serial.begin(9600);
  
  // 仅调用一次初始化,失败则停住排查硬件
  if (!radio.begin()) {
    Serial.println("hardware error");
    while (1);
  }
  
  // 配置参数,需与接收端完全匹配
  radio.setRetries(15, 15);
  radio.setChannel(10);
  radio.setDataRate(RF24_1MBPS);
  radio.setPALevel(RF24_PWR_HIGH);
  
  radio.openWritingPipe(rxAddr);
  radio.stopListening(); // 切换为发射模式
  Serial.println("发射端初始化完成");
}

void loop() {
  const char text[] = "hi";
  // 直接传入text即可,无需取地址
  bool sendSuccess = radio.write(text, sizeof(text));
  
  if (sendSuccess) {
    Serial.println("消息发送成功");
  } else {
    Serial.println("消息发送失败");
  }
  
  delay(1000);
}

树莓派4接收端代码(Python版本)

先安装依赖库:

sudo apt-get install python3-pip
sudo pip3 install adafruit-circuitpython-nrf24l01
sudo pip3 install pigpio

启动pigpio服务(树莓派控制GPIO必需):

sudo pigpiod

接收端代码

import time
import board
import digitalio
from adafruit_nrf24l01 import RF24

# 树莓派SPI引脚映射
CSN = digitalio.DigitalInOut(board.CE1)
CE = digitalio.DigitalInOut(board.D22)
spi = board.SPI()

# 初始化nRF24L01模块
radio = RF24(spi, CSN, CE)

# 接收地址,与Arduino端完全一致
rx_addr = b"00001"

# 配置参数,与发射端完全匹配
radio.channel = 10
radio.data_rate = RF24.RATE_1MBPS
radio.pa_level = RF24.PA_HIGH

# 打开接收管道并切换为监听模式
radio.open_rx_pipe(0, rx_addr)
radio.listen = True

print("接收端等待消息...")

while True:
    if radio.available():
        # 读取并解析消息
        received_data = []
        radio.read(received_data, radio.payload_size)
        message = ''.join(chr(x) for x in received_data if x != 0)
        print(f"收到消息: {message}")
    time.sleep(0.1)

额外排查要点

  • 确保发射端与接收端的信道、地址、数据速率、发射功率完全一致
  • 检查nRF24L01的天线是否安装牢固,避开金属遮挡
  • 若仍有问题,可尝试更换信道(避开WiFi常用的1-11信道)

内容的提问来源于stack exchange,提问作者ALAN C JOHN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:03:19