Lora E220-400T22S与ESP32S接线异常及RF收发失败问题排查
问题排查:Ebyte E220-400T22S LoRa模块与ESP32-S通信故障
问题背景
将搭载在Ebyte E15板的E220-400T22S LoRa模块与ESP32-S连接,尝试基于ESP-IDF LoRa库实现RF收发,但初始化失败(读取寄存器0x42返回0xff);改用UART直连后仍无法收发数据。当前接线及代码如下:
初始接线(LoRa库模式)
- LoRa GND → ESP32-S GND
- LoRa VCC → ESP32-S 5V
- LoRa TXD → ESP32-S P19
- M0、M1 → GND
UART模式接线
- LoRa RXD → ESP32-S GPIO16
- LoRa TXD → ESP32-S GPIO17
- M0、M1 → GND
- 电源、地接线同前
接收端UART代码
#define ECHO_TEST_TXD (17) #define ECHO_TEST_RXD (16) #define ECHO_TEST_RTS (UART_PIN_NO_CHANGE) #define ECHO_TEST_CTS (UART_PIN_NO_CHANGE) #define ECHO_UART_PORT_NUM (UART_NUM_0) #define ECHO_UART_BAUD_RATE (115200) #define BUF_SIZE (1024) void lora_uart() { /* Configure parameters of an UART driver, * communication pins and install the driver */ uart_config_t uart_config = { .baud_rate = ECHO_UART_BAUD_RATE, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_DEFAULT, }; int intr_alloc_flags = 0; #if CONFIG_UART_ISR_IN_IRAM intr_alloc_flags = ESP_INTR_FLAG_IRAM; #endif ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags)); ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config)); ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS)); // Configure a temporary buffer for the incoming data uint8_t *data = (uint8_t *) malloc(BUF_SIZE); while (1) { // Read data from the UART ESP_LOGI(TAG, "Receiving....."); int len = uart_read_bytes(ECHO_UART_PORT_NUM, data, (BUF_SIZE - 1), 20 / portTICK_PERIOD_MS); if (len) { data[len] = '\0'; ESP_LOGI(TAG, "Recv str: %s", (char *) data); } vTaskDelay(1000); } }
发送端UART代码
#define ECHO_TEST_TXD (17) #define ECHO_TEST_RXD (16) #define ECHO_TEST_RTS (UART_PIN_NO_CHANGE) #define ECHO_TEST_CTS (UART_PIN_NO_CHANGE) #define ECHO_UART_PORT_NUM (UART_NUM_0) #define ECHO_UART_BAUD_RATE (115200) #define BUF_SIZE (1024) void lora_uart() { /* Configure parameters of an UART driver, * communication pins and install the driver */ uart_config_t uart_config = { .baud_rate = ECHO_UART_BAUD_RATE, .data_bits = UART_DATA_8_BITS, .parity = UART_PARITY_DISABLE, .stop_bits = UART_STOP_BITS_1, .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, .source_clk = UART_SCLK_DEFAULT, }; int intr_alloc_flags = 0; #if CONFIG_UART_ISR_IN_IRAM intr_alloc_flags = ESP_INTR_FLAG_IRAM; #endif ESP_ERROR_CHECK(uart_driver_install(ECHO_UART_PORT_NUM, BUF_SIZE * 2, 0, 0, NULL, intr_alloc_flags)); ESP_ERROR_CHECK(uart_param_config(ECHO_UART_PORT_NUM, &uart_config)); ESP_ERROR_CHECK(uart_set_pin(ECHO_UART_PORT_NUM, ECHO_TEST_TXD, ECHO_TEST_RXD, ECHO_TEST_RTS, ECHO_TEST_CTS)); // Configure a temporary buffer for the incoming data // uint8_t *data = (uint8_t *) malloc(BUF_SIZE); while (1) { // Write data back to the UART ESP_LOGI(TAG, "Sending....." ); uart_write_bytes(ECHO_UART_PORT_NUM, (const char *) "Hello", 5); ESP_LOGI(TAG, "Wrote data str: %s", (char *) "Hello"); vTaskDelay(1000); } }
故障排查步骤
1. 核心驱动与接线逻辑错误
- 库选型错误:你使用的
esp-idf-sx127x库是针对SPI接口的SX127x系列LoRa模块设计的,但E220-400T22S是UART接口模块,完全不兼容SPI驱动,这是初始化失败的根本原因。 - UART串口冲突:代码中使用
UART_NUM_0,这是ESP32的默认调试串口(用于烧录和日志输出),会导致模块通信与调试输出冲突,建议改用UART_NUM_1或UART_NUM_2。 - 电源负载问题:E220发射时峰值电流约220mA,ESP32的5V引脚输出能力有限,可能导致模块供电不稳。建议改用独立3.3V电源供电,或确认ESP32 5V输出能满足负载需求。
2. 串口参数不匹配
E220模块默认串口参数为9600波特率、8位数据位、1位停止位、无校验,但你的代码设置为115200波特率,这会直接导致串口通信乱码或无法接收。需将ECHO_UART_BAUD_RATE修改为9600。
3. 代码逻辑缺陷
- 接收超时过短:接收端
uart_read_bytes的超时设置为20ms,LoRa透传存在传输延迟,建议修改为1000 / portTICK_PERIOD_MS(1秒),避免错过数据。 - 缺少模块状态检测:E220的AUX引脚是就绪状态指示(高电平=就绪,低电平=忙),建议将AUX引脚接ESP32的GPIO,发送前检测AUX状态,确保模块处于就绪状态。
4. 硬件与模式验证
- 模式引脚确认:M0=0、M1=0是透传模式(默认),需确认引脚确实接地,无虚接;若M1=1,模块会进入AT配置模式,无法正常收发RF数据。
- 天线连接:E220必须接天线才能正常收发,否则信号衰减严重,无法完成通信。
- 硬件检测:用万用表测量模块VCC-GND电压,确保在3.3V~5V范围内;用逻辑分析仪检测UART引脚波形,确认ESP32是否有数据输出、模块是否有数据返回。
修正后的建议方案
- 更换驱动方式:放弃SPI的sx127x库,直接使用ESP-IDF的UART驱动与E220通信。
- 调整接线:
- LoRa VCC → 独立3.3V电源(或ESP32 5V,需确认电流足够)
- LoRa GND → ESP32 GND
- LoRa TXD → ESP32 GPIO16(UART2 RXD)
- LoRa RXD → ESP32 GPIO17(UART2 TXD)
- LoRa M0 → GND
- LoRa M1 → GND
- LoRa AUX → ESP32 GPIO4(可选,用于状态检测)
- 修正串口配置:设置波特率为9600,使用
UART_NUM_2避免调试冲突。 - 优化代码逻辑:延长接收超时时间,添加AUX状态检测逻辑。
内容的提问来源于stack exchange,提问作者Saeed isa
相关产品推荐
相关产品推荐

