Testen von LoRa / LoRaWAN RN2483-Funkmodems. Teil 1, LoRa

Eine der interessanten Technologien des „Internet der Dinge“ ist das LoRa / LoRaWAN-Netzwerk, aber in Runet werden sie praktisch nicht beschrieben. Es ist Zeit, diese Lücke zu schließen, und umso interessanter ist es, zu „leben“, wie es funktioniert.



Was ist LoRa?


Dies ist Semtechs proprietäre Long Range-Kommunikationstechnologie, die in den Chips SX1272 und SX1276 implementiert ist. LoRa ist ein Low-Level-Protokoll, über das übergeordnete Protokolle wie LoRaWAN implementiert werden können.

Ein Merkmal des LoRa-Standards ist die Übertragung kleiner Datenpakete mit geringem Stromverbrauch. Laut Hersteller kann die Reichweite im Freien 10 km erreichen und die Batterielebensdauer kann mehrere Jahre betragen. Die Betriebsfrequenzen variieren je nach Land und betragen 433 oder 868 MHz (EU-Version) oder 915 MHz (USA-Version).

Wie funktioniert es Details unter dem Schnitt.

Zum Testen wurden RN2483-Module ausgewählt. Sie sind gut, weil sie einfach zu programmieren sind und verschiedene Betriebsarten unterstützen. Der RN2483 enthält den SX1276-Chip und den Controller in einem Gehäuse. Er wird über UART-Befehle gesteuert, mit denen Sie ihn an jedes Gerät (PC, Arduino, Mikrocontroller usw.) anschließen können. Sie können ein Modul ohne Umreifung kaufen, es ist billiger, aber es war zu faul zum Löten, daher wurde bei eBay ein Satz vorgefertigter Platinen bestellt.

Auf diese Weise können Sie die Module über USB und jedes Gerät an einen PC anschließen.

Datenübertragung


Für die Übertragung wurde ein einfaches Python-Programm geschrieben:
Quellcode
import serial
from time import sleep

def deviceSend(device, cmd):
        try:
	  print cmd
          device.write(cmd + "\r\n")
          line = device.readline()
          if line is not None and len(line) > 0: 
            r = line.decode('utf-8').strip()
            print "> " +r        
            return
        except Exception as e:
	  pass

if __name__ == "__main__":
  port = serial.Serial(port="COM20", baudrate=57600, timeout=5)
  deviceSend(port, "sys reset")
  sleep(2)
  deviceSend(port, "mac pause")
  deviceSend(port, "radio set freq 868000000")
  # Output power, -3..15
  deviceSend(port, "radio set pwr -3")
  deviceSend(port, "radio set mod lora")
  # sf12, sf7  
  deviceSend(port, "radio set sf sf7")
  # Bandwidth: with 125KHz the sensitivity is better but time on air is longer. Chip is capable from 125KHz to 500KHz.
  deviceSend(port, "radio set bw 125")
  deviceSend(port, "radio tx 0123456789")
  sleep(0.5)                             
  line = port.readline()
  print line.strip()
  deviceSend(port, "mac resume")


Wir werden die Hauptparameter genauer analysieren.
pwr - Leistung, kann im Bereich variieren -3..15dB
Frequenz - Übertragungsfrequenz
Mac Pause - Deaktivieren des Lorawan-Modus, Übertragungsmodus zwischen zwei Geräten ist aktiviert (p2p)
tx - Datenpaket-
Mod - Modulationstyp. Es stehen 2 Typen zur Verfügung, lora oder fsk.
Die Bandbreite des bw- Spektrums kann 125, 250, 500 kHz betragen.
sf - Spread-Faktor, beeinflusst die Übertragungsdauer.
So sieht das Spektrum mit sf7 und sf12 bei gleicher Datenmenge aus.


Wie Sie sehen, werden die Daten in kurzen Blöcken übertragen. Die maximale Paketgröße beträgt nicht mehr als 255 Byte. Nach Abschluss der Übertragung erhält das Modem eine Bestätigung, dass die Daten gesendet wurden.

Datenempfang


Für den Empfang müssen die gleichen Parameter wie für die Übertragung eingestellt werden, da sich die Modems sonst nicht „hören“. Der Code ist unten angegeben, das Programm "hört" in einer Endlosschleife auf die Daten an der seriellen Schnittstelle.

Quellcode
import serial
from time import sleep

def deviceSend(device, cmd):
        try:
	  print cmd
          device.write(cmd + "\r\n")
          line = device.readline()
          if line is not None and len(line) > 0: 
            r = line.decode('utf-8').strip()
            print "> " +r        
            return r
        except Exception as e:
	  pass
        return ""

if __name__ == "__main__":
  port = serial.Serial(port="COM20", baudrate=57600, timeout=5)
  deviceSend(port, "sys reset")
  sleep(2)
  deviceSend(port, "mac pause")
  deviceSend(port, "radio set freq 868000000")
  # Output power, -3..15dB
  deviceSend(port, "radio set pwr -3")
  deviceSend(port, "radio set mod lora")
  # sf12, sf7  
  deviceSend(port, "radio set sf sf7")
  # Bandwidth: with 125KHz the sensitivity is better but time on air is longer. Chip is capable from 125KHz to 500KHz.
  deviceSend(port, "radio set bw 125")
  # WDT: 5s wait for each data
  deviceSend(port, "radio set wdt 5000")

  print "Start listening"
  try:
     while True:
       ans = deviceSend(port, "radio rx 0")
       if ans == "ok":
         r = port.readline().strip()
         if r != "err" and len(r) > 0:
           print "> " + r
	 # We need time to prepare RN2483 for the next receiving
         sleep(0.1)

  except KeyboardInterrupt:
     pass

  deviceSend(port, "mac resume")


Wie Sie sehen, ist alles einfach und die Verwendung eines Modems unterscheidet sich nicht von anderen seriellen Übertragungen. Der Programmcode (mit leichten Verbesserungen) wurde auf dem Raspberry Pi gestartet, der Datenempfang ist auf dem Bildschirm zu sehen.


Es gibt viele verschiedene Befehle zum Konfigurieren des RN2483. Sie finden sie im PDF-Handbuch „RN2903 LoRa Technology Module Command Reference User's Guide“. Für eine ungefähre Bewertung des Ergebnisses können Sie auch das Programm Semtech Lora Calculator herunterladen , mit dem Sie verschiedene Einstellungen (Spektrumsbreite, Frequenz usw.) eingeben und das Ergebnis anzeigen können - Bitrate, Stromverbrauch, Akkulaufzeit.

Beispielsweise beträgt die versprochene Betriebszeit des SX1276-Chips von einer 1000-mAh-Batterie etwa 30 Tage, wenn sie in Blöcken von 8 Bytes mit einem Intervall von 100 Sekunden und einer Leistung von 10 dBm übertragen wird.

Für eine praktische Reichweitenkontrolle wurde eines der Modems am Fenster in der Wohnung gelassen, das zweite an den Raspberry Pi angeschlossen und auf die Straße gebracht. Einige Quellen versprechen eine Reichweite von ca. 3 km in städtischen Gebieten. Das Ergebnis ist leider nicht so gut: In der Praxis wird bei maximaler Leistung und einer Antenne bei 868 MHz das Signal bereits nach ca. 3 Wohngebäuden vollständig gedämpft. Natürlich ist die Reichweite an offenen Orten höher, aber es lohnt sich, um eine Ecke zu biegen, da das Signal sehr schnell verschwindet. Im Allgemeinen kann das Ergebnis von 3 km in der Stadt wahrscheinlich nur erzielt werden, wenn Sie die Antenne auf dem Fernsehturm platzieren. Sie können sich bestenfalls auf 300 m verlassen. Dies ist jedoch angesichts der geringen Leistung des übertragenen Signals nicht so schlimm.

Ausgabepreis


Informationen für diejenigen, die Experimente wiederholen oder LoRa in ihren Entwürfen verwenden möchten. Der Preis für den Satz von 2 gebrauchsfertigen rn2483-Modems bei eBay beträgt 80 EUR. Das Modul mit dem gelöteten SX1276 kann separat bei Verkäufern aus China für 12 US-Dollar versandkostenfrei erworben werden. Der SX1276-Chip ohne Umreifung kann dort für 9 US-Dollar gekauft werden (der im Artikel beschriebene Code ist nur für RN2483 geeignet, wenn der SX1276-Chip verwendet wird, muss er auf einer niedrigeren Ebene programmiert werden).

Schlussfolgerungen


LoRa-Geräte sind eine bequeme und schlüsselfertige Lösung für die langsame Übertragung kleiner Datenmengen über relativ große Entfernungen (Hunderte von Metern-Kilometern). LoRa-Geräte sind für einen geringen Stromverbrauch optimiert, sodass sie mit Batterien oder Akkus betrieben werden können (die Gebühr hierfür ist jedoch eine niedrige Datenübertragungsrate). Wenn ein Landwirt beispielsweise die Temperatur in Gewächshäusern auf einem Heimdisplay anzeigen möchte, ist dies eine nahezu ideale Anwendung für LoRa - kleine Datenmengen, große Entfernungen und direkte Sichtbarkeit von Objekten. Modems können auch in großen Räumen verwendet werden - Hangars, Fabriken, in denen es schwierig oder teuer ist, den Draht zu den Sensoren zu ziehen, und das Datenvolumen gering ist. Es ist möglich, zu Hause zu verwenden,Die hohe Empfindlichkeit der Module ermöglicht die Verwendung auch kurzer Antennen in Form eines "Zickzacks" auf der Leiterplatte. In der Stadt hängt die Qualität der Kommunikation stark vom Vorhandensein von Funksichtbarkeit zwischen den Antennen, der Höhe der Antennen usw. ab. Viele sind jetzt sehr von den Fähigkeiten der "globalen" LoraWAN-Netzwerke inspiriert. Das Problem der Platzierung der Antennen wird jedoch für die Reichweite in einem solchen Netzwerk sehr kritisch sein. Dies gilt jedoch für alle Funkübertragungssysteme, sodass das Wunder hier nicht geschah.Dies gilt für jedes Funkübertragungssystem, daher geschah das Wunder hier nicht.Dies gilt für jedes Funkübertragungssystem, daher geschah das Wunder hier nicht.

Im nächsten Teil wird über die Verbindung des RN2483 mit dem LoRaWAN-Netzwerk gesprochen.

Weitere Informationen finden Sie unter den folgenden Links:
- RN2483-Datenblatt
ww1.microchip.com/downloads/en/DeviceDoc/40001784B.pdf
- LoRa-FAQ
www.link-labs.com/lora-faqs
- Semtech SX1272
www.semtech.com/wireless -rf / rf-transceivers / sx1272
- Semtech LoRa Calculator
www.semtech.com/apps/filedown/down.php?file=SX1272LoRaCalculatorSetup1%271.zip

Bibliotheken für die Arbeit mit RN2483 auf Raspberry Pi und Arduino finden Sie auf github.

Source: https://habr.com/ru/post/de398229/


All Articles