Lora Radio Node

ATmega328 Lora Radio Node

Die Tage kam wieder mal das Bedürfnis auf, die schon lang umher liegenden, nicht genutze Lora Sensor Boards zum laufen zu bringen. In der Vergangenheit bin ich immer gescheitert da zwar der BME280 Sensor erkannt wurde, aber nur ein Datenpaket gesendet wurde. Oft war es auch so dass das Joining nicht funktioniert hat, obwohl der Gateway das Signal erkannt hatte und ein Joining Request abschickte. Es war echt verzwickt dieses Board zum laufen zu bringen. Klar hab ich die Pinbelegung des RFM95 im Arduino IDE eingetragen und verschiedene andere Dinge ausprobiert aber nie funktionierte es.

Die Boards sind wirklich sehr preisgünstig wenn diese in Asien bestellt werden. Da sind Preis von 10,00€ bis 15.00€ Euro fällig. Zusätzlich gibt es die Möglichkeit eine LS 14500 3.7 Volt Batterie zu nutzen. Ein Batteriefach ist auf den Board bereits vorhanden.

  • 2 * I2C Anschlüsse
  • 2 * Analog Port (A0 A1)
  • 2 * Digitale Port (D3 D4)
  • Betrieb 3.7 Volt – 12 Volt
  • RFM95 für 868MHz

Die Spannungsversorgung darf nur über den 2 poligen BY/S8 erfolgen
sonst besteht die Gefahr der Zerstörung.

Was wird benötigt :

  1. Lora Radio Node https://amzn.to/3cGzcyS (*)
  2. BME280 https://amzn.to/2ydoIIs (*)
  3. Verbindungskabel  https://amzn.to/2LAXVc6 (*)
  4. FDTI USB Serial Konverter https://amzn.to/2WEtQij (*)
Atmega328 Lora Node

Der Fehler lag vermutlich an mehreren Stellen. Zum einem an der fehlenden Drahtbrücke “D5 – DI01” und dem falschen PIN Mapping des RFM95 Modul. Es gibt noch viele andere Informationen im Netz, welche nicht funktionierten. Die folgende Konfiguration habe ich auf 3 Boards mit Erfolg getestet.  Dieser Artikel beschreibt die Konfiguration und Einrichtung die getestet ist und funktioniert.

const lmic_pinmap lmic_pins = {
  .nss  = 10,
  .rxtx = LMIC_UNUSED_PIN,
  .rst  = 9,
  .dio = {/*dio0*/ 2, /*dio1*/ 5, /*dio2*/ 6},
};

Hier in diesem Bild sehen wir die Drahtbrücke Rechts in Rot die gelötet werden muss, damit der Node funktioniert.

Als Sensor nutzen wir einen BME280 der Luftdruck, Temperatur und Luftfeuchtigkeit misst. Der Vorteil liegt darin , dass ein zweiter Sensor an den I2C Bus angeschlossen werden kann.

 
Lora Board I2C
#1 Stecker
BM280 Sensor
VCC 3V3 VIN
GND GND
SDA SDA
SCL SCL

 

Bitte Sensor so wie in der Tabelle angezeigt an einen der 4 poligen Steckpfosten anschließen.

Zur Einrichtung der TTN-Console bitte auf den unten stehenden Link klicken.

Einrichtung TTN Applikation und Sensor in der Konsole

Erstellen einer Applikation

Decoder für die TTN-Console :

/********************************************************************* 
* The TTN Payload function equal for all environment applications
**********************************************************************/
function Decoder(bytes, port) {
  var retValue =   { 
    bytes: bytes
  };
      
  retValue.node = bytes[0];
  retValue.battery = bytes[1] / 10.0;
  retValue.vcc = bytes[2] / 10.0;
  retValue.temperature = (((bytes[3] << 8) | bytes[4]) / 10.0) - 40.0;
  retValue.pressure = ((bytes[5] << 16) | (bytes[6] << 8) | bytes[7]); 
  retValue.humidity = ((bytes[8] << 8) | bytes[9]) / 10.0;
  return retValue; 
}

 

FDTI USB Converter
FTDI USB Converter

Zum Programmieren benötigen wir einen FTDI-USB Adapter, der dann mit dem Lora-Board wie folgt verbunden wird, siehe auch Rückseite der Platine des Nodes.

FTDI USB Adapter Lora Board
DTR DTR
RX TX0
TX RXI
VCC 3V3
CTS GND
GND GND

 

 

 

Dann starten wir Arduino IDE und laden uns den Code aus dem Git-Repository :
https://git.unixweb.net/jhummel/Radio-Lora-Node-Atmega328

Das “sensor-abp-ttn.ino” File anklicken und in die IDE importieren.
In der IDE das richtige Board auswählen als “Arduino Pro oder Pro Mini” für 3.3 Volt 8 MHz
NICHT 5 Volt benutzen, Node funktioniert nicht.

Bitte diese Bibliotheken in die Arduino IDE installieren: 

 

Achtung: Damit die Daten in deiner TTN-Console ankommen, müssen die 3 Parameter im Code angepasst werden. Suche die 3 Stellen in der Arduino IDE und ersetze diese aus der TTN-Console.

Werte aus der TTN-Console holen und dort eintragen:

