L'une des technologies intéressantes de «l'Internet des objets» est le réseau LoRa / LoRaWAN, mais dans Runet, elles ne sont pratiquement pas décrites. Il est temps de combler cette lacune, et d'autant plus intéressant d'essayer de «vivre» comment cela fonctionne.
Qu'est-ce que LoRa?
Il s'agit de la technologie de communication longue portĂ©e propriĂ©taire de Semtech implĂ©mentĂ©e dans leurs puces SX1272 et SX1276. LoRa est un protocole de bas niveau sur lequel des protocoles de niveau supĂ©rieur tels que LoRaWAN peuvent ĂȘtre implĂ©mentĂ©s.Une caractĂ©ristique de la norme LoRa est la transmission de petits paquets de donnĂ©es Ă faible consommation d'Ă©nergie. Selon le constructeur, la portĂ©e en plein air peut atteindre 10 km, et la durĂ©e de vie de la batterie peut ĂȘtre de plusieurs annĂ©es. Les frĂ©quences de fonctionnement varient selon les pays et sont de 433 ou 868 MHz (version UE) ou 915 MHz (version USA).Comment ça marche? DĂ©tails sous la coupe.Pour les tests, des modules RN2483 ont Ă©tĂ© sĂ©lectionnĂ©s. Ils sont bons car ils sont faciles Ă programmer et prennent en charge diffĂ©rents modes de fonctionnement. Le RN2483 contient la puce SX1276 et le contrĂŽleur dans un seul boĂźtier, il est contrĂŽlĂ© par des commandes UART, ce qui vous permet de le connecter Ă n'importe quel appareil (PC, Arduino, microcontrĂŽleur, etc.). Vous pouvez acheter un module sans cerclage, c'est moins cher, mais c'Ă©tait trop paresseux pour ĂȘtre soudĂ©, donc un ensemble de quelques planches prĂȘtes Ă l'emploi a Ă©tĂ© commandĂ© sur eBay.
Cela vous permet de connecter les modules à un PC via USB et à n'importe quel appareil.Transfert de données
Un programme Python simple a été écrit pour le transfert:Code sourceimport 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")
deviceSend(port, "radio set pwr -3")
deviceSend(port, "radio set mod lora")
deviceSend(port, "radio set sf sf7")
deviceSend(port, "radio set bw 125")
deviceSend(port, "radio tx 0123456789")
sleep(0.5)
line = port.readline()
print line.strip()
deviceSend(port, "mac resume")
Nous analyserons plus en dĂ©tail les principaux paramĂštres.pwr - puissance, peut varier dans la plage -3..15dBfrĂ©quence - frĂ©quence de transmissionmac pause - dĂ©sactiver le mode lorawan, le mode de transfert entre deux appareils est activĂ© (p2p)tx -mod de paquet de donnĂ©es - type de modulation. 2 types sont disponibles, lora ou fsk.bw - largeur de bande du spectre, peut ĂȘtre 125, 250, 500KHz.sf - facteur d'Ă©talement, affecte la durĂ©e de transmission.Voici Ă quoi ressemble le spectre avec sf7 et sf12 avec la mĂȘme quantitĂ© de donnĂ©es.
Comme vous pouvez le voir, les données sont transmises en blocs courts. La taille maximale des paquets ne dépasse pas 255 octets. Une fois la transmission terminée, le modem reçoit la confirmation que les données ont été envoyées.Réception des données
Pour la rĂ©ception, il est nĂ©cessaire de rĂ©gler les mĂȘmes paramĂštres que pour la transmission, sinon les modems ne s'entendront pas. Le code est donnĂ© ci-dessous, le programme dans une boucle sans fin "Ă©coute" les donnĂ©es sur le port sĂ©rie.Code sourceimport 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")
deviceSend(port, "radio set pwr -3")
deviceSend(port, "radio set mod lora")
deviceSend(port, "radio set sf sf7")
deviceSend(port, "radio set bw 125")
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
sleep(0.1)
except KeyboardInterrupt:
pass
deviceSend(port, "mac resume")
, , - serial port. ( ) Raspberry Pi, .

RN2483 , PDF «RN2903 LoRa Technology Module Command Reference Userâs Guide».
Semtech Lora Calculator, ( , ) â , , .

, SX1276 1000 30 8 100 10dBm.
Pour une vĂ©rification pratique de la portĂ©e, l'un des modems a Ă©tĂ© laissĂ© dans l'appartement par la fenĂȘtre, le second a Ă©tĂ© connectĂ© au Raspberry Pi et sorti dans la rue. Certaines sources promettent une autonomie d'environ 3 km dans les zones urbaines. Le rĂ©sultat, hĂ©las, n'est pas si bon: en pratique, Ă puissance maximale et une antenne Ă 868 MHz, le signal est complĂštement Ă©touffĂ© dĂ©jĂ aprĂšs environ 3 immeubles d'habitation. Bien sĂ»r, dans les endroits ouverts, la plage est plus Ă©levĂ©e, mais cela vaut la peine de «tourner un coin», car le signal disparaĂźt trĂšs rapidement. En gĂ©nĂ©ral, le rĂ©sultat de 3km en ville ne peut probablement ĂȘtre obtenu que si vous placez l'antenne sur la tour TV, vous pouvez vraiment compter sur 300m au mieux. Mais ce n'est pas si mal, compte tenu de la faible puissance du signal transmis.Prix ââd'Ă©mission
Informations pour ceux qui veulent rĂ©pĂ©ter des expĂ©riences ou utiliser LoRa dans leurs conceptions. Le prix de leur ensemble de 2 modems rn2483 prĂȘts Ă l'emploi sur eBay est de 80 âŹ. SĂ©parĂ©ment, le module avec le SX1276 soudĂ© peut ĂȘtre achetĂ© auprĂšs de vendeurs chinois pour 12 $ avec la livraison gratuite. La puce SX1276 sans aucun cerclage peut y ĂȘtre achetĂ©e pour 9 $ (le code dĂ©crit dans l'article ne convient que pour RN2483, lorsque vous utilisez la puce SX1276, elle devra ĂȘtre programmĂ©e Ă un niveau infĂ©rieur).Conclusions
LoRa ( -) . LoRa , ( ). , , LoRa â , . â , , , . , «» . , , . «» LoraWAN, . , , .
RN2483 LoRaWAN.
:
â RN2483 datasheet
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.zipRN2483 Raspberry Pi Arduino github.