Izbira ustreznega komunikacijskega protokola je pomemben del katerega koli projekta interneta stvari, saj nezmožnost komuniciranja s strežnikom / oblakom naprave hitro odvzame “I” v IoT in lahko vodi do popolnega neuspeha projekta.
Electronics-lab
2021-302-53
Obstaja več komunikacijskih protokolov, od WiFi in Zigbee do 2G, LTE in celo satelitskih komunikacij, vendar vsakega od njih običajno pesti ena ali druga omejitev, zaradi česar so neprimerni za nekatere primere uporabe interneta stvari, pri čemer so glavni krivci praviloma kompromisi med dosegom, močjo in pasovno širino. Semtech pa je z dokazovanjem razumevanja prihodnosti interneta stvari videl potencialnega igralca, ko je leta 2012 kupil Cycleo iz Francije. Cycleo je razvil patentirano brezžično komunikacijsko tehnologijo LoRa, ki je združevala ultra nizko porabo energije z učinkovitim dolgim dosegom. Semtech je prek konzorcija izkoristil moč skupnosti in tehnologijo preoblikoval v enega ključnih gonilnikov trenutnega vala digitalne preobrazbe, ki ga je uvedel IoT.
Ta vsebina je samo za naročnike
Z uporabo LoRa tehnologije lahko naprave običajno komunicirajo na razdalji od 13 do 20 km z zmožnostjo dosega 80 km v določenih nastavitvah vidnega polja in nekaj sto kilometrov iz vesolja, kot sta pokazala FOSSAT in Lacuna. Ta doseg je bil dosežen pri zelo nizki moči, zaradi česar je LoRa primernejša od drugih komunikacijskih protokolov za oddaljene IoT naprave z baterijskim napajanjem, ki naj bi delovale mesece (ali leta) z enim samim polnjenjem baterije.
LoRa proizvode je mogoče uporabiti na dva glavna načina:
- Kot komunikacijski protokol od točke do točke
- Kot širokopasovno omrežje z nizko porabo energije
Komunikacija enakovrednih naprav od točke do točke omogoča, da se dve napravi z LoRa radijskimi sprejemniki medsebojno pogovarjata na način, podoben načinu komuniciranja dveh Bluetooth naprav, pri čemer je glavna razlika v tem, da se doseg močno poveča in porabi manj energije.
Za uvedbo kot širokopasovno LoRa omrežje sodeluje s protokoli, kot je LoRaWAN, s katerimi ga običajno zamenjamo. LoRaWAN je standard zmogljivega odprtega širokopasovnega omrežja z nizko porabo energije (LPWAN) velikega dosega, ki temelji na tehnologiji LoRa in ga je LoRa zavezništvo zasnovalo za IoT rešitve, ki jih poganja LoRa.
Standard v celoti izkorišča vse funkcije LoRa tehnologije za zagotavljanje storitev, vključno z zanesljivo dostavo sporočil, varnostjo, lokacijo in multicast zmogljivostjo uporabnikom, hkrati pa zagotavlja interoperabilnost različnih LoRaWAN omrežij po vsem svetu. To je standard, na katerem so zgrajene platforme, kot je Things omrežje.
Čeprav je LoRa začela z določeno stopnjo negotovosti, je prerasla v izbrano komunikacijsko sredstvo za skoraj vse vrste IoT aplikacij, tudi tistih, ki zaradi svoje priključene narave ne uživajo prednosti nizke porabe energije. Številni napredki, kot sta rešitev Gateway, ki temelji na vesolju, ki jo uvajata FOSSAT in Lacuna, jasno kažejo, da bo LoRa imela večji vpliv na IoT v prihodnosti, kot ga ima trenutno.
Zaradi vseh teh funkcij in izboljšav je LoRa pomembna tema za elektronike. V naslednjih dveh vajah bomo sestavili projekta, ki bosta pokazala, kako lahko LoRa uporabljate kot sredstvo komunikacije v svojih IoT projektih. Prva vadnica, ki si jo bomo ogledali, se bo osredotočila na uporabo LoRa v načinu komunikacije od točke do točke (angl. peer-to-peer), druga vadnica pa uporaba LoRa kot Wide Area Network.
Kot demonstracijo LoRa protokola, ki se uporablja za komunikacijo med paroma, bo tokratni projekt predstavljal dve napravi, eno konfigurirano kot oddajnik in drugo kot sprejemnik. Oddajnik bo s pomočjo DHT11 senzorja, priključenega na Arduino Nano, izmeril temperaturo in vlažnost iz okolja ter te podatke posredoval sprejemniku prek Ra-02 LoRa modula. Za sprejemnik bomo uporabili razvojno ploščo ESP8266 Nodemcu z drugim modulom Ra-02 LoRa. Podatki o temperaturi in vlažnosti, ki jih pošilja oddajnik, bodo sprejeti prek Ra-02 modula in bodo prikazani na Arduino IDE serijskem monitorju.
Na koncu vadnice boste vedeli, kako pošiljati podatke med dvema napravama z uporabo LoRa in kako povezati Arduino in razvojne plošče, ki temeljijo na ESP8266 in imajo vgrajen LoRa modul.
Potrebne komponente
Za izvedbo te vadnice potrebujete naslednje komponente:
- Arduino Nano
- Ra-02 868mHz LoRa Modul x 2
- ESP8266 NodeMCU
- DHT11 senzor temperature in vlage
- 3,7v Lipo/Li-ion baterija(opcijsko)
- Razvojna plošča
- Povezovalne žice
Vse te komponente je mogoče kupiti v lokalnih trgovinah ali preko spleta. Namesto Arduino Nano lahko izberete katero koli drugo Arduino združljivo razvojno ploščo. Upoštevajte samo, kako sprememba vrste plošče vpliva na druge dele vadnice. Uporablja se tudi ESP8266 NodeMCU, ker sem jih imel na zalogi. Uporabite lahko katero koli drugo ploščo. Pri nakupu Ra-02 LoRa modula upoštevajte katero frekvenco izberete, da boste znotraj zakonite uporabe teh modulov na frekvencah znotraj EU. Te frekvence so:
- EU433: od 433,05 to 434,79 MHz
- EU863: od 863 do 870 MHz.
Električna shema
Kot smo že omenili, imata tokratna projekta dve ploščici; oddajnik in sprejemnik, to pomeni, da bomo imeli tudi dve shemi.
Električna shema oddajnika
Oddajnik je sestavljen iz DHT11 in LoRa modula Ra-02, povezanega z Arduino Nano. Izhodni priključek DHT11 je povezan z digitalnim priključkom na Arduino Nano, medtem ko je Ra-02 povezan s SPI Arduino Nano priključki. Priključite komponente, kot je prikazano na shemi na sliki 5.
Za lažjo povezavo je spodaj opis posameznih povezav priključkov:
- Ra-02 – Arduino Nano:
- DiO0 – D2
- RST – D9
- Nss – D10
- MOSI – D11
- MISO – D12
- SCK – D13
- GND – GND
- 3,3V – 3,3V
DHT11 – Arduino Nano:
- VCC – 5V
- GND – GND
- D0 – D3
Pred naslednjim korakom preverite povezave in se prepričajte, da je vse tako, kot mora biti.
Električna shema sprejemnika
Sprejemnik je sestavljen iz ESP8266 in Ra-02 LoRa modula. Povežite ju, kot je prikazano na shemi na sliki 6.
Za lažjo povezavo je spodaj opis posameznih povezav priključkov:
- Ra-02 – NodeMCU:
- DiO0 – D2
- RST – D1
- Nss – D8
- MOSI – D7
- MISO – D6
- SCK – D5
- GND – GND
- 3,3V – 3,3V
Preglejte tudi povezave sprejemnika, da se prepričate, da je vse tako, kot mora biti.
Z obema shemama, ki sta implementirani bodisi na razvojni plošči bodisi na proto plošči, smo zdaj pripravljeni napisati program za projekt.
Program za projekt
Kot smo že omenili v uvodu, je cilj tokratnega projekta pošiljanje podatkov med dvema napravama (ena je konfigurirana kot oddajnik, druga pa kot sprejemnik) s pomočjo LoRa modulov. Tako bomo kot pri shemah, tudi program razdelili na dva: program za oddajnik in program za sprejemnik.
Program za oddajnik
Zamisel programa za oddajnik je preprosta. Podatke o temperaturi in vlažnosti okolja pridobimo s pomočjo senzorja temperature in vlažnosti DHT11. Nato podatke pošljemo prek LoRa na naš sprejemnik z Identity ključem, ki zagotavlja, da se podatki dostavljajo samo našemu sprejemniku.
Da bi zmanjšali obseg dela, potrebnega za razvoj programa za naš oddajnik, bomo uporabili nekaj knjižnic vključno z dobro zgrajeno LoRa knjižnico avtorja Sandeep Mistry skupaj s knjižnico DHT podjetja Adafruit. Knjižnica LoRa ima številne funkcije, ki olajšajo pošiljanje in prejemanje podatkov z LoRa modulom, medtem ko knjižnica DHT olajša interakcijo in pridobivanje podatkov z DHT11 senzorja. Obe knjižnici je mogoče namestiti prek Arduino upravitelja knjižnic ali pa jih naložiti in namestiti prek povezav, ki sta jim priloženi.
Da bi zmanjšali obseg dela, potrebnega za razvoj programa za naš oddajnik, bomo uporabili nekaj knjižnic vključno z dobro zgrajeno LoRa knjižnico avtorja Sandeep Mistry skupaj s knjižnico DHT podjetja Adafruit. Knjižnica LoRa ima številne funkcije, ki olajšajo pošiljanje in prejemanje podatkov z LoRa modulom, medtem ko knjižnica DHT olajša interakcijo in pridobivanje podatkov z DHT11 senzorja. Obe knjižnici je mogoče namestiti prek Arduino upravitelja knjižnic ali pa jih naložiti in namestiti prek povezav, ki sta jim priloženi.
Koda za oddajnik temelji na LoRa Sender primeru, ki se nahaja v LoRa knjižnici, z rahlimi spremembami, kot je dodajanje sinhronizacijske besede, ki zagotavlja, da sporočilo prejme le določeni sprejemnik s ključem.
Za hitro razčlenitev kode začnemo z vključitvijo knjižnic, ki bodo uporabljene.
#include <SPI.h>
#include <LoRa.h>
#include <DHT.h>
Nato definiramo Arduino priključke, na katere je povezan DHT, določimo vrsto DHT, ki ga uporabljamo, in z obema parametroma ustvarimo primerek DHT knjižnice.
#define DHTPIN D4 // what digital pin we’re connected to
#define DHTTYPE DHT11 // select dht type as DHT 11 or DHT22
DHT dht(DHTPIN, DHTTYPE);
Nato ustvarimo spremenljivko, imenovano »counter«, ki bo uporabljena za sledenje številu sporočil, poslanih v sledenje, če je bilo vse dostavljeno oziroma če je bilo nekaj izgubljenih.
intcounter = 0;
Ko končamo, preidemo na funkcijo void setup (). Funkcijo zaženemo z inicializacijo serijske komunikacije, tako da lahko serijski monitor uporabljamo za razhroščevanje.
voidsetup(){
Serial.begin(9600);
while(!Serial);
Serial.println(“LoRa Sender”);
Nato inicializiramo DHT in LoRa modul, ki določata frekvenco 868MHz, saj je to ISM frekvenčni pas, ki ga podpira moj LoRa modul in je dovoljen v moji državi. Če inicializacija modula LoRa ne uspe, se koda začasno ustavi v trajni zanki while, vendar če je uspešna, zaključimo funkcijo void setup () z nastavitvijo edinstvenega komunikacijskega ključa (Syncword) in nastavimo tudi moč Lora radia do maksimuma.
dht.begin(); //initialise DHT11
if(!LoRa.begin(868E6)){
Serial.println(“Starting LoRa failed!”);
while(1);
}
LoRa.setSyncWord(0xF3);
LoRa.setTxPower(20);
}
Nato s funkcijo LoRa.beginPacket () označimo začetek paketa, natisnemo podatke o temperaturi in vlažnosti kot del paketa skupaj s spremenljivko števca, da lahko sledimo sporočilom. Nato s funkcijo LoRa.endPacket () označite konec paketa in ga pošljite v sprejemnik.
LoRa.beginPacket();
LoRa.print(“Data:”);
LoRa.print(counter);
LoRa.print(“>”);
LoRa.print(“Temperature: “);
LoRa.print(t);
LoRa.print(“”);
LoRa.print(“humidity”);
LoRa.print(h);
LoRa.endPacket();
Povečajte števec in zakasnite za 5000 ms, da omogočite modulu nekaj časa, preden bodo poslani naslednji podatki. To se nadaljuje v zanki (), ki neprekinjeno pretaka podatke o temperaturi in vlažnosti iz okolja v LoRa sprejemnik.
counter++;
delay(5000);
}
Celoten program za LoRa oddajnik je naveden v virih [1].
Program za sprejemnik
Naš cilj za sprejemnik je preprosto zajeti paket, ki ga pošilja oddajnik, in ga prikazati na serijskem monitorju. Za zmanjšanje zapletenosti programa bomo uporabili isto LoRa knjižnico, kot smo jo uporabili na skici oddajnika. Za hiter prehod kode začnemo, kot vedno, z vključitvijo knjižnic, ki bodo uporabljene.
#include <SPI.h>
#include <LoRa.h>
Nato določimo Nodemcu priključke, na katere so priključeni NSS, RST in DIO0 priključki LoRa modula. Opazili boste, da tega nismo naredili za skico oddajnika – zakaj tako? To je zato, ker smo uporabili vnaprej določene vtičnike knjižnice, ki so uporabni na Arduino Nano, na ESP pa niso.
//define the pins used by the transceiver module
#define ss D8
#define rst D1
#define dio0 D2
Preidemo na funkcijo void setup (). Začnemo z inicializacijo serijske komunikacije, da si lahko s pomočjo serijskega monitorja ogledamo dohodne podatke iz sprejemnika.
voidsetup(){
//initialize Serial Monitor
Serial.begin(9600);
while(!Serial);
Serial.println(“LoRa Receiver”);
Nato nastavite LoRa modul z ukazom setPins () s čemer obvestite knjižnico o konfiguraciji priključkov, ki jih želite uporabiti.
//setup LoRa transceiver module
LoRa.setPins(ss, rst, dio0);
LoRa komunikacijo inicializiramo z ukazom begin ()., tako kot smo to storili za oddajnik. Pri tem zagotovite, da mora biti frekvenca, ki jo uporabljate kot argument funkcije begin (), frekvenca vašega modula in da je ta frekvenca zakonita v vaši državi.
//replace the LoRa.begin(—E-) argument with your location’s frequency
//433E6 for Asia
//866E6 for Europe/Africa
//915E6 for North America
if(!LoRa.begin(868E6)){
Serial.println(“.”);
while(1);
}
Za zaključek void setup () funkcije nastavimo besedo za sinhronizacijo tako, da se ujema z oddajnikom, in na serijski monitor natisnemo sporočilo, ki označuje, da je namestitev končana.
// Change sync word (0xF3) to match the receiver
// The sync word assures you don’t get LoRa messages from other LoRa transceivers
// ranges from 0-0xFF
LoRa.setSyncWord(0xF3);
Serial.println(“LoRa Initializing Complete!”);
}
Napišemo loop () funkcijo. Funkcijo začnemo z ustvarjanjem spremenljivke, v kateri bodo shranjeni prejeti podatki in velikost prejetega paketa, ki bo nič, če noben paket ne bo prejet.
voidloop()
{
String LoRaData;
intpacketSize = LoRa.parsePacket();
Nato s stavkom »IF« preverimo, ali je bil paket prejet, če je odgovor da, se podatki preberejo s funkcijo LoRa.readString () in shranijo v spremenljivko, ki smo jo ustvarili prej.
if(packetSize)
{
// received a packet
Serial.print(“Received packet ‘”);
// read packet
while(LoRa.available())
{
LoRaData = LoRa.readString();
Podatki o branju se nato prikažejo na serijskem monitorju skupaj z RSSI, ki je pokazatelj moči signala in je lahko koristen za razhroščevanje vaše oddajne moči.
Serial.print(LoRaData);
}
// print RSSI of packet
Serial.print(“‘ with RSSI “);
Serial.println(LoRa.packetRssi());
}
}
Celoten program za LoRa oddajnik je naveden v virih [1].
Delovanje
Arduino Nano povežite z računalnikom in vanj naložite skico oddajnika. Pred nalaganjem izberite pravo vrsto plošče in potrdite. Po tem priključite tudi Nodemcu in vanj naložite skico sprejemnika. Prepričajte se tudi, da ste preklopili vrsto plošče in izbrali prava COM vrata.
Po nalaganju skic se lahko odločite, da obe napravi pustite povezani z računalnikom ali odklopite oddajnik in ga napajate z napajalnikom ali baterijo, tako da ostane samo sprejemnik. Ko je sprejemnik še vedno povezan z računalnikom, odprite serijski monitor. Na serijskem monitorju bi morali videti podatke o temperaturi in vlažnosti, ki jih pošilja oddajnik.
In to je to!
Medtem ko je bila tokratna vadnica predstavitev medsebojne LoRa komunikacije, je glavno veselje interneta stvari, ko lahko podatke prenesete v oblak strežnika / naprave in izvedete analizo, ki bi lahko privedla do pridobivanja vpogledov v dodajanje vrednosti kot takih, vendar bomo ustvarili drugi del vadnice, ki bo pokazal, kako prejeti podatke v oblak.
Viri:
https://www.electronics-lab.com/wp-content/uploads/2020/01/Archive-2.zip
Povzeto po:
https://www.electronics-lab.com/project/introduction-lora-send-data-two-arduino-using-lora/