Проблемы с получением (всех) пакетов LoRa
На данный момент я пытаюсь отправить пакеты между одним Heltec WIFI LoRa V2 и другим, читая последовательную линию и отправляя ввод через LoRa.
Маленькие пакеты (например, 30 байт) работают каждый раз, но чем больше становится пакет, тем больше он не будет получаться каждый раз или даже никогда.
Поэтому я пишу небольшой цикл отправки, в котором мой отправитель отправляет на каждой итерации пакет, который каждый раз увеличивается на 10 байт, и, что удивительно, каждый пакет был получен отправителем (я пробовал это до 500 байт).
После этого я хотел отправить 80-байтовое сообщение последовательного ввода, но это не сработало. Вы знаете, в чем проблема?
void setup() {
// ... LoRa.begin(); ....
LoRa.onReceive(onReceive);
// ... LoRa.receive(); ...
}
void onReceive(int packetSize) { // uses the interrupt pin on the dio0
String packet = "";
packSize = String(packetSize,DEC);
for (int i = 0; i < packetSize; i++) {
packet += (char) LoRa.read();
}
Serial.println(packet);
delay(5);
} ```
``` // writer
boolean sendPacket (String packet) {
Serial.println("Send begin");
LoRa.beginPacket(false); // true: optional implicit mode (--> Set everything on both sides?!)
LoRa.setTxPower(14,RF_PACONFIG_PASELECT_PABOOST);
LoRa.print(packet); // also LoRa.write(byte(, length));
LoRa.endPacket(false); // true: async mode: doas not wair until transmission is completed
delay(250);
// put the radio into receive mode
LoRa.receive(); // set redio back in receive mode
delay(750);
Serial.println("Send end");
return true; // will be changed
}
void loop(){
while(Serial.available() > 0 ){
delay(2); //delay to allow byte to arrive in input buffer
String text = Serial.readString();
digitalWrite(LED, HIGH); // turn the LED on (HIGH is the voltage level)
boolean packetSent = false;
while (!packetSent) {
packetSent = sendPacket(text);
if (packetSent) {
Serial.print("Packet has been sent: ");
Serial.println(text);
} else {
Serial.print("Retry sending packet: ");
Serial.println(text);
}
}
digitalWrite(LED, LOW); // turn the LED off (HIGH is the voltage level)
}
} ```