我从同一个地方得到了两个相同的 Arduino Nano 克隆(CH340),带有 RA-02 LoRa 模块。我正在使用 Esplora 库中的 LoRaReceiver 和 LoRaSender 草图(刚刚将频率更改为 433)
接收者: '''
#include <SPI.h>
#include <LoRa.h>
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Receiver");
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Received packet '");
// read packet
while (LoRa.available()) {
Serial.print((char)LoRa.read());
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
}
}
'''
发件人:'''
#include <SPI.h>
#include <LoRa.h>
int counter = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Sender");
if (!LoRa.begin(433E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
}
void loop() {
Serial.print("Sending packet: ");
Serial.println(counter);
// send packet
LoRa.beginPacket();
LoRa.print("hello ");
LoRa.print(counter);
LoRa.endPacket();
counter++;
delay(5000);
}
'''
注意没有使用电位器。 它在死亡之前会收到随机数量的消息。它仍然消耗电流,因此模块必须工作(TX 空闲时约为 5mA,发送时约为 130mA,而 RX 始终约为 5mA)。每个模块均通过 2 个(3.3V DC2DC 100mA 模块)供电,每个 RA-02 的总电流为 200mA。这些 DC2DC 的电源取自 arduino 的 5V,该 arduino 通过 USB 连接到我的桌面。
重新启动后(更改显示器的带宽并将其设置回 9600),它会在很短的时间内再次开始接收。再次冻结之前平均大约有 7 条消息。
上周与我的一位朋友进行了大量测试后,我们决定尝试使用更大的板来接收,因为发送并没有停滞。他建议使用 Arduino Mega,但由于我桌上有一个 4GB RPi,我们决定将其连接起来。
它没有问题,所以如果有人遇到此类问题,我建议尝试模板(这样你就会留下足够的可用空间),如果可能的话使用更大的板。
PI 接收了大约一个小时,没有任何问题。
如果使用 PI,我还会使用 htop 来查看内存是否有任何问题:]
我只需要使用
sudo apt-get install python3-pip
或 sudo apt-get install python-pip
安装 pip3 (我使用 python3)。其他一切均按指南中的“原样”进行。
我找到了解决办法!!!
很多人都经历过这种情况,但到目前为止还没有人找到解决方案: https://arduino.stackexchange.com/questions/94389/lora-sx1278-stops-receiving-after-a-short-time https://github.com/sandeepmistry/arduino-LoRa/issues/447 https://github.com/HelTecAutomation/Heltec_ESP32/issues/61
这是一个很好的解决方法,但对于 SEMTECH 来说了解为什么会发生这种情况也没什么坏处 并且他会给我们官方的解决方案,或者修复他芯片中的缺陷。
// ============================================================================
// Each time the OnReceive callback is called there is a small error chance
// this could be approximately every 1000, 3000 or sometimes 10000 calls.
// ----------------------------------------------------------------------------
// When this happens the DIO0 interrupt pin remains stuck high
// with a voltage fixed to 3.3V and interrupt receiving no longer works.
// ----------------------------------------------------------------------------
// To correct this problem we test in the loop() if the DIO0_PIN is HIGH
// and in this case we redo all the initializations.
// ============================================================================
// ============================================================================
// RESTART RECEIVER INTERRUPT IF LOCKED
// This function must be called periodically from the loop()
// ============================================================================
void RestartReceiverInterruptIfLocked()
{
if (digitalRead(DIO0_PIN) == HIGH)
{
RTX_Init();
}
}
// ============================================================================
// RTX INIT
// ============================================================================
void RTX_Init()
{
// ---------------------------------------------- BEGIN
while (!LoRa.begin(RTX_FREQUENCY))
{
Serial.println("Error initializing LoRa module");
delay(100);
}
// ---------------------------------------------- SETTINGS
LoRa.setTxPower(17); // do here your additional settings
// ---------------------------------------------- REGISTER CALLBACK
LoRa.onReceive(RTX_OnReceive);
// ---------------------------------------------- START RECEIVE
LoRa.receive();
}