LoRa Packet Forwarder JSON Daten
25.12.2024
Elektronik | Funk | Software
Der Technik-Blog
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.
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("");
Damit die übertragene Zahl vom LoRaWAN Netzwerk wieder richtig decodiert werden kann, muss folgender Decoder eingefügt werden:
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
#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; } }
Das ESP32 LoRa Board von Heltec unterstützt LoRa. In diesem Artikel geht es um den Zugang und Datentransfer zu LoRaWAN & TTN
WeiterlesenEinstieg in das LoRaWAN (TTN) mit dem Heltec LoRa32 V3 und Einrichtung vom Board in der Arduino IDE
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved