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

ESP8266MOD+RF发射模块与Arduino Nano+RF接收模块通信失败求助

RF发射接收模块通信故障排查(ESP8266发射,Arduino Nano接收)

本人出于学习目的,用ESP8266MOD控制RF发射模块,Arduino Nano控制RF接收模块,通过RadioHead库发送"Hello World"消息,但接收端始终收不到内容。已在代码和RadioHead库中添加调试信息,相关代码及串口输出如下:

ESP8266发射端代码

#include <RH_ASK.h>
#include <SPI.h>

RH_ASK driver(2000, 11, 2, 10, false);

void setup() {
    Serial.begin(9600);
    Serial.println("Starting setup...");

    // if (!driver.init()) {
    //     Serial.println("RH_ASK init failed");
    // } else {
    //     Serial.println("RH_ASK init success");
    // }

    Serial.println("Setup complete");
}

void loop() {
    const char *msg = "Hello World!";
    
    Serial.print("Sending message: ");
    Serial.println(msg);
    
    driver.send((uint8_t *)msg, strlen(msg));

    Serial.println("Waiting for packet to be sent...");
    driver.waitPacketSent();

    Serial.println("Message sent. Waiting for 1000 ms...");
    delay(1000);
}

发射端串口输出

Starting setup...
Setup complete
Sending message: Hello World!
Inside RH_ASK::send
Byte count: 19
Encoded message: E 15 34 34 34 34 D D D D 16 23 1A 19 1A 2A 1A 2A 1A 34 13 D 19 1C 1A 34 1C 13 1A 2A 1A 16 13 E 
Sending symbols: 2A 2A 2A 2A 2A 2A 38 2C E 15 34 34 34 34 D D D D 16 23 1A 19 1A 2A 1A 2A 1A 34 13 D 19 1C 1A 34 1C 13 1A 2A 1A 16 13 E 2C 34 2A 29 
Exiting RH_ASK::send
Waiting for packet to be sent...

Arduino Nano接收端代码

#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile

RH_ASK driver;

void setup()
{
    Serial.begin(9600); // Debugging only
    if (!driver.init())
      Serial.println("init failed");

    Serial.println("init success");
}

void loop()
{
    uint8_t buf[12];
    uint8_t buflen = sizeof(buf);
    if (driver.recv(buf, &buflen)) // Non-blocking
    {
      int i;
      // Message with a good checksum received, dump it.
      Serial.print("Message: ");
      Serial.println((char*)buf);         
    }
}

接收端串口输出

init success

故障排查与修复步骤

  • 恢复发射端初始化检查
    发射端代码注释掉了driver.init()的状态检查,取消这段注释,确认发射模块是否初始化成功:

    if (!driver.init()) {
        Serial.println("RH_ASK init failed");
    } else {
        Serial.println("RH_ASK init success");
    }
    

    若初始化失败,检查ESP8266与RF发射模块的引脚连接是否和代码中指定的(11为数据引脚、2为时钟引脚、10为选通引脚)一致。

  • 统一收发速率参数
    发射端指定了2000bps的通信速率,接收端用默认构造函数的话默认速率是1200bps,速率不匹配会导致接收失败。修改接收端初始化代码,和发射端保持一致:

    // 第二个参数为接收端数据引脚,根据实际硬件接线调整
    RH_ASK driver(2000, 2); 
    
  • 检查硬件匹配性
    确认RF收发模块频率一致(如均为433MHz)、工作电压符合主板要求(ESP8266为3.3V,Arduino Nano为5V),且天线已正确连接,无天线会大幅降低通信可靠性。

  • 增大接收端缓冲区
    RadioHead会为消息添加校验等额外数据,接收端12字节的缓冲区可能不足,建议调整为:

    uint8_t buf[32];
    uint8_t buflen = sizeof(buf);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:43:21