Events

:

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden

    Der Technik-Blog

    Dragino LA66 LoRaWAN Shield Arduino Code

    Dragino LA66 Beispielcode

    Alex @ AEQ-WEB

    Das Dragino LA66 LoRaWAN Shield ist ein einfaches LoRaWAN Modul für das Arduino Uno Board. Vorteil von diesem Shield ist, dass die gesamte Hardware und Software für LoRaWAN bereits on Board ist und damit ein Einstieg in LoRaWAN sehr schnell und einfach möglich ist. Die Kommunikation erfolgt über Softwareserial, daher werden lediglich zwei I/O-Pins (Tx, Rx) benötigt und somit auch nur sehr wenig Speicher vom Arduino Uno belegt. Die Anleitung zur Inbetriebnahme gibt es in diesem YouTube Video.

    Werbung:

    Modifizierter Beispielcode

    Der originale Beispielcode von Dragino wurde so erweitert, dass regelmäßig ein 16-Bit Integer (12450) gesendet wird. Die originale Zeile:

    ss.println("AT+SENDB=0,2,4,11223344");//confirm status,Fport,payload length,payload(HEX)
    

    wurde durch folgende Zeilen erweitert:

        uint8_t payload[2];
        int var = 12450;
    
        payload[0] = var >> 8;
        payload[1] = var;
    
        ss.print("AT+SENDB=0,2,");
        ss.print(sizeof(payload));
        ss.print(",");
        for (int i = 0; i < sizeof(payload); i++) {
          ss.print(payload[i], HEX);
        }
        ss.println("");
    

    LoRaWAN Decoder

    Damit die übertragene Zahl vom LoRaWAN Netzwerk wieder richtig decodiert werden kann, muss folgender Decoder eingefügt werden:

    Werbung:

    function Decoder(bytes, port) {
      var decoded_var = bytes[0] << 8 | bytes[1];
    
        return {
          var: decoded_var
        }
    }
    

    Weitere Informationen über die Encodierung und Decodierung von Payload-Daten können in folgenden Artikel nachgelesen werden: So funktioniert die LoRaWAN Payload


    Vollständiger Beispielcode:
    #include <SoftwareSerial.h>
    
    String inputString = "";         // a String to hold incoming data
    bool stringComplete = false;     // whether the string is complete
    
    long old_time = millis();
    long new_time;
    
    long uplink_interval = 30000;
    
    bool time_to_at_recvb = false;
    bool get_LA66_data_status = false;
    
    bool network_joined_status = false;
    
    SoftwareSerial ss(10, 11); // Arduino RX, TX ,
    
    char rxbuff[128];
    uint8_t rxbuff_index = 0;
    
    void setup() {
      // initialize serial
      Serial.begin(9600);
    
      ss.begin(9600);
      ss.listen();
    
      // reserve 200 bytes for the inputString:
      inputString.reserve(200);
    
      ss.println("ATZ");//reset LA66
    }
    
    void loop() {
    
      new_time = millis();
    
      if ((new_time - old_time >= uplink_interval) && (network_joined_status == 1)) {
        old_time = new_time;
        get_LA66_data_status = false;
    
        //ss.println("AT+SENDB=0,2,4,11223344");//confirm status,Fport,payload length,payload(HEX)
    
        uint8_t payload[2];
        int var = 12450;
    
        payload[0] = var >> 8;
        payload[1] = var;
    
        ss.print("AT+SENDB=0,2,");
        ss.print(sizeof(payload));
        ss.print(",");
        for (int i = 0; i < sizeof(payload); i++) {
          ss.print(payload[i], HEX);
        }
        ss.println("");
    
      }
    
      if (time_to_at_recvb == true) {
        time_to_at_recvb = false;
        get_LA66_data_status = true;
        delay(1000);
    
        ss.println("AT+CFG");
      }
    
      while ( ss.available()) {
        // get the new byte:
        char inChar = (char) ss.read();
        // add it to the inputString:
        inputString += inChar;
    
        rxbuff[rxbuff_index++] = inChar;
    
        if (rxbuff_index > 128)
          break;
    
        // if the incoming character is a newline, set a flag so the main loop can
        // do something about it:
        if (inChar == '\n' || inChar == '\r') {
          stringComplete = true;
          rxbuff[rxbuff_index] = '\0';
    
          if (strncmp(rxbuff, "JOINED", 6) == 0) {
            network_joined_status = 1;
          }
    
          if (strncmp(rxbuff, "Dragino LA66 Device", 19) == 0) {
            network_joined_status = 0;
          }
    
          if (strncmp(rxbuff, "Run AT+RECVB=? to see detail", 28) == 0) {
            time_to_at_recvb = true;
            stringComplete = false;
            inputString = "\0";
          }
    
          if (strncmp(rxbuff, "AT+RECVB=", 9) == 0) {
            stringComplete = false;
            inputString = "\0";
            Serial.print("\r\nGet downlink data(FPort & Payload) ");
            Serial.println(&rxbuff[9]);
          }
    
          rxbuff_index = 0;
    
          if (get_LA66_data_status == true) {
            stringComplete = false;
            inputString = "\0";
          }
        }
      }
    
      while ( Serial.available()) {
        // get the new byte:
        char inChar = (char) Serial.read();
        // add it to the inputString:
        inputString += inChar;
        // if the incoming character is a newline, set a flag so the main loop can
        // do something about it:
        if (inChar == '\n' || inChar == '\r') {
          ss.print(inputString);
          inputString = "\0";
        }
      }
    
      // print the string when a newline arrives:
      if (stringComplete) {
        Serial.print(inputString);
    
        // clear the string:
        inputString = "\0";
        stringComplete = false;
      }
    }
    


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    Heltec LoRa32 LoRaWAN Tutorial

    LoRaWAN mit dem Heltec LoRa32 V3

    • Video

    Einstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE

    Weiterlesen
    LoRaWAN - Die Starthilfe

    LoRaWAN - Die Starthilfe für Einsteiger

    Starthilfe LoRaWAN - Diese Seite richtet sich an alle Einsteiger, die mit LoRaWAN starten wollen und ihre Sensoren in das IoT-Netzwerkt TTN integrieren wollen

    Weiterlesen

    Social Media

    YouTube

    Werbung:


    Neue Artikel


    Events

    • Keine zukünftigen Events vorhanden