static const PROGMEM u1_t NWKSKEY[16] = { ERSETZEN };
static const u1_t PROGMEM APPSKEY[16] = { ERSETZEN };
static const u4_t DEVADDR = { 0x2601XXXX };

Wenn die Vorbereitungen stimmen und alles richtig gemacht wurde, können wir ans Programmieren gehen. Nun den Arduino Sketch auf das Lora Node Board hochladen. Wenn alles Fehlerfrei hochgeladen wurde, sollten die ersten Daten in der TTN-Console

Die mit Sternchen (*) gekennzeichneten Verweise sind sogenannte Provision-Links. Wenn du auf so einen Verweislink klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine Provision. Weiterführende Infos gibt es hier unter Punkt 8 in der Datenschutzerklärung  https://blog.unixweb.de/datenschutzerklaerung/

Bei Fragen einfach die Kommentarfunktion nutzen.

Viel Spaß beim basteln wünscht , Joachim

6 Kommentare

    1. Hallo Stefan

      weil das Sketch darauf aufbaut mit “LowPower” Library und der Node sonst nicht mehr zurückkommt zur eingestellten Zeit.

      Grüße Joachim

  1. Hallo Joachim.

    habe doch ein kleines Problem, bekomme immer ein Fehler beim Kompilieren.
    Da bekomme ich eine Fehlermeldung.
    Der Sketch verwendet 36910 Bytes (120%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
    Globale Variablen verwenden 2860 Bytes (139%) des dynamischen Speichers, -812 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
    Der Sketch ist zu groß; unter http://www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern.
    Fehler beim Kompilieren für das Board Arduino Pro or Pro Mini.
    Das Board ist richtig gewällt und auf 3.3 Volt 8 Mhz gestellt.
    Sollte eigentlich so sein wie in Ihrer Beschreibung.
    Können Sie mir weiter helfen.

    1. Hallo Marco

      Was noch sein könnte dass Du den falschen Programmer nimmst , schau mal Tools -> Programmer
      Was aber seltsam ist dass Du 36910 Bytes hast und nicht 28326 bytes siehe hier:

      Sketch uses 28326 bytes (92%) of program storage space. Maximum is 30720 bytes.
      Global variables use 1194 bytes (58%) of dynamic memory, leaving 854 bytes for local variables. Maximum is 2048 bytes.

      ————————–
      Compilation complete.

      Nimmst Du die LIBS die ich in meinen Artikel angezeigt sind oder nimmst Du eventuell eine andere LMIC.h als ich und zwar die IBM LMIC framework by IBM ?

      Grüße Joachim

  2. Hallo Joachim,
    durch Deinen Beitrag bin ich auf das genannte Modul aufmerksam geworden, vielen Dank dafür! Beim Versuch, damit das nächste Lorawan-Gateway zu erreichen, sind mir drei Stolpersteine aufgefallen:

    a. Wie schon Marco zuvor geschrieben hatte, war auch bei mir das Programm zu groß für den ATmega328 und konnte so nicht übertragen werden. Grund dafür scheint die Größe der aktuellen Libraries zu sein, speziell die ‘MCCI LoRaWAN LMIC library’ – wenn die in der neuesten Version 3.3.0. verwendet wird, ist das Programm zu groß. Bei mir half das Zurückgehen auf die Version 2.3.2., damit gab es nur eine Warnung.

    b. Bei der genannten Library muss in der Datei ‘lmic_project_config.h’ unbedingt der Eintrag zur Verwendung der in Europa üblichen Frequenz (868MHz) aktiviert werden. Per Default steht hier 915MHz, da sind Aussendungen nicht erlaubt und kommen nicht beim Gateway an. Besonders beim Ausprobieren unterschiedlicher Libs wird hier immer wieder auf die falsche Frequenz zurückgestellt.

    c. Die drei Parameter, die aus der TTN-Console übernommen werden müssen und in Deinen Sketch einzutragen sind (NWKSKEY, APPSKEY, DEVADDR) , müssen in der Version ‘MSB’ verwendet werden. In der TTN-Console werden diese Daten unter dem Eintrag ‘Device Overview’ angezeigt; am Beginn des jeweiligen Eintrages ist ein rechts/links-Pfeil vorhanden, mit dem zwischen LSB/MSB umgeschaltet werden kann. – Diese Einstellung hängt von der verwendeten LMIC-Lib ab, bei manchen Libs muss LSB verwendet werden.

    Als Ergänzung Deiner ausgezeichneten Dokumentation helfen diese Hinweise vielleicht einem Gelegenheitsprogrammierer (wie mir) etwas, sich erfolgreich mit dem TTN zu verbinden. Spaß macht dieses Projekt allemal!

    Beste Grüße, Jürgen

  3. Hallo Joachim,

    erstmal danke für die Antwort. Der Tipp von Jürgen, hatte mich nun zum Erfolg gebracht.
    Das Zurückgehen zur 2.3.2. ‘MCCI LoRaWAN LMIC library’ ist bei mir der Punkt gewesen.
    Nun macht das Board auch was es soll und Übermittelt seiner Wetterdaten an TTN.
    Danke für die Lösung und für das Projekt.

    Beste Grüße, Marco

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.