Erste Versuche mit LoRa (ohne WAN) und Node 2 Node Verbindungen

Im April hatte ich mich auf eins von der Fa. Thomas Krenn ausgelobten Developer Kits für IoT-Entwicklungen beworben. Diese Kits setzen sich zusammen aus jeweils zwei Boards mit ESP32-Mikrocontroller, LoRa-Modul, OLED-Display und WiFi-, Bluetooth- und Micro-USB-Interface sowie die passenden USB-Anschlusskabel. Weiterhin ist auch ein BME280 Sensor zum Messen von Temperatur, Luftdruck und Luftfeuchtigkeit dabei. Bei den 2 Microcontrollern handelt es sich um die bekannten Heltec Lora32 V2 Controller.

Wie sich herausstellen sollte, hatte ich diesmal Glück. Anfang Mai klingelte der Briefträger und überreichte mir eins dieser Kits. Vielen Dank dafür an dieser Stelle an die Firma Thomas Krenn. Ich habe mich sehr darüber gefreut.

TK_Box.jpg

Praktisch, dass Thomas Krenn auf ihrer Website auch eine Schritt-für-Schritt-Anleitung zur Installation und Programmierung mittels Arduino-IDE veröffentlicht hat. Selbst fertig vorbereitete Sketche sind dort verfügbar, jeweils einer für Transceiver und einer für den Receiver. Somit war es klar, dass ich gleich mal die Arduino IDE geladen und die Sketche auf die Heltec V2 Controller gespielt habe.

Beide Sketche funktionieren auf Anhieb. Der Transceiver liest den BME280 Sensor aus, zeigt die gemessenen Werte auf dem Display an und sendet sie in einem String per LoRa an den Receiver. Danach fällt der Transceiver in einen zweiminütigen Tiefschlaf.

Auf dem Receiver wird der String ausgepackt und auf dem Display angezeigt.

Bis zu diesem Punkt brauchte ich nicht eine Zeile Code schreiben. Es war alles zum Test vorbereitet.

Schnell kam bei mir aber der Wunsch auf, noch weitere Transceiver Microcontroller im neuen Haus zu verteilen, um einen Überblick über die Restfeuchte aus der Bauphase des Hauses zu bekommen. Natürlich sollten die Messwerte der einzelnen im Haus verteilten Sensoren auch in die bestehende NodeRED, Influx-DB und Grafana Umgebung aufgenommen werden.

Gesagt, getan.

Dafür schaute ich mir die Sketche etwas genauer an und merkte, dass es nur ein paar Erweiterungen bedurfte, damit der Receiver auch mehr als einen Transceiver erkennen und verarbeiten konnte.

Auf der sendenen Transceiver-Seite musste nur eine kleine Ergänzung (String “Wohnzimmer”) im LoRa Message-String aufgenommen werden, damit der empfangene Transceiver erkennen kann, wer die Daten geschickt hat.

Serial.print("Sending Complete Data: ");
  LoRaMessage = String(temperature) + "/" + String(humidity) + "/" + String(pressure) + "/" + String("Wohnzimmer");
  Serial.println(LoRaMessage);

Auf der empfangenen Receiver-Seite waren die Änderungen/Ergänzungen am Code schon etwas umfangreicher.

Dort musste das Script zuerst einmal um WiFI- und MQTT Fähigkeiten erweitert werden. Dann war auch noch eine Routine für das Erkennen des sendenden Nodes und eine Routine für die MQTT Client.Publish Befehle zu schreiben.


  // Hier wird der passende Raum-Bezeichner aus der Variable "feld4" (Location) ermittelt und dann der ganze MQTT-Aufruf zusammengesetzt

  String temp_PreFix1 = "sensors/BME280/Temperatur/";
  String ort1 = feld4;
  String myString1 = temp_PreFix1 + ort1;
  const char * msg1 = myString1.c_str ();

  String temp_PreFix2 = "sensors/BME280/Luftfeuchte/";
  String ort2 = feld4;
  String myString2 = temp_PreFix2 + ort2;
  const char * msg2 = myString2.c_str ();

  String temp_PreFix3 = "sensors/BME280/MBar/";
  String ort3 = feld4;
  String myString3 = temp_PreFix3 + ort3;
  const char * msg3 = myString3.c_str ();

  String temp_PreFix4 = "sensors/BME280/Ort/";
  String ort4 = feld4;
  String myString4 = temp_PreFix4 + ort4;
  const char * msg4 = myString4.c_str ();

  String temp_PreFix5 = "sensors/BME280/Quality/";
  String ort5 = feld4;
  String myString5 = temp_PreFix5 + ort5;
  const char * msg5 = myString5.c_str ();


  connectToMQTT();

  client.publish (msg1, String(feld1).c_str());
  client.publish (msg2, String(feld2).c_str());
  client.publish (msg3, String(feld3).c_str());
  client.publish (msg4, String(feld4).c_str());
  client.publish (msg5, String(rxquality).c_str());
  
}

Mit diesen Änderungen ist der Receiver Controller in der Lage, den jeweils sendenden Transceiver eindeutig zu erkennen und die übermittelt bekommenen Messwerte in die geweils zuständigen MQTT Topics zu versenden.

Diese hier beschriebene LoRa Umgebung läuft hier bei mir jetzt seit mehreren Tagen quasi fehlerfrei. Ab und an resettet der Receiver kurz (um diesen Fehler habe ich mich noch nicht gekümmert), ist dann aber nach ganz kurzer Zeit wieder zum Empfang von gesendeten LoRa Paketen bereit.

8 Antworten auf „Erste Versuche mit LoRa (ohne WAN) und Node 2 Node Verbindungen“

  1. Gratuliere dazu und schönen Dank,

    ähnlich einfaches, möglichst auch Bezahlbares suche ich schon lange.
    Macht es noch Sinn mich an diese Fa. Krenn zu wenden ?

    Schöne Grüße
    wowo

      1. Fa Krenn Aktion angefragt.

        Evtl. schickst du mir die genauen Bezeichnungen der einzelnen Geräte/Boards für Alibaba, Banggood oder andere.

        LG
        wolle

        1. Die Controller heissen: Heltec WiFi LoRa 32 ESP32 Micro-USB 5V USB, LiPo LoRa (SX1276, 868MHz), OLED 64×128 Pixels.

          Wichtig ist hierbei, dass das Modell mit 868 MHz. ausgewählt wird. Es gibt auch welche mit 433 MHz. Die passen aber nicht.

          Dann brauchst Du noch einen BME280 Sensor.

  2. Habe übrigens noch eine Arduino Uno und Raspberry Zero im Schrank.

    CO2 Ampel für die Schulen zum Selberbauen schon bekannt ?

    LG
    ww

Schreibe einen Kommentar zu Wolfgang Wobdo Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.