我正在使用带有 LoRa 模块 (SX1276) 的 ESP32 TTGO T-Display,并遇到
LoRa.endPacket()
功能无限期挂起的问题。
硬件:
代码:
// Minimal reproducible example
#include <SPI.h>
#include <LoRa.h>
#define LORA_SCK 5
#define LORA_MISO 19
#define LORA_MOSI 27
#define LORA_CS 18
#define LORA_RST 23
#define LORA_IRQ 26
#define LORA_FREQ 868E6
void setup() {
Serial.begin(115200);
SPI.begin(LORA_SCK, LORA_MISO, LORA_MOSI, LORA_CS);
LoRa.setPins(LORA_CS, LORA_RST, LORA_IRQ);
if (!LoRa.begin(LORA_FREQ)) {
Serial.println("LoRa failed!");
while (1);
}
LoRa.setTxPower(14);
LoRa.setSpreadingFactor(7);
LoRa.setSignalBandwidth(125E3);
}
void loop() {
if (!LoRa.beginPacket()) {
Serial.println("Begin failed");
return;
}
LoRa.print("TEST");
bool success = LoRa.endPacket(); // <-- Hangs here
Serial.println(success ? "OK" : "FAIL");
delay(1000);
}
我尝试过的:
在 endPacket() 周围添加了超时逻辑。 将 TX 功率从 20 减少到 14。 设置最小扩频因子 (7)。 验证所有引脚连接。 尝试了阻塞和非阻塞模式。 代码正确初始化(打印“LoRa init successed”),但在尝试发送第一个数据包时挂起。尝试发送后,串行监视器未显示任何输出。
问题: 可能导致
LoRa.endPacket()
挂起的原因是什么?如何解决此问题?
delay(1000);
可能是问题所在。您接连发送了太多消息。 LoRa 的设计目的不是为了在电波中发送垃圾邮件。