M5Stack LoRaWAN Modul

Den M5Stack hatte ich ja bereits vorgestellt und nun ist auch das LoRaWAN Zusatzmodul bei mir eingetroffen. Natürlich musste ich es sofort testen. Eines vorab, es funktioniert und ich bin sehr zufrieden.

Übersicht M5Stack LoRaWAN Modul

Das Modul kommt in einer kleinen Box und bietet fast alles was wir benötigen. In dem Modul arbeitet ein RHF76-052 von RisingHF, welcher per UART angesteuert wird. Der Chip unterstützt 433/470MHz und 868/915MHz. Eine Antenne für 433MHz ist bereits eingebaut und eine Antenne für 868MHz kann über einen MCX-Stecker angeschlossen werden. Hierfür gibt es auch Adapter um seine SMA-Antenne zu verwenden. Darin liegt auch ein Nachteil des Moduls. Das GPS Modul hat den Anschluss für die externe Antenne an der gleichen Stelle und deshalb ist zwischen Den Buchsen auch nicht viel Platz. Somit muss eine externe Antenne über eine Verlängerung angeschlossen werden. Ich verwende einen MCX-SMA-Adapter und dazu eine SMA-Verlängerung und habe noch fast 2mm Luft.

Das Modul bietet Lötpads um den UART-Port auf GPIO 16/17 oder GPIO 2/5 zu legen. Ich verwende GPIO 2/5, da mein GPS-Modul bereits GPIO 16/17 belegt. Die Entwickler haben auch an 5 zusätzliche Lötpads gedacht (unter dem LoRaWAN-Schriftzug) um die Firmware das Modems zu aktualisieren. Die „üppige“ Verwendung des Heißklebers finde ich etwas unschön, damit die Module sauber zusammenpassten musste ich auch einen verirrten Tropfen entfernen. Ansonsten habe ich aber nichts auszusetzen.

Verwendung des M5Stack LoRaWAN Moduls

Da lag nun also ein Modul vor mir, mit einem LoRaWAN-Modem mit dem ich vorher nicht gearbeitet habe. Seeeduino verwendet das gleiche Modem und die Macher des M5Stack haben wohl auch die Library von Seeeduino verwendet. Daher war die Fallhöhe nicht so hoch und ich konnte vorhandene beispiele anpassen und verwenden.

Dabei haben mir jedoch zwei Bugs in der Seeeduino Library das Leben schwer gemacht. Aber dank Serial.print() und Google habe ich es irgendwie geschafft die Fehler zu finden und zu beheben.

  1. In den transferPacket Funktionen ist eine for Schleife verbaut in der i als unsigned char deklariert ist. Dieses führte bei mir dazu, dass der Loop oft zwischen 0 und 254 durchlief und nichts mehr passierte. Der Loop wurde nicht verlassen und für mich sah es so aus, als ob der Node eingefroren war. Nachdem ich i als Integer deklariert habe, war der Fehler verschwunden.
  2. Der zweite Bug hat sich ebenfalls in den transferPacket Funktionen versteckt. Mittels sprintf() wird der Buffer in das char temp geschrieben. Dieses war aber zu klein deklariert, wodurch es zum Buffer Overflow kam und gelegentlich nicht alle Daten übertragen wurden, sondern nur Teile.

Zusätzlich habe ich die Library um folgende Punkte erweitert:

  1. Über die Funktion lora.transferPacketLinkCheckReq(), wird ein LinkCheckReq MAC Command abgesetzt, als Antwort erhalten wir die Anzahl der Gateways, welche das Paket empfangen haben.
  2. Neben dem genannten Gateway Count, liefert lora.receivePacket() nun auch den SNR mit.

Daher habe ich alles auf GitHub gepackt, damit wir es alle einfacher haben. Beispiele für ABP und OTAA sind dort ebenfalls vorhanden und auch noch ein Sketch der das Zusammenspiel mit dem GPS-Modul zeigt.

Empfangenes Paket mit einem RSSI von -44 und einem SNR von 7.0 Die Nachricht wurde von einem Gateway empfangen.

Performance

Ich habe den Node mit meinem Mapping-Node (RFM95W) verglichen und habe eigentlich identische Werte erhalten. Mal war der Eine besser, mal eben der Andere. Im Rahmen der Messgenauigkeit sind für mich beide gleichwertig. Somit kann ich nichts schlechtes über das verbaute Modem sagen.

Firmware update des LoRaWAN-Moduls

Der LoRaWAN Stack steckt im Modem und dadurch wird uns auch Arbeit abgenommen. Glücklicherweise kann die Firmware des Modems upgedatet werden. Dafür sind extra fünf Lötpunkte vorhanden, mit denen ihr das Modem mit einer neuen Firmware betanken könnt. Die aktuelle Firmware (2.1.19) könnt ihr euch bei Seeeduino herunterladen. Unter Windows benötigt ihr noch ExtraPuTTY.

Ich habe mir eine Stiftleiste an die betreffenden Punkte angelötet und dann mittels USB-UART-Adapter das Update eingespielt. Damit der RHF in den DFU-Modus wechselt, musst ihr den EN-Pin auf Groud legen, und danach mit Strom versorgen. Die kleine LED am Rand des RHF beginnt danach ganz schwach (ganz ganz schwach) zu blinken und ihr könnt die Verbindung zwischen EN und Masse wieder trennen.

Nun wechselt ihr zu Extra PuTTY und baut eine serielle Verbindung mit 115200 auf. Wenn ihr den DFU-Modus erfolgreich aktiviert habt,werden euch lauter Cs in dem Terminal begrüßen. Nun könnt ihr per Ymodem File Transfer die Firmware hochladen. Das Terminal bestätigt euch auch das erfolgreiche Update. Wenn ihr dann wieder alles zusammengebaut habt, wird euch das RHF auch mit der neuen Versionsnummer begrüßen.

Aussicht

Ich bin aktuell dabei meinen Field Tester zu programmieren. Das Grundgerüst ist schon fertig, aber es kommen mir immer wieder neue Ideen hinzu. Sobald ich das Projekt grundsätzlich abgeschlossen habe, werde ich euch berichten und das Projekt vorstellen. Einen Vorgeschmack liefert bereits das Foto im Abschnitt Verwendung.

6 Gedanken zu „M5Stack LoRaWAN Modul“

  1. Hallo Björn

    Danke für das Tutorial!
    Ich versuche gerade das LoraWan M5 Modul mit deiner SW zum laufen zu bringen…..
    Als Infrastruktur habe ich einen Raspi RAK2245 Gateway am laufen.
    Ich habe beide Programme ABP.ino und OTAA.ino einzeln ausprobiert. Der Bildschirm bleibt bei beiden Programmen leer.
    In der TTN Console sehe im Traffic dass Packete gesendet werden. Mit dem OTAA Programm sehe ich in der Console join Versuche.
    Welches Program muss ich aufspielen um die gleichen Informationen auf dem Bildschirm zu haben wie bei dir auf der Webseite zu sehen ist? Muss ich noch etwas zusätzlich unternehmen damit das Gerät ins TTN Netzwerk senden kann?

    Gruss, Mario

    Antworten
    • Hallo,

      mit UIFlow habe ich mich bisher nur marginal beschäftigt. Möglich ist da bestimmt was.
      Dieses Blog ist jedoch rein privat und ich verkaufe daher nichts, bzw. schalte auch keine Werbung.

      Grüße,
      Björn

      Antworten
    • Hallo Achim,

      such mal nach Heltec CubeCell. Das ist der verbaute Chip. Zusammen mit dem obigen Beispiel sollte es klappen.
      Ansonsten kann ich zu dem Board noch nichts sagen.

      Grüße Björn

      Antworten

Schreibe einen Kommentar