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
相关产品推荐
相关产品推荐

