Проблемы с получением (всех) пакетов 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)
  }   
} ```

0 ответов

Другие вопросы по тегам