Sunteți pe pagina 1din 60

Universitatea “Politehnica” din București

Facultatea de Electronică, Telecomunicații și Tehnologia Informației

Optimizarea unei rețele LoRaWAN pentru managementul unei aplicații IoT

Proiect de diplomă
prezentat ca cerință parțială pentru obținerea titlului de
Inginer în domeniul Electronică și Telecomunicații
programul de studii de licență Rețele și Software de Telecomunicații

Conducători științifici Absolvent


Dr. ing. Alexandru Tatomirescu Borîndel Marius Robert

2018

1
2
3
4
Anexa 5

Declaraţie de onestitate academică

Prin prezenta declar că lucrarea cu titlul “Titlul complet al proiectului”,


prezentată în cadrul Facultăţii de Electronică, Telecomunicaţii şi Tehnologia
Informaţiei a Universităţii “Politehnica” din Bucureşti ca cerinţă parţială pentru
obţinerea titlului de Inginer/ Master în domeniul domeniul**, programul de studii
program*** este scrisă de mine şi nu a mai fost prezentată niciodată la o facultate sau
instituţie de învăţămînt superior din ţară sau străinătate.

Declar că toate sursele utilizate, inclusiv cele de pe Internet, sunt indicate în


lucrare, ca referinţe bibliografice. Fragmentele de text din alte surse, reproduse exact, chiar
şi în traducere proprie din altă limbă, sunt scrise între ghilimele şi fac referinţă la sursă.
Reformularea în cuvinte proprii a textelor scrise de către alţi autori face referinţă la
sursă. Înţeleg că plagiatul constituie infracţiune şi se sancţionează conform legilor în
vigoare.

Declar că toate rezultatele simulărilor, experimentelor şi măsurătorilor pe care le


prezint ca fiind făcute de mine, precum şi metodele prin care au fost obţinute, sunt reale
şi provin din respectivele simulări, experimente şi măsurători. Înţeleg că falsificarea
datelor şi rezultatelor constituie fraudă şi se sancţionează conform regulamentelor în
vigoare.

Bucureşti, 30.06.2018

Absolvent Marius Robert BORÎNDEL

(semnătura în original)

5
6
Cuprins
LISTĂ DE FIGURI ............................................................................................................................ 8
LISTĂ DE ACRONIME ................................................................................................................... 9
LISTĂ DE TABELE ........................................................................................................................ 10
1 Capitolul INTRODUCERE ........................................................................................................ 11
1.1 Introducere........................................................................................................................... 11
2 Capitolul Introducere în IoT ....................................................................................................... 12
2.1 IoT ....................................................................................................................................... 12
2.2 LoRa .................................................................................................................................... 12
2.3 Raspberry............................................................................................................................. 13
2.3.1 Raspberry Pi 3 model B ............................................................................................... 15
3 Capitolul LoRa............................................................................................................................ 17
3.1 Noțiuni generale .................................................................................................................. 17
3.2 Rata de transmisie a datelor................................................................................................. 18
3.3 Bugetul de legatura (Link Budget) ...................................................................................... 19
3.4 Structura pachetelor LoRA .................................................................................................. 22
4 Capitolul LoRaWAN .................................................................................................................. 24
4.1 Noțiuni generale .................................................................................................................. 24
4.2 Clase LoraWAN .................................................................................................................. 25
4.3 Rețele ................................................................................................................................... 26
5 Capitolul SX127X ...................................................................................................................... 27
5.1 Regiștrii ............................................................................................................................... 27
5.2 Moduri de operare ale modemurilor LoRa. ......................................................................... 28
5.3 Configurația regiștrilor pentru modificarea parametrilor LoRa .......................................... 33
6 Capitolul Implementare .............................................................................................................. 35
6.1 Măsurători ale performanțelor protocolului ........................................................................ 35
7 Capitolul 6 .................................................................................................................................. 41
7.1 Implementarea software ...................................................................................................... 41
Concluzii ........................................................................................................................................... 49
Bibliografie ....................................................................................................................................... 51
ANEXE .............................................................................................................................................. 52

7
LISTĂ DE FIGURI

Fig 2.2.1 Arhitectura IoT (LoRa)


Fig 2.3.1.1 Raspberry Pi 3 model B
Fig 2.3.1.2 Structura SPI
Fig 3.3.1 Perioada unui simbol LoRa
Fig 3.4.1 Structura pachetului LoRa
Fig 4.1.1 Stiva OSI
Fig 4.2.1 LoRa în stiva OSI
Fig 6.1.1 Perioada semnalui pentru SF=12
Fig 6.1.2 Perioada semnalului pentru SF=12
Fig 6.1.3 Transmisie la distanța de 3 metrii
Fig 6.1.4 Măsurători bazate pe informația dată de plăcuței
Fig 6.1.5 Măsurători folosind analizorul spectral
Fig 6.1.6 Fluctuația factorului rssi
Fig 6.1.7 Locuri unde s-au făcut măsurători
Fig 7.1.1 Amplasarea nodurilor pentru crearea unei rețele
Fig 7.1.2 Diagrama stărilor

8
LISTĂ DE ACRONIME

SF = spreading factor (factor împrăștiere)


BW = bandwidth (lățimea de bandă)
Rb = bit rate (rata datelor)
CR = coding rate (rata codului)
b/s =biti pe secunda
IoT = Internet Of Things
CRC = cyclic redundancy check (cod ciclic de redundanță)
LPWANs= Low Power Wide Area Networks
LoRaWan= Long Range Radio Wide Area Networks
LoRa= Long Range Radio
MAC= media access control (controlul accesului la mediu)
GPIO= general purpose input/output
SPI= Serial Peripheral Interface (interfață serială cu dispozitivele periferice)
MOSI (SPI) = Master Output, Slave Input (ieșire master, intrare slave)
MISO (SPI) = Master Input, Slave Output (intrare master, iesire slave)
SCLK (SPI) = SCLK - Ceas serial (ieșire din master)
GND = Ground (impământare)
CDMA = Code Division Multiple Access
HDMI= High-Definition Multimedia Interface
OSI= Open Systems Interconnection
NF= Noise floor (podeaua de zgomot)
SNR= Signal-to-noise ratio (raport semnal-zgomot)

9
LISTĂ DE TABELE
Tabel 2.3.1 Schema pinilor de uz general pentru Raspberry Pi A și B
Tabel 2.3.2 Pini suplimentari pentru versiunea B rev.2
Tabel 3.3.1 Zgomotul maxim acceptat pentru diferite valori ale BW și SF
Tabel 5.2.1 Tipuri de mesaje LoRaWAN
Tabel 5.2.2 Conținutul FCtrl pentru mesaje descendente
Tabel 5.2.3 Conținutul FCtrl pentru mesaje ascendente
Tabel 5.3.1 Utilizarea CRC pentru diferite stări ale bitului RxPayloadCrcOn cazul antetului explicit
Tabel 5.3.2 Utilizarea CRC pentru diferite stări ale bitului RxPayloadCrcOn cazul antetului implicit

10
1 Capitolul INTRODUCERE

1.1 Introducere
Scopul lucrării este de a implementa schimbarea dinamică a ratei de transmisie in funcție de
parametrii de comunicație. Se dorește a se realiza acest lucru pentru o comunicație fără fir de tip
LoRa. Pentru a realiza acest lucru este nevoie să se cunoască in primul rând care sunt capacitățile
LoRa, și care sunt parametrii modulației LoRa care pot fi ajustați. Pentru a realiza schimbarea ratei
de transmisiune a fost necesar să cunoaștem câteva detalii și despre propagarea semnalului respectiv
cum influențează canalul transmisia. De asemeni a trebuit să luăm in considerare si limitările
dispozitivelor folosite. Dispozitivele care făceau transmisia si recepția erau produse de Ai Thinker pe
baza specificațiilor firmei Semtech care deține drepturile asupra modulației LoRa. Dispozitivele
folosite au fost de varianta sx1276.
Pentru a realiza partea software am folosit ca punct de plecare o implementare in Node js pentru
acest model de dispozitiv. Această implementare a trebuit să o verific atât cu datasheetul disponibil
cât și măsurând cu un analizor de spectru dacă unele funcțiile implementate fac ceea ce este specificat
in standardul Semtech. Singura informație asupra calității mesajului primit este indicele rssi. A trebuit
să realizăm o serie de măsurători pentru a vedea pentru ce valori ale rssi se pierde comunicația dintre
plăcuțe pentru a ști în cazul implementării noastre ce valoare a rssi trebuie evitată. Pentru a mări
valoarea rssi avem la dispoziție trei parametrii ai dispozitivului : lățimea de bandă, factorul de
împrăștiere și puterea de transmisie. În implementarea noastră am păstrat lățimea benzii constantă si
am variat ceilalți doi factori.
În realizarea acestui lucru mari probleme au fost aduse de către cablurile care conectau
dispozitivele sx1276 la antenele folosite. Și de asemenea probleme au fost atunci când am schimbat
factorul de împrăștiere deoarece emițătorul și receptorul trebuie să folosească același factor de
împrăștiere pentru a putea comunica.

11
2 Capitolul Introducere în IoT
2.1 IoT

În ultimii ani LPWANs – Low Power Wide Area Networks au devenit una din tehnologiile cu
cea mai rapidă creștere printre tehnologiile wireless. Aceste rețele sunt de fapt pilonul de bază pentru
viitorul interconectat prevestit prin sintagma: Internet Of Things, care defapt este mutat în prezentul
pe care îl trăim. Dezvoltarea Internet Of Things a prins viteză o dată cu apariția rețelelor LPWAN și
odată cu micșorarea accelerată a dispozitivelor de calcul și a dezvoltării diferiților senzori de mărimi
foarte mici, și de asemenea datorate prețului redus al dispozitivelor electronice.
Tehnologiile LPWAN sunt complementare rețelelor convenționale celulare și wireless în
termeni de consum energie, distanță, costuri și bandă oferită. În general tehnologiile LPWAN oferă
o bandă foarte mică, distanță de până la 15 km, consum mic de energie și costuri foarte mici fiind
ideale pentru aplicații de tipul intern of things. Aceste aplicații având nevoie doar de bandă mică
deoarece, informațiile transmise sunt valori transmise de senzori, valorile transmise de acești senzori
vor fi agregate la un concentrator. Mai multe concentratoare vor fi conectate prin tehnologii
convenționale la servere de aplicație care vor face centralizarea datelor și prelucrarea lor. Deci
dispozitivele de la marginea rețelei nu vor avea nevoie de putere mare de calcul. Aceasta abordare
este total diferita de cealalta abordare populara in acest moment care are in vedere mutarea puterii de
calcul la periferia retelei miscare ce poarta denumirea de edge-computing.
Lucrarea de față are ca scop realizarea unor măsuratori pentru a observa comportamentul
acestui tip de comunicație, și implicit pentru a realiza acest lucru este nevoie de scrierea unor
programe software care să simplifice realizarea acestui lucru. În urma unor masurători amănunțite și
a unor experimente practice putem realiza care sunt capacitățile reale ale modulației LoRa și a implicit
a tehnologiilor de tip IoT. Desigur pentru a realiza acest lucru este necesară o înțelegere a modului
de operare al transmițătoarelor, modulației și a uneltelor hardware și software necesare pentru a obține
aceste rezultate.

2.2 LoRa

LoRaWAN folosește modulația LORA care este bazată pe chirp spread spectrum, care o face
să se comporte bine pe un canal cu zgomot, cu căi multiple, și effect dopler chiar și folosind puteri de
transmisie scăzute. Rata datelor depinde de banda utilizată și de factorul de împrăștiere. Factorul de
împrăștiere – cu cât factorul crește mai mult cu atât pachetele se transmit mai rar. LoRa Spread
Spectrum Modulation – modulație utilizată de LoRaWAN proprietară, deținută de Semtech. Lora este
o modulație de tip spread spectrum bazată pe Chirp Spread Spectrum modulation. Chirp Spread
Spectrum este o modulație care își are originea în 1940 și a fost folosită de atunci în comunicațiile
militare și spațiale datorită rezistenței sale la interferență. Într-o modulație de tip spread spectrum
semnalul transmis este împrăștiat peste o bandă de frecvențe mai largă mult mai mare decât bandă
minimă necesară transmiterii datelor. Rata de transmisie este influențată de următorii 3 factori:
factorul de împrăștiere, lățimea de bandă, puterea de transmisie. Dacă micșorăm puterea de transmisie
vom economisi baterie, dar distanța de transmisie va fi evident mai mică. Ceilalți doi factori adăugați
împreună formează data rate-ul. Rata de transfer (Baud Rate) este dată de de ceilalți doi factori:
factorul de împrăștiere și lățimea de bandă. Dacă mărim lățimea de bandă sau micșorăm factorul de

12
împrăștiere putem obține rate de transfer mai mari. LoRa – definește standardul pentru layer fizic.
LoraWan – definește layerul fizic plus nivelul MAC și nivelul aplicație.
Caracteristici principale LoRaWAN:

• Distanță de transmisie mare: >5 km urban, >10 km rural, >80km condiții ideale
• Durata de viață lungă a bateriei: >10 ani (datorita consumului redus de putere)
• Cost scăzut: 100 lei modul
• Rata de transmisie scăzută: 0.3 bps – 50 kbps
• Operează într-o bandă nelicențiată. Transmisia fiind de tip bidirecționale
LoRaWAN este gândită cu gândul la rețele clasice telecom, în care doar câțiva operatori
mențin și controlează rețeaua, și milioane de utilizatori folosesc rețeaua și nu e nevoie să se îngrijească
de starea infrastructurii. Cu toate acestea LoRa operează în zona de spectru nelicențiată. Este posibil
să îți setezi propriul gateway, și să îți construiești propria rețea.
Arhitecura:

Fig 2.2.1 Arhitectura IoT (LoRa)

În cazul tipic un senzor trimite la un anumit un pachet, care va fi interceptat de una sau mai multe
gateway-uri care apoi vor trimite pachetul printr-o rețea convențională către un server de aplicație,
care va face prelucrare pe baza datelor primate și vor lua decizii.

2.3 Raspberry

Raspberry Pi este o serie de computere cu dimensiuni mici , dezvoltate în Regatul Unit de către
Fundația Raspberry Pi pentru a promova predarea informaticii în școli și în țările în curs de dezvoltare.
Mai multe generații de Raspberry PI au fost comercializate pana in prezent. Viteza procesorului
variază de la 700 MHz la 1,4 GHz pentru Pi 3 Model B+; memoria variază de la 256 MB la 1 GB de
RAM. Placutele pot avea de la o iesire la patru iesiri USB. Pentru ieșire video, avem un port HDMI ,
de asemeni putem avea si iesire de sunet cu ajutorului portului standard de 3,5 mm jack pentru ieșire
audio. Deasemenea acest microcalculator dispune si de iesiri programabile care sunt asigurate de un
număr de pini GPIO care acceptă protocoalele obișnuite precum I²C si SPI.

13
Schemele pinilor de uz general :
Funcție
GPIO Funcție secundară Pin Pin GPIO
secundară
+3.3 V 1 2 +5 V
SDA1
2 3 4 +5 V

SCL1
3 5 6 GND

GCLK
4 7 8 TXD0 (UART) 14
GND
9 10 RXD0 (UART) 15
GEN0
17 11 12 GEN1 18
GEN2
27 13 14 GND
GEN3
22 15 16 GEN4 23
+3.3 V
17 18 GEN5 24
MOSI (SPI)
10 19 20 GND
MSO (SPI)
9 21 22 GEN6 25
SCLK (SPI)
11 23 24 CE0_N (SPI) 8
GND
25 26 CE1_N (SPI) 7

(PI 1 Modelele A și B se opresc aici)

FEPROM ID_SD 27 28 ID_SC EFPROM


5 N/A 29 30 GND
6 N/A 31 32 12
13 N/A 33 34 GND
19 N/A 35 36 N/A 16
26 N/A 37 38 Intrare 20
GND 39 40 Ieșire 21

Tabel 2.3.1 Schema pinilor de uz general pentru Raspberry Pi A și B

14
Modelul B rev.2 are de asemenea un pad (numit P5 pe bord si P6 pe schema) de 8 pini oferă acces la
o suplimentare 4 GPIO conexiuni.

Funcție Funcție secundară PIN PIN Funcție secundară Funcție


N/A 1 2 N/A
GPIO28 GPIO_GEN7 3 4 GPIO_GEN8 GPIO29
GPIO30 GPIO_GEN9 5 6 GPIO_GEN10 GPIO31
N/A GND 7 8 GND N/A
Tabel 2.3.2 Pini suplimentari pentru versiunea B rev.2

Modelele A și B permite GPIO accesul la statutul de ACT LED folosind GPIO 16. Modelele A și B
oferă acces GPIO ACT statutul LED folosind GPIO 47, şi starea de putere LED folosind GPIO 35.

2.3.1 Raspberry Pi 3 model B

Raspberry Pi 3 model este un computer de mici dimensiuni care are toate componentele de bază ale
unui computer obișnuit. Dispune de un processor quad core, Wi-Fi si bluetooth.

Fig 2.3.1.1 Raspberry Pi 3 model B

Pentru a putea interacționa cu alte dispositive Raspberry Pi dispune de porturi I/O, și de 40 de pini
denumiți GPIO (General-purpose input/output). Interacțiunea cu chip-ul Lora se realizează cu
ajutorul SPI (Serial Peripheral Interface bus) o interfață de comunicații alcatuită din 4 cai de
comunicație (4 pini GPIO). Interfața comunică bidirectional folosind o arhitectură de tip master-slave
cu un singur master. Sunt disponibile mai multe device-uri slave legate la același master cu ajutorul
chip select.

15
Fig 2.3.1.2 Structura SPI

SCLK: Serial Clock (ieșire de la master)


MOSI: Master Output Slave Input, or Master Out Slave In (date de la master)
MISO: Master Input Slave Output, or Master In Slave Out (date de la slave)
SS: Slave Select (output de la master, în stare de înalta impedanță în caz de folosire a unui singur
device slave)

16
3 Capitolul LoRa
3.1 Noțiuni generale

LoRa este modulația proprietară de tip spectru împrăștiat (spread spectrum modulation).
Modulația este derivată din modulația chirp spread spectru. Aceste tipuri de modulație renunță la rata
de transmisie a datelor în favoarea unei sensibilități mai mari care se traduce în final la distanțe mai
mari de transmisie.LoRa (Long Range) operează la nivelul fizic din modelul OSI (Open Systems
Interconnection). LoRa este folosit în comunicații fără fir pe distanțe lungi. Distanță este un termen
relative, în cazul nostru în condiții teoretice se pot obține distanțe de transmisie de până la 40 km,
această distanță teoretică este însă afectată de mai mulți factori dintre care putem aminti: zgomotul
de pe canal, inia de vedere și zona Fresnel.
Pentru a putea vorbi de transmisiuni trebuie să amintim teorema Shannon-Hartley care indică
capacitatea de transmisie a unui canal în prezența zgomotului.
𝑆
𝐶 = 𝐵 ∗ 𝑙𝑜𝑔2 (1 + )
𝑁
C = Capacitatea canalului (bit/s)
B = Banda (Hz)
S = Puterea medie a semnalului recepționat (Watt)
N = Puterea medie a zgomotului (Watt)
S/N = Raportul semnal zgomot
Rearanjând ecuația putem obține următoarea formă a ecuației:
𝐶 𝑆
=1.433*𝑁
𝐵

Din această ecuație putem deduce că pentru a putea transmite fără pierderi în cazul în care
raportul semnal zgomot S/N << 1 putem folosi o bandă mai mare de frecvența. Astfel mărind bandă
putem compensa pentru degradarea raportului semnal-zgomot. Există mai multe sisteme de tip spread
spectrum dar toate au ceva în comun: cheia asociată canalului de comunicație. Felul în care această
cheie este introdusă în semnal definește tipul modulației. Termenul spread-spectrum se referă la
utilizarea unui semnal cu perioada mult mai mică decât semnalul util pentru a mări bandă utilizată de
semnalul modulat. O consecință a acestui fapt este că energia utilizată este împrăștiată peste o bandă
mai mare astfel încât apare că și cum ar fi zgomot. Raportul în decibeli între semnalul modulat și
semnalul util se numește câștig de împrăștiere a spectrului. Valori tipice ale acestui parametru variază
între 10 dB și 60 dB.
Procesul de creare a semnalului spread spectrum poartă numele de împrăștiere, și poate avea
loc oriunde în interiorul lanțului de transmisiune înaintea antenei de transmisie. La receptor codul de
împrăștiere a semnalului este eliminat, semnalul revenind la bandă sa inițială. Desigur că același cod
folosit la modulare trebuie folosit și la demodulare.Beneficii ale tehnologiilor spread spectrum sunt
rezistență la interferență și antibruiaj. De asemeni datorită folosirii codului (cheii de modulație) mai

17
multe semnale de tip spread spectrum pot fi transmise peste aceeași bandă în aceeași manieră că și
semnalele CDMA, receptorul decodand doar semnalul care conține cheia de modulație.
Chirp este un semnal sinusoidal a cărei frecvența scade sau crește în timp (de obicei între timp
și frecvența avem o relație sinusoidală). Că și celelalte tehnlogii de tip spectru împrăștiată, chirp
folosește întreagă bandă pentru a transmite mesajul făcându-l rezistent la interferență. Mai mult
deoarece se utilizează o bandă largă a spectrului de frecvențe, spectrul răspândit va fi de asemenea
rezistent la fenomenul de fading cauzat de transmisia de mai multe cai. Fading. Prezența obiectelor
care reflectă semnalul în zona dintre un transmițător și un receptor creează mai multe cai pe care
semnalul transmis le urmează către receptor. Ca rezultat receptorul va vedea superpoziția dintre
fiecare copie a semnalului original, afectată de o întârziere diferită în funcție de calea urmată. Fiecare
copie a semnalului va avea o atenuare, întârziere și fază diferită atunci când ajunge la receptor. Acest
fenomen va duce de la receptor la interferență, care poate fi constructivă sau destructivă, amplificând
sau atenuând puterea semnalului util. Interferențele puternice pot duce la o pierdere temporară a
legăturii de comunicație, datorită scăderii profunde a raportului semnalului zgomot.
Chirp Spread Spectrum a fost dezvoltat pentru a fi folosit în aplicații radar în anii 1940. De
asemeni folosit în aplicații militare și comunicații care au nevoie de securitate sporită. În ultimii 20
de ani acest tip de modulație ș- a găsit mai multe aplicații practice datorită consumului relativ mic de
putere și rezistență la interferență.

3.2 Rata de transmisie a datelor


În modulația LoRa împrăștierea spectrului este obținută generând un semnal care variază
continuu în frecvența, acest semnal poartă denumirea de chirp. Un avantaj al acestei metode este că
compensările de frecvența și sincronizare între transmițător și receptor sunt echivalente, reducând în
mare măsură complexitatea receptorului. Lățimea de bandă a semnalului modulat este egală cu
lățimea de bandă a semnalului chirp. Semnalul de transmis este modificat să aibă o frecvența mai
mare, iar apoi este modulat cu semnalul chirp. Relație dintre rata datelor obținută, rata simbolurilor
și rata chirp pentru modulația LoRa este denumită după cum urmează:
1
𝑅𝑏 = 𝑆𝐹 ∗ 2𝑆𝐹
𝑏𝑖ț𝑖/𝑠𝑒𝑐S
𝐵𝑊

SF = Factor de împrăștiere (spreading factor) [ 7 … 12]


BW = Banda semnalului modulat (Hz)
Rb = Rata biților dorită (bits /sec)

2𝑆𝐹
𝑇𝑠 = 𝑠𝑒𝑐𝑢𝑛𝑑𝑒
𝐵𝑊
Ts = Perioada unui simbol
1
𝑅𝑆 = 𝑠𝑖𝑚𝑏𝑜𝑙𝑢𝑟𝑖/𝑠𝑒𝑐
𝑇𝑆
Rs = Rata simbolurilor (inversul perioadei)

𝑅𝐶 = 𝑅𝑆 ∗ 2𝑆𝐹 𝑐𝑖𝑝𝑢𝑟𝑖/𝑠𝑒𝑐

18
Rc = Rata semnalului chirp
Rata chirp = un chirp este generat pe secundă pe Hz ai lățimii de bandă

𝑅𝐶 = 𝑅𝑆 ∗ 2𝑆𝐹
𝐵𝑊
𝑅𝐶 = 2𝑆𝐹 *2𝑆𝐹 cipuri/sec

LoRa include și un mecanism de corectare al erorilor care îmbunătățește semnalul transmis, dar cu
costul transmiterii unei informatii redundante.
4
[4 + 𝐶𝑅 ]
𝑅𝑏 = 𝑆𝐹 ∗
2𝑆𝐹
[𝐵𝑊 ]

CR = Rata codului (code rate) [ 1 … 4]


Rata codului reprezintă raportul dintre biții utili trimiși și numărul total de biți transmiși.

3.3 Bugetul de legatura (Link Budget)


Sensibilitatea receptorului in cazul utilizării LoRa :

𝑆 = −174 + 𝑙𝑜𝑔10 𝐵𝑊 + 𝑁𝐹 + 𝑆𝑁𝑅

În relație termenii au următoarele semnificații:

• S reprezintă sensibilitatea receptorului


• BW semnifică banda semnalului
• NF reprezintă factorul de zgomot acceptat de diferite valori alea factorului de împrăștiere
• SNR reprezintă raportul semnal-zgomot
Valori ale NF pentru diferite lățimi de bandă și valori diferite ale SF:

SF
7 8 9 10 11 12
BW
125 kHz −123 −126 −129 −132 −133 −136
250 kHz −120 −123 −125 −128 −130 −133
500 kHz −116 −119 −122 −125 −128 −130
Tabel 3.3.1 Zgomotul maxim acceptat pentru diferite valori ale BW și SF

Bugetul de legături al unui sistem sau rețea fără fir este o măsură a tuturor câștigurilor și
pierderilor din transmițător, prin canalul de propagare, către receptorul țintă. Aceste câștiguri și
pierderi includ câștigurile și pierderile de sistem asociate cu antena, potrivirea rețelelor etc., precum
și pierderile (fie prin modelare, fie prin măsurători). De obicei, sunt luate în considerare mecanisme
de canal care variază aleatoriu, cum ar fi multipath și Doppler contravând marjei suplimentare în
funcție de gravitatea anticipată. Bugetul de legătură al unei conexiuni fără fir poate fi exprimat ca:

𝑃𝑅𝑋 (𝑑𝐵𝑚) = 𝑃𝑇𝑥 (𝑑𝐵𝑚) + 𝐺𝑆𝐼𝑆𝑇𝐸𝑀 (𝑑𝐵) − 𝐿𝑆𝐼𝑆𝑇𝐸𝑀 (𝑑𝐵) − 𝑙𝐶𝐴𝑁𝐴𝐿 (𝑑𝐵)

19
Unde :

• 𝑃𝑅𝑋 – valoarea puterii incidente la receptor


• 𝑃𝑇𝑥 – valoarea puterii la emitațător
• 𝐺𝑆𝐼𝑆𝑇𝐸𝑀 – câștiguri realizate de sistemul de comunicații (cum ar fi cele obținute folosind
antene direcționale), nu cuprinde canalul de comunicații
• 𝐿𝑆𝐼𝑆𝑇𝐸𝑀 – pierderi realizate de sistemul de comunicații dar nu cuprinde canalul de comunicații
• 𝑙𝐶𝐴𝑁𝐴𝐿 – pierderi datorate canalului de comunicații , care pot fi calculate folosind un model
de propagare

Un canal de comunicații se spune că este limitat în legătură atunci când pierderile asociate
canalului fac ca puterea asociată semnalului incident la receptor să fie sub minimul necesar pentru
receptor pentru a demodula corect semnalul transmis. Legături cu interferență limitată. În practică
operarea într-un spectru de licențe nelicențiat nu asigură calitatea serviciului, în opoziție cu operarea
într-un spectru licențiat, pentru care s-a plătit o taxă pentru accesul exclusiv la acea porțiune de
spectru De obicei un dispozitiv care funcționează într-o bandă nelicențiată este mai probabil să fie
afectat de interferență datorită celorlalți utilizatori ai spectrului de frecvența decât de bugetul de
legătură.
Un scenariu tipic are în vedere câteva dispozitive aflate în vecinătate încercând în același
moment de timp să acceseze aceeași bandă de frecvente pentru a transmite. În timp ce sunt mai multe
modalități de atenuare a efectelor interferenței, care pot fi implementate, fie prin intermediul
reglementării (cum ar fi limitarea ciclului de funcționare al emițătorului) sau prin mecanisme cum ar
fi CSMA/CSMA-CA, prin natura nepredictibilă a interferențelor evaluarea canalului de la emițător
poate să nu coincidă cu condițiile canalului de la receptor și transmisia să fie blocată , cu toate că
pentru dispozitivul care transmite, transmisia pare să poată avea loc. Pentru a evita interferența
sistemelor care folosesc transmisii de tip bandă îngustă se implementează frecvent înclinarea
frecvenței (frequency hopping) pentru a evita o operație repetată pe același canal sau frecvența. După
cum se știe această tehnică este folosită de sistemele de bandă îngustă pentru a atenua efectele căilor
multiple de transmisie. Cu toate acestea, reglementările în vigoare spun că schimbarea de frecvența
trebuie să fie pseudo-aleatoare, acest tip de schimbare poate face ca transmițătorul sau receptorul să
facă un salt de frecvența pe un canal deja ocupat, sau un alt dispozitiv să facă trecerea simultan pe
același canal.
Cerință de salt a frecvenței duce la o redundanța a pachetelor, pentru ca receptorul să fie sigur
că mesajul i se adresează, transmițătorul va transmite din nou antetul mesajului, cu toate că
receptoarele moderne au nevoie doar de un mic preambul pentru sincronizare. În plus în majoritatea
sistemelor receptorul rămâne doar pe un canal pentru câteva milisecunde, pentru a minimiza riscul de
interferență pe canal. Pentru o transmisie cu rată mică de date raportul dintre numărul de octeți utili
și numărul total de octeți fiind destul de mic. Orice pierdere de sincronizare între transmițător și
receptor va necesita ca dispozitivele să treacă printr-o perioadă de redescoperire și sincronizare.
Existența semnalelor spectru larg și spectru îngust. După cum am mai vorbit semnalele de tip
bandă îngustă se vor folosi de puterea mai mare concentrată într-o lățime de bandă mai mică și de
saltul de frecvența pentru a transmite într-un spectru de frecvențe unde coexistă și semnale de tip
spectru împrăștiat, pentru ca puterea folosită să fie necesară sistemele bandă îngustă vor utiliza mai
20
multă energie. Însă schimbări recente de reguli în ceea ce privește transmisia în benzile libere de
frecvețe din Statele Unite permit acum dispozitivelor de tip bandă împrăștiată să transmită la o putere
semnificativ mai mare în timp ce se vor încadra în continuare în limitele de densitate spectrală de
putere.Profitând de această actualizare a regulamentelor un semnal modulat LoRa cu lățime de bandă
500 kHz de 6 dB poate transmite până la +27 dBm, aproape de +30 dBm permis pentru semnalele de
bandă îngustă, în cadrul semnalelorde tip bandă largă fără restricții în ceea ce privește timpul de
staționare în respectiva bandă, pe când semnalele de tip bandă îngustă au timp de staționare în bandă
scurt. După cum am mai spus, modulația de tip spectru împrăștiat impactul semnalelor de interferență
este redus. Aceste semnale sunt împrăștiate de procesul de demodulare apoi ușor de eliminat prin
filtrare.
Sistemele cu modulare de bandă îngustă nu împrăștie semnalele interferențe în cadrul
procesului de demodulare și pot suferi pierderi de pachete în prezența unui semnal de interferență de
tip bandă largă. Desigur că și sistemele de modulație de bandă largă sunt supuse de interferență
produse de sisteme de modulație de bandă largă adiacente. Cu toate aceste putem apela la folosirea
pentru semnale de tip bandă largă adiacente de schimbarea factorului de împrăștiere al semnalelor
sau de schimbarea secvenței (chirp) în acest fel cel de al doilea semnal va apărea ca zgomot și prin
urmare va fi ignorat. Durata de transmisie în aer a unui semnal de tip bandă largă poate fi mult mai
lungă decât a unui semnal de bandă îngustă, așa că ne putem aștepta că mai multe semnale bandă
îngustă să fie interferențe cu un singur semnal de tip bandă largă. Însă în domeniul timp interferență
produsă de semnalul bandă îngustă este mică comparativă cu perioada semnalului bandă largă.

Fig 3.3.1 Perioada unui simbol LoRa

𝐶𝑎𝑝𝑎𝑐𝑖𝑡𝑎𝑡𝑒𝑎𝐹𝑆𝐾 = 12 ∗ 1.2 𝑘𝑏/𝑠 = 14.4𝑘 𝑏/𝑠


Datorită redundanței prezente în modulațiile de tip spectru împrăștiat, fiecare bit de date este
răspândit în mai multe chipuri, modulația este relativ rezistență la mecanismul de interferență care
apare ca impulsuri de scurtă durată. Modulația LoRa poate de exemplu să tolereze interferența de
putere arbitrară pe durata a 30 % din perioada unui simbol cu o degradare a sensibilității mai mică de
6 dB. Network planning. Una dintre concepțiile greșite privind utilizare modulației de tip bandă largă
este că ar fi ineficient spectral comparativ cu modulația bandă îngustă, cu toate acestea putem face o
comparație între LoRa și FSK (frequency shift keying). Dacă presupunem că avem disponibilă o
lățime de bandă de 125 kHz, apoi presupunem că în această lățime de bandă avem 12 semnale de tip
21
bandă îngustă cu o rată a biților de 1.2 kb/s, atunci putem calcula teoretic capacitatea canalului. Dacă
luăm în considerare același spectru disponibil ca un singur canal de 125 kHz și folosind avantajul
factorilor de difuzare ortogonali capacitatea echivalentă a canalului este:

𝐶𝑎𝑝𝑎𝑐𝑖𝑡𝑎𝑡𝑒𝑎𝐿𝑜𝑅𝑎 = 1 ∗ (𝑆𝐹12 + 𝑆𝐹111𝑆𝐹10 + 𝑆𝐹9 + 𝑆𝐹8 + 𝑆𝐹7 + 𝑆𝐹6)


= 1 ∗ (293 + 537 + 976 + 1757 + 3125 + 5463 + 9375) 𝑏/𝑠 = 21.531 𝑘𝑏/𝑠

Spreading factor = chip rate / symbol rate, asta înseamnă că un singur simbol este reprezentat de mai
multe chirpuri. Astfel, se poate observă că implementarea modulației LoRa asigură o capacitate totală
a canalului de 21,5 kb / s. Aceasta este o creștere a capacității canalului de aproape 50% în comparație
cu FSK.

3.4 Structura pachetelor LoRA

Pachetele LoRa sunt formate din trei componente:


• Preambul
• Antet (opțional)
• Încărcătură de date
Modemurile LoRa utilizează două formate pentru pachete denumite: format implicit și format
explicit. Pachetul explicit conține un antet scurt care conține informații despre numărul de octeți,
rata de codare și dacă este utilizat sau nu crc (cyclic redundancy check) în pachet. Pachetul are
formatul prezentat mai jos:

Fig 3.4.1 Structura pachetului LoRa

Preambul. Preambulul este folosit pentru a sincroniza receptorul cu fluxul de date de intrare.
Implicit pachetul este configurat cu o secvență de 12 simboluri. Această secvență este programabilă,
astfel încât lungimea preambulului poate fi extinsă. Cu toate acestea secventa minimă pentru
sincronizare este de 12 simboluri. Lungimea preambulului poate fi modificată prin setarea registrului
PreambleLength cu valori cuprinse între 6 și 65535. Dând o lungime posibilă a preambulului de 6 +
4 până la 65535 +4 simboluri, cele 4 simblouri sunt fixate, nu se pot modifică prin intermediul
software.
Receptorul efectuează un proces de detectare a preambulului care repornește periodic. Din acest
motiv lungimea preambulului trebuie să fie setată și la receptor și la emițător identic. În cazul în care

22
lungimea preambulului nu este cunoscută sau poate varia, lungimea maximă a preambulului trebuie
programată pe partea receptorului.
Antet. În funcție de modul de funcționare ales, sunt disponibile două tipuri de antet. Tipul
antetului este selectat de către bitul ImplicitHeaderModeOn care se află în registrul
RegModemConfig1.
Modul de antet explicit. Acesta este modul implicit de funcționare. Aici antetul va furniza
următoarele informații despre pachet: lungime încărcăturii în octeți, rata de corecție a erorilor, dacă
avem sau nu prezent un cod ciclic de redundanță de 16 biți folosit pentru încărcătură, acest cod este
doar pentru detecția erorilor. Valoarea maximă pentru rata de corecție a erorilor este de 4/8, deci
dintr-un total de 8 biți, 4 biți vor fi biți de dat, 4 biți folosiți pentru redundanță. Antetul are propriul
cod de verificare a erorilor, pentru ca un receptor să poată ignora un pachet cu antet corupt.
Modul de antet implicit. În anumite scenarii unde sarcina utilă, rata de codare și prezența
codurilor de detecție a erorilor sunt cunoscute în avans, este avantajos să folosim modul de antet
implicit pentru reducerea timpului de transmisie și reducere a dimensiunii pachetului. În acest mod
antetul este eliminat din pachet. În cazul acesta trebuie configurat manual la receptor și la transmițător
lungimea sarcinii utile, rata de codare a erorilor și prezența sau absența codului detector de erori.
Modul implicit poate fi folosit doar cu factorul de împrăștiere SF = 6.
Modulația LoRa este o implementare simplă pentru nivelul fizic care asigura un buget de legături
semnificativ pentru legături îmbunătățite față de modulația convențională de bandă îngustă. În plus
selectivitatea oferită de modificarea factorului de împrăștiere și protecția crescută la interferență
permit să obținem distanțe mai mari de transmisie chiar și în medii mai puțîn prietenoase. Folosirea
factorilor de împrăștiere ortogonali permite modulației să îmbunătățească eficiența spectrală a rețelei,
deoarece pachetele cu factori diferiți de împrăștiere pot coexista în aceeași bandă spectrală în același
moment de timp.

23
4 Capitolul LoRaWAN
4.1 Noțiuni generale

După cum am vorbit în capitolul precedent LoRa se referă la modulația de tip spectrum
imprăștiat, iar LoRa MAC se referă la nivelul legatură de date correspondent cu stiva OSI (open
systems interconnection). LoRaWAN se referă la protocolul care este construit peste nivelul MAC
pentru a face sistemul mai scalabil.

Fig 4.1.1 Stiva OSI

Rețelele LoRaWAN sunt de obicei construite într-o topologie stea în care concentratoarele
(gateways) transportă mesajele între nodurile rețelei (end devices) și un server de rețea apoi serverul
de rețea ruteaza respectivele pachete la serverul de aplicație care va lua decizii în funcție de pachetele
primate. Pentru a asigura transmisiile radio, protocolul LoRaWAN se bazează pe criptografia
simetrică folosind chei de sesiune derivate din cheile rădăcina ale dispozitivului, acestea fiind 2 chei
asimetrice, generate de producătorul dispozitivului. Vom vorbi mai târziu despre asigurarea securității
în protocolul LoRaWAN ea este implementată cu ajutorul unui dispozitiv extern care poartă denumire
de server de alăturare (join server). Toate comunicațiile sunt de tip bidirecțional, deși comunicarea
majoritară este de la nodurile rețelei (senzori, actuatori etc) către concentratoare. Comunicația între
noduri și concentratoare este împărțită în mai multe canale de diferite frecvențe și folosind diferite
rate de transmisie. Selectarea ratei de transmisie este un compromis între distanță necesară pentru
comunicație și durata mesajului, comunicații cu rate de date diferite nu interferează unele cu altele.
Ratele de transmisie a datelor în LoRa variază de la 0.3 kbps până la 50 kbps. Pentru a
maximiza durata bateriilor nodurilor rețelei cât și capacitatea generală a rețelei, rețeaua LoRa poate
gestiona rata de transmisie a datelor și parametrii comunicației de radiofrecvență ale nodurilor
folosind o schemă de tip rată de transmisie adaptive (adaptive data rate). Un dispozitiv poate folosi
pe orice canal disponibil, în orice moment de timp, folosind orice rată de transmisie a datelor, atât
timp cât regulile următoare sunt respectate. Dispozitivul final (nodul) schimbă canalul într-o
modalitate pseudo-aleatoare pentru fiecare transmisie, diversitatea de frecvența face sistemul mai
rezistent la interferențe. Dispozitivul respectă ciclul de transmie (duty cycle) reglementat în bandă

24
de frecvențe pe care o folosește. Dispozitivul respectă durata maximă de transmisie (timp de
așteptare) în banda locală și în funcție de reglementările local.

4.2 Clase LoraWAN


Toate dispozitivele LoRaWAN trebuie să implementeze cel puțin funcționalitatea de clasa A.
În plus ele mai pot implementa și funcționalități de clasele B și C, dar indiferent de caz toate
dispozitivele trebuie să implementeze funcționalitatea de clasa A.

Fig 4.2.1 LoRa în stiva OSI

Dispozitive bi-direcționale (Clasa A): Dispozitivele de clasa A permit o comunicație de tip


bi-direcțională prin care fiecare dispozitiv periferic (nod) beneficiază de o ferestra de transmisie către
concentrator urmată de două ferestre scurte de ascultare pentru mesaje venite de la concentrator.
Transmisia nodului este bazată pe nevoile sale de transmisie cu mică variație de timp aleatoare
(ALOHA – tipuri de protocoale). Clasa A are un scăzut mic de energie comparative cu clasele B și
C, este potrivită pentru aplicații care necesită comunicații predominant dinspre dispozitivele finale
spre concentratoare (uplink). Iar comunicația în cealaltă direcție, dinspre concentratoare spre
dispozitivele finale poate avea loc doar după ce a avut loc mesajul de tip uplink. Dacă este nevoie să
se transmită un mesaj nodurilor rețelei, acesta va fi reprogramat și transmis doar după ce s-a primit
un mesaj de tip uplink. Dispozitivele bi-direcționale cu sloturi programate de recepție (Clasa B):
Dispozitivele de clasa B permit mai multe sloturi de primire a mesajelor dinspre
concentratoare spre periferia rețelei. Dispozitivele de clasa B deschid ferestre de recepție la ore
programate pentru nodurile rețelei. Pentru ca nodurile să își deschidă fereastră de recepție la ora
programată, primește de la concentrator un mesaj special de sincronizare. Dispozitive bidirecționale
cu sloturi maxime de primire (Clasa C): Dispozitivele terminale de clasa C au ferestre de recepționare
în mod continuu, fiind închise numai atunci când transmit. Dispozitivul terminal de clasa C v-a utiliza
mai multă energie decât clasa A sau clasa B, dar oferă cea mai mică latentă pentru comunicație de la
concentratoare spre periferia rețelei.

25
4.3 Rețele

Rețeaua de tip stea. Rețeaua de tip stea este un tip de rețea ușor de implementat și foarte comun
pentru dispozitivele care au constranwgeri din punct de vedere al energiei consumate. De obicei un
punct central acționează ca concentrator pentru tot traficul generat de rețea. Tot traficul va fi rutat de
către concentrator. O rețea de tip stea minimizează traficul prin rețea. Pentru o rețea care nu este
constrânsă de numărul de linkuri este nevoie doar de 3 dispozitive și două legături pentru a stabili o
comunicație între oricare două dispozitive. În plus nodurile nu sunt conectate decât la concentrator,
fără a fi legate la alte noduri de aici și ușurință de a le înlocui.
Centralizarea ajută și la securitate sporită fiind posibilă scanarea pachetelor dintr-un loc
central. Un mare dezavantaj este faptul că nu avem redundanța în cazul defecțiunii concentratorului.
Rețeaua de tip plasă. În rețeaua de tip plasă datele se propagă prin intermediul tuturor
nodurilor. Acest tip de rețea este cu tip de inundare deoarece fiecare mesaj ajunge la fiecare dispozitiv,
indiferent de rutare sau de destinația finală. Avantajul unei acest tip de configurație îl reprezintă
capacitatea rețelei de a se vindecă și reconfigura în urmă defectării unui dispozitiv sau grup de
dispozitive. Un dezavantaj este complexitatea relative mai mare față de rețelele stea și un traficul
crescut față de rețelele stea. De asemenea un trafic crescut înseamnă și un consum de energie mai
mare, așa că acest tip de rețea nu este implementat în cazul în care rețeaua va avea constrângeri severe
din punct de vedere energetic. Bugetul de legături. Bugetul de legături al unei rețele wireless
reprezintă o măsură a tuturor câștigurilor și pierderilor pornind de la transmițător, prin canalul de
propagare până la receptor. Aceste câștiguri și pierderi pot fi asociate cu antena, canalul de
comunicații precum și pierderi datorate măsurătorilor.
Efecte asociate canalului cum ar fi transmiterea pe mai multe cai și efectul Doppler sunt luate
în considerare atunci când se calculează bugetul de legături de asemeni se mai adaugă și o margine
de rezervă în funcție de anticiparea stării canalului.

26
5 Capitolul SX127X
5.1 Regiștrii
Interfață digitală a modemului. ModemurileLoRa SX1276/77/78/79 au în componentă trei tipuri
de interfețe digitale: registre cu configurație statică, registre de stare și o memorie tampon de tip
primul-intrat primul-ieșit. Toate pot fi accesate prin interfață SPI.
Regiștrii de configurație. Regiștrii de configratie sunt accesați prin intermediul interfeței SPI.
Regiștrii pot fi citiți din orice mod de funcționare care include și modul SLEEP. Însă ei pot fi scriși
doar în modul SLEEP și STANDBY.
Regiștrii de stare. Regiștrii de stare furnizează informații de stare în timpul funcționarii
receptorului. Memoria tampon FIFO. Chipul LoRa SX1276/77/78/79 vine echipat cu 256 octeți RAM
memorie tampon care poate fi accesată doar în modul de funcționare LoRa. Această memorie
denumită memorie tampon de tip primul-intrat primul-ieșit este complet accesibilă utilizatorului și
permit accessul la mesajele trimise, primate și date de configurație. Orice acces la memoria tampon
FIFO se face prin interfața SPI. Această memorie tampon poate fi citită în toate modurile de operare
de aici făcând excepție modul SLEEP și atunci când se stochează conținutul ultimului mesaj primit.

Fig 5.1.1 Memoria SX127X

Principiul de operație. Datorită configurației cu două porturi a memoriei, este posibil simultan
să stocăm atât pachetele care trebuie transmise cât și pachetele primate în memoriei tampon. Registrul
RegFifoTxBaseAddr specifică punctul în memorie unde informația care urmează să fie transmisă este
stocată. Similar pentru operația de recepție registrul RegFifoRxBaseAddr ne indică loculdin memorie
unde informația va fi stocată în cazul unei recepției.
Inițial dispozitivul este configurat la pornire astfel încât jumătate din memoria disponibilă să
fie dedicată recepției (RegFifoRxBaseAddr inițializat la adresa 0x00) iar cealaltă jumătate este
27
dedicate pentru transmisie (RegFifoTxBaseAddr inițializat la adresa 0x80). Totuși adresele de bază
pentru receptive și transmisie sunt configurabile și pot trimite unde dorește programatorul în memoria
de 256 octeți. Pentru a exploata dimensiunea maximă a memoriei tampon în modul de recepție, putem
seta adresa la care trimit cele două registre RegFifoTxBaseAddr și RegFifoRxBaseAddr în partea
inferioară a memoriei (0x00). Conținutul memoriei tampon este șters atunci când dispozitivul este
pus în modul SLEEP, prin urmare accesul la memoria tampon nu este posibilă din modul SLEEP. Cu
toate acestea la comutarea între celelalte moduri conținut memoriei tampon este păstrat, astfel încât
un pachet recepționat să poată fi retransmis cu manipulare minimă a datelor din partea controlerului.
Memoria tampon se eliberează doar atunci când suprascriem datele aflate la o anumită locație
de memorie. Locațiile din memoria tampon care trebuie scrisă sau citită prin intermediul interfeței
SPI este definită de indicator (pointer) RegFifoAddrPtr. Deci înainte de orice operație de scriere sau
citire trebuie inițializat acest pointer cu adresa corespunzătoare. La scrierea sau citirea în memoria
tampon, pointerul de adresă se va incrementă automat.
Registrul RegRxNbBytes definește dimensiunea locului de memorie care trebuie scris în cazul
unei operații de recepție care s-a realizat cu succes. Registrul RegPayloadLength definește
dimensiunea locului de memorie care trebuie utilizat în cazul unei operații de transmisie. În modul
de operare cu antet implicit registrul RegRxNbBytes nu este utilizat deoarece numărul de octeți al
pachetului recepționat este cunoscut în avans. În celălalt mod de operare, modul cu antet explicit,
dimensiune zonei din memoria tampon este setată la lungimea zonei de informație utilă, specificată
în antetul pachetului. Registrul RegFifoRxCurrentAddr indică locația ultimului pachet primit în
memoria tampon, astfel încât ultimul pachet primit poate fi citit cu ușurință utilizând pointerul
RegFifoAddrPtr care pointează către acest registru. Foarte important este că toate datele primite vor
fi scrise în memoria tampon chiar dacă codul de detecție al erorilor indică conținutul pachetului ca
fiind eronat, acest lucru permite prelucrarea ulterioară a utilizatorului a pachetelor cu erori. De
asemeni dacă dimensiunea pachetului recepționat depășește zona din memorie dedicată recepției,
atunci pachetul va fi recepționat și va suprascrie o parte din zona de memorie dedicate transmisiei.
Întreruperi. Două registre sunt utilizate pentru a controla întreruperile atunci folosim modul
LoRa, registrul RegIrqFlagsMask utilizat pentru a masca întreruperile, și registrul RegIrqFlags care
indică ce tip de întrerupere a fost declanșată. În registrul RegIrqFlagsMask fiecare bit corespunde
unei întreruperi, setarea acelui pe 1 logic indică faptul că întreruperea va fi mascată. În mod implicit
toate întreruperile sunt disponibile. În registrul RegIrqFlags un bit cu valoarea de 1 înseamnă
declanșarea unei întreruperi, după servirea întreruperii, bitul trebuie setat cu valoarea 0.

5.2 Moduri de operare ale modemurilor LoRa.

Modul de operare LoRa sunt activate pe modem setând bitul LongRangeMode din registrul
RegOpMode. În funcție de modul selectat avem următoarele cazuri:
SLEEP – Mod economisire energie. În acest mod sunt accesibile doar registrele de configurație prin
intermediul interfeței SPI (serial peripheral interface). Doar în acest mod ne este permis să schimbăm
între modurile FSK/OOK și modul LoRa.
STANBY – Oscilatorul este oprit, cât și blocurile LoRa.
FSTX – Acesta este un mod de sinteză a frecvenței pentru transmisie.

28
FSRX – Acesta este un mod de sinteză a frecvenței pentru recepție.
TX – Când suntem în acest mod chipul SX1276/77/78/79 activează celelalte blocuri necesare pentru
a transmite, pornește amplificatorul de putere, și se întoarce la modul de funcționare STANDBY
RXCONTINUOS - Când suntem în acest mod chipul SX1276/77/78/79 activează celelalte blocuri
necesare pentru a recepționa date, starea această se schimbă doar când sunt modificați regiștrii pentru
a schimba starea de funcționare.
RXSINGLE - Când suntem în acest mod chipul SX1276/77/78/79 activează celelalte blocuri necesare
pentru a recepționa, după recepționarea primului pachet se întoarce la modul de funcționare
STANDBY
CAD - În acest mod chipul va verifica un canal introdus pentru a detecta un preambul de mesaj LoRa
Este posibil să accesăm orice mod din alt mod prin modificarea valorii din registrul
RegOpMode. Erori în setarea frecvenței. Chipul SX1276/77/78/79 își ia frecvența centrală de la un
oscilator care are o precizie limitată. Erorile date de generarea eronată a frecvenței de referință vor
afecta frecvența centrală utilizată în cazul transmisiei, și frecvența pe care se face recepția. În modul
LoRa este posibil să măsurăm diferența de frecvența dintre frecvența centrală pe care ascultă un
receptor și frecvența centrală a unui mesaj de tip LoRa. Modemul este capabil să detecteze un semnal
Mesajele de legătură în sus (uplink). Aceste mesaje sunt transmise de nodurile rețelei prin
intermediul concentratoarelor, unul sau mai multe, în funcție de câte ascultă frecvența respectivă și
respectiva rată de transmisie, către serverul de rețea.
Modul de recepție continuă. În modul de recepție continuu, modemul scanează canal
încontinuu după un preambul. De fiecare dată când sedetectează un preambul, pachetulvafi memorat,
apoi modemul va scana în continuare pentru apariția altui preambul. Dacă lungimea preambulului
depășește valoarea anticipat stabilită de registrele RegPreambleMsb și RegPreambleLsb (măsurate în
perioade de symbol), pachetul nu va fi recepționat, în schimb se va reîncepe ascultarea canalului. În
cazul în care s-a detectat un preambul mai lung nu se declanșează nicio întrerupere. În modul de
recepție continuă nu apare întreruperea RxTimeout (apare un alt semnal de întrerupere), spre
deosebire de modul recepție singulară în care după apariția întreruperii chipul va trece din starea
STANDBY în mod automat.
Este de asemeni important de precizat că octeții recepționați sunt scriși în memoria tampon în
ordinea în care au fost recepționați. Asta înseamnă că primul octet al unui nou pachet va fi scris după
ultimul bit al pachetului precedent. Pointerul Rx nu este reinițializat cât timp lucrăm în modul recepție
continuă, prin urmare este datoria programatorului să se asigure că memoria tampon nu este niciodată
plină.
În modul de recepție continuă secvență prelucrării pachetelor este următoarea:
Din modul SLEEP sau STANDBY se selectează modul RXCONT.
La primirea unui mesaj cu un cod valid de detecție a erorilor este activate întreruperea RxDone.
Modulul rămâne în modul RxCONT așteptând următorul pachet LoRa
Trebuie citită valoarea fanionului PayloadCrcError pentru a verifică integritatea pachetulu
Dacă conținutul mesajului a fost validat de codul detector de erori, putem citi memoria tampon
29
Repetăm pașii 2, 3, 4 până când dorim să schimbăm modul de funcționar
În modul continuu regiștrii conțin informații doar despre ultimul pachet recepționat.
Mesajele de tip ascendențe. Mesajele ascendente sunt mesajele care vin dinspre dispozitivele aflate
la periferia rețelei (senzori, actuatori) trimise prin intermediul concentratoarelor către serverele de
aplicație.
Structura unui pachet ascendant:

Preambul Antet CRC Antet Incarcatura CRC


utila

Câmpurile Antet, CRC Antet și CRC sunt introduse de către modulul radio când utilizăm modul
explicit.
Mesajele de tip descendent. Mesajele descendente sunt mesaje transmise de serverele de aplicație
către unul sau mai multe noduri de rețea si sunt transporatate cu ajutorul concentratoarelor.
Structura unui pachet descendent:

Preambul Antet CRC Antet Incarcatura


utila

Fereastra de recepție:
După fiecare mesaj ascendent fiecare nod trebuie să deschidă două ferestre de recepție a
mesajelor. Momentul de referință pentru începerea ascultării canalului îl reprezintă sfârșitul
transmisiei mesajului ascendent. Voi notacele două ferestre de ascultare cu RX1 și RX2. Prima
fereastră RX1 utilizează aceeași frecvența și aceeași rată de transmisie că și mesajul ascendent. Se
deschide prima fereastră de recepție după așteptarea unui interval de timp RECEIVE_DELAY1 (+/-
20 microsecunde) de la terminarea transmisiei. A doua fereastră RX2 are o frecvența și o rată a datelor
configurabilă. Ascultarea canalului începe după RECEIVE_DELAY2 (+/- 20 microsecunde) de la
terminarea transmisiei. Durata ferestrei de recepție trebuie să fie evident cel puțin egală cu perioada
necesară nodului să detecteze un preambul al pachetului.
Activitatea modemului în timpul ferestrelor de primire. Dacă un preambul este identificat în
timpul unei perioade de recepție, receptorul va sta activat până când se va termină demodularea
pachetului. Dacă pachetul a fost detectat și demodulat, și desigur mesajul destinat acestui nod, și dacă
integritatea pachetului se verifică, dispozitivul trebuie să nu mai deschidă a două fereastră de recepție.
Un nod al rețelei nu trebuie să transmită alt mesaj înainte să primească un mesaj descendent, sau pot
transmite doar după ce au trecut ambele ferestre de așteptare. Mesajele de date sunt utilizate pentru a
transfera atât comenzi MA, cât și date de aplicație, care pot să fie combinate într-un singur mesaj.
Comenzile MAC se află în câmpul antet. Conținutul MAC are câmpurile: antet MAC și opțional mai
poate conține câmpurile: FPort și FRMPayload.

30
Structura antentului:

1 octet 7 octeți 4 octeți

Antet MAC Continut MAC CRC

FHDR FPort FRMPayload

DevAddr FCtrl FCnt FOpts

Tipurile de mesaje MAC. Antetul MAC conține un câmp care se numește MType.
MType este un câmp de 3 biți care descriu 8 mesaje diferite MAC:Cerere alăturare, Acceptare
alăturare, Flux ascendant fără confirmare, Flux descendent fără confirmare, Flux ascendant cu
confirmare, Flux descendent cu confirmare, Menținere alăturare, Proprietar

31
Mtype

000 Cerere alăturare


001 Acceptare alăturare
010 Flux ascendant fără confirmare
011 Flux descendent fără confirmare
100 Flux ascendant cu confirmare
101 Flux descendent cu confirmare
110 Menținere alăturare
111 Proprietar
Tabel 5.2.1 Tipuri de mesaje LoRaWAN

Dacă în antetul unui mesaj, câmpul MType conține valoarea 100 sau 101, confirmed data
activat înseamnă că receptorul va trebui să confirme primirea mesajului, pe un când dacă câmpul
MType conține unconfirmed data receptorul nu trebuie să confirme primirea mesajului. Valoarea
MType 111 care semnifică proprietary, este lăsat liber pentru a implementa noi funcții.
Antetul MAC. Antetul MAC conține adresa dispozitivului (DevAddr), un octet pentru
controlul pachetului (FCtrl) și opțional poate cuprinde opțiuni pentru pachet (FOpts) până la 15 octeti
pentru diferite funcții MAC. Dacă FOpts este prezent acest câmp trebuie criptat.
Conținutul FCtrl pentru mesaje descendente:

7 6 5 4 [3…0]
ADR RFU ACK FPending FOptsLen
Tabel 5.2.2 Conținutul FCtrl pentru mesaje descendente

Conținutul FCtrl pentru mesaje ascendente:

7 6 5 4 [3…0]
ADR ADRACKReq ACK Class B FoptsLen
Tabel 5.2.3 Conținutul FCtrl pentru mesaje ascendente

Controlul vitezei datelor utilizând antetul (ADR, ADRACKReq în FCtrl).


Rețelele LoRa permit dispozitivelor să aleagă individual oricare dintre ratele de transmisie
disponibile. Această caracteristică permite adaptarea și optimizarea ratei de transmisie și puterea
utilizată pentru transmisie. Această caracteristică poartă denumirea de adaptive dată rate (ADR).
Control ADR nu este disponibil atunci când atenuarea canalului radio se schimbă rapid și nu se
oprește. Acest control se poate face și centralizat folosindu-se de serverul de aplicație sau implementat
în fiecare nod fără avea un control centralizat. În cazul în care nu este posibil controlul centralizat
este indicat să se folosească rate de transmisie diferite pentru fiecare dispozitiv pentru o ocupare mai
eficientă a benzii de frecvență. Trebuie micșorat cât mai mult timpul în aer al pachetelor pentru a
evita coliziunile. Dacă pentru mesajele ascendente bitul ADR este setat atunci serverul de aplicație
va controla rata de transmisie a dispozitivelor și puterea de transmisie folosită utilizând comenzile
MAC corespunzătoare. Dacă bitul ADR nu este setat atunci serverul de aplicație nu va încerca să
controleze rata de transmisie sau puterea de transmisie, indiferent de calitatea semnalului recepționat.
Cu toate acestea se pot transmite indiferent de valoarea bitului ADR mesaje pentru a dicta frecvența
centrală folosind de dispozitivul care transmite. Dacă pentru mesajele descendente bitul ADR este
setat atunci dispozitivele periferice sunt informate că serverul de aplicație este în măsură pentru a
32
controla parametrii rețelei. În acest caz serverul de control al rețelei poate modifica pe dispozitivele
periferice valoarea bitului ADR. În cazul în care pentru mesajele descendente bitul nu este setat,
dispozitivele periferice sunt anunțate că datorită schimbărilor rapide în atenuarea canalului rețeaua
nu poate determina valorile necesare pentru o transmisie optimă. În acest caz dispozitivele periferice
pot folosi una din următoarele două strategii: Modifică valoarea bitului ADR, și folosește propria
strategie pentru a configura parametrii transmisiei Ignoră mesajul, și păstrează configurația cea mai
recentă Bitul ADR din configurația dispozitivului poate fi setat și dezactivat de către serverul de
control al rețelei sau de dispozitiv însuși. În orice caz de câte ori este posibil, bitul trebuie setat pentru
a mări durata de viață a bateriei și a optimiza capacitatea rețelei.
Valoare implicită a puterii de transmisie este valoarea maximă permisă de reglementările
regionale și de capacitățile dispozitivului. Dispozitivul ar trebui să utilizeze acest nivel de putere până
în momentul când rețeaua cere mișcorarea acestuia prin intermediul comenzii MAC LinkADRReq.
Dacă rata de transmisiei unui dispozitiv este setată prin intermediul serverului de control al rețelei
diferită de cea implicită, mai mare sau mai mică, dispozitivul trebuie să valideze ca rețeaua încă
primește mesajele. Pentru a valida folosește un mecanism bazat pe un contor ADR_ACK_CNT,
dispozitivul mărește acest contor după fiecare transmisie, și resetează contorul cu valoarea 0 la fiecare
mesaj descendent. Dispozitivul are și un registru ADR_ACK_LIMIT care specifică numărul de
mesaje care pot fi trimise cu rata de transmisie diferită de cea implicită fără a fi nevoie de o nouă
validare din partea rețelei. În momentul când ADR_ACK_CNT >= ADR_ACK_LIMIT, dispozitivul
nu a primit validare din partea rețelei pentru rată de transmisie folosită, următoarele pachete vor avea
setat bitul ADRACKRe.

5.3 Configurația regiștrilor pentru modificarea parametrilor LoRa

Antet explicit. În cazul antetului explicit prezența codului de detecție a erorilor la sfârșitul
sarcinii utile este selectat doar pe partea transmițătorului prin intermediul bitului RxPayloadCrcOn
pe care îl găsim în registrul RegModemConfig1.
Pe partea receptorului bitul RxPayloadCrcOn din registrul RegModemConfig1 nu este
utilizat. Odată ce pachetul a fost recepționat utilizatorul trebuie să verifice bitul CrcOnPayload aflat
în registrul RegHopChannel. Dacă bitul are valoarea 1 atunci utilizatorul trebuie să verifice fanionul
de întrerupere PayloadCrcError pentru a fi sigur că pachetul a fost primit fără erori.
Dacă bitul CrcOnPayload este setat cu valoarea 0 înseamnă că nu există cod de detective a erorilor și
astfel întreruperea dată de PayloadCrcError nu se declanșează chiar dacă pachetul conține erori.

33
Antet Explicit Transmițător Receptor Stare CRC

0 0 CRC nu este verificat


Valoarea bitului 0 1 CRC nu este verificat
RxPayloadCrcOn 1 0 CRC este verificat
1 1 CRC este verificat

Tabel 5.3.1 Utilizarea CRC pentru diferite stări ale bitului RxPayloadCrcOn cazul antetului explicit

Antet implicit. În modul antet implicit este necesar să setați bitul RxPayloadCrcOn în registrul
RegModemConfig1 și pe transmițător și pe receptor.

Antet Implicit Transmițător Receptor Stare CRC

0 0 CRC nu este verificat


Valoarea bitului 0 1 CRC este întotdeauna greșit
RxPayloadCrcOn 1 0 CRC nu este verificat
1 1 CRC este verificat

Tabel 5.3.2 Utilizarea CRC pentru diferite stări ale bitului RxPayloadCrcOn cazul antetului implicit

Optimizarea ratei scăzute a datelor. Având în vedere că folosind factori de împrăștiere cu


valori ridicate (SF = 10, SF = 11, SF = 12) pachetul va petrece mai mult timp în aer, pentru aceasta
avem opțiunea de a îmbunătăți rezistența semnalului la variațiile de frecvența din momentul
transmisiei și recepționării semnalului. Bitul LowDataRateOptimize optimizează pachetele LoRa
pentru transmisiile lente de date. Utilizarea sa este obligatorie atunci când durata simbolului depășește
16 milisecunde. Atât receptorul cât și emițătorul trebuie să aibe aceeași setare pentru acest bit.
Sarcina utilă: Sarcina utilă este un câmp cu lungime variabilă care conține datele utile
codificate la rata de eroare, așa cum este precizat în antetul explicit sau în setările registrului pentru
modul implicit. Un cod de detecție al erorilor mai poate fi atașat doar sarcinii utile. Această sarcina
utilă se va afla după recepția pachetului într-o zona tampon de tip primul intrat primul ieșit (first-în
first-out). Timpul petrecut în aer. Pentru o combinație dată de factor de împrăștiere (SF spreading
factor), rata de codare (CR coding rate) și lățimea de bandă a semnalului (BW bandwidth) timpul de
transmisie a unui pachet LoRa poate fi calculat conform formulei. Putem porni de la formula de bază
care ne spune că timpul în aer este invers proporțional cu rata datelor:

34
6 Capitolul Măsurători
6.1 Măsurători ale performanțelor protocolului

Pentru a reuși să facem o comunicație cu modificarea parametrilor radio, în timpul utilizării


este nevoie mai întâi să vedem ce parametrii pot fi modificați și care este influență lor, unii influențând
mai puțin distanță și consumul de putere, alții mai mult. Pentru a realiza asta mai întâi aveam nevoie
de un indicator care să ne dea indicii despre starea semnalului primit. Pentru aceasta am utilizat
indicatorul rssi (received signal strength indicator). Rssi este un indicator arbitrar cu valori în cazul
nostru în intervalul [0 -128]. Valoarea 0 este valoarea cea mai bună pentru semnalul recepționat, în
schimb valoarea -127 este cea mai mică valoare la care se poate decoda mesajul, și valoarea de -128
înseamnă că parametru rssi nu poate fi calculat. Cei mai importanți parametrii care pot fi modificați
pentru a vedea influență lor asupra distanței de transmisie sunt: puterea de transmisie, bandă
semnalului și factorul de împrăștiere. Cu ajutorul analizorului de spectru am observat foarte clar care
este diferenta intre utilizarea diferitelor valori pentru SF. Respectiv in partea din stanga a imaginii
avem perioada semnalului. In acest caz este vorba despre SF=7 durata mica si SF=12 durata mai
lunga. In imaginea de mai jos se poate vedea cum se modifica semnalul:

Fig 6.1.1 Perioada semnalui pentru SF=7

35
Fig 6.1.2 Perioada semnalului pentru SF=12

Pentru aceste experimente am ales să păstrez bandă constanța, și să o păstrez la valoarea


maximă permisă de 250 Khz. Pentru a ne face o idee despre distanțele care pot fi atinse cu LoRa, am
setat un receptor la etajul șapte al căminului studențesc și am început să fac măsurători ale factorului
rssi variind puterea de transmisie, și variind valoarea factorului de împrăștiere. Prima măsurătoare am
făcut-o chiar în aceeași camera (pune graficul din camera !!!). Apoi am continuat cu alte măsurători
înăuntrul clădirii.După cum era și de așteptat, atenuarea în interiorul clădirii s-a dovedit foarte mare,
nereușind să obținem distanțe notabile folosind rate ale datelor mari, dar având în vedere numărul
mare de alte semnale aflate în aceeași clădire, și pereții despărțitori putem spune că este un rezultat
corect. Cu toate că distanțele nu au fost spectaculoase, am reușit să transmitem de la un capăt la
celălalt al clădirii folosind cele mai mici rate de date disponibile. Și de asemenea am reușit să
transmitem de la etajul 7 până la parter . Pentru distanțe semnificative care nu necesită un debit de
date foarte mare, ceea ce reprezintă o bună partea a proiectelor IoT, și ținând costurile sub control,
este o alternativă notabilă pentru locurile unde nu există acces la internet. Am început să facem
măsurătorile la ora 17, cu distanță dintre transmițătoare fiind de 3 metrii, datorită distanței foarte mici
am început cu rate ale datelor mai mici, iar apoi am trecut la rate mai mici ale datelor. Voi atașa un
grafic cu rezultatele obținute pentru valoarea maximă și minimă a puterii de transmisie și variind data
rate-ul o dată la 4 pachete, testând toate data rate-urile disponibile, mai puțîn cazul în care este folosit
antetul implicit pentru a transmite mai puțină informație de redundanța.

36
Fig 6.1.3 Transmisie la distanța de 3 metrii

Folosind specificația standardului LoRa diferența între două nivele de putere adiacente ar
trebui să fie de 1 dBm, însă din primele măsurători rezultatul ar fi că acest lucru nu se respectă. Aceste
prime măsurători le-am făcut folosindu-mă de plăcuța de recepție care avea și opțiunea de a calcula
valoarea rssi a pachetului primit. Am repetat această măsurătoare datorită suspiciunii mari de erori
măsurate, rezultatele nerespectând standardul LoRa. Următoarele măsurători având același rezultat
am decis să fac o măsurătoare folosind un echipament dedicat Tektronix RSA306B. Am folosit
software Tek SignalVue și am comparat rezultatele raportate de plăcută cu rezultatele date de
analizorul spectral, pentru a vedea cât de corecte sunt măsurătorile realizate de plăcuțe. Pentru prima
măsurătoare am setat puterea de transmisie la valoarea maximă, valoarea teoretică ar fi trebuit să fie
14 dBm. Însă practic valoarea măsurată de receptorul LoRa era de -12 dBm, apoi am făcut o
măsurătoare cu analizorul spectral, și valoarea afișată era de -8 dBm, acesta este singurul caz în care
am legat analizorul direct la receptor în locul antenei. În cazul măsurătorii cu receptorul LoRa am
păstrat antenele la o distanță de 1 metru, antele fiind așezate fiecare pe câte un obiect metalic de
dimensiuni considerabile, în raport cu dimensiunea antenei.

Fig 6.1.4 Măsurători bazate pe informația dată de plăcuței


37
Apoi am departat antenele la o distanta de 3 metrii, si asezandu-le pe o suprafata confectionata
din lemn. Am masurat din nou cu receptorul si cu analizorul de spectru, de data aceasta valorile
masurate au fost mai mici datorita distantei care a crescut si datorita pierderii avantajului dat de
obiectele metalice. In acest caz valoarea rssi raportat de catre receptor pentru puterea de transmisie
maxima a fost de -22 dBm, iar valoarea afisata de analizorul de spectru este de -16 dBm .

Fig 6.1.5 Măsurători folosind analizorul spectral

La masuratorile facute cu analizorul spectral am utilizat aceeasi antena utilizata ca si in caz


masuratorilor realizate cu receptorul LoRa pentru a elimina din factorii care puteau introduce erori
de masura. De asemeni am obervat si influenta pe care o are un obstacol in calea in antenei, in cazul
nostru obstacolele fiind reprezentate de corpurile umane, prezenta lor in zona dintre antene miscorand
valoarea rssi raportata atat in cazul analizorului spectral cat si in cazul receptorului LoRa. Apoi am
micsorat puterea de transmisie, setand-o la cea mai mica valoare disponibila (valoarea parametrului
fiind 2), valoarea teoretica, ar fi trebuit sa fie cu 15 dBm mai putin decat valoarea maxima (valoarea
parametrului fiind 17), reprezentand diferenta dintre parametrii (pentru parametrul setat cu valoarea
17, puterea maxima teoretica avand valoarea de 14 dBm), valoarea maxima masurata in cadrul
experimentului fiind de -8 dBm, din aceste masuri practice rezulta ca valoarea pe care ne asteptam sa
o masuram ar trebui sa fie maxim de 23 dBm (cazul cand avem receptorul legat direct la analizorul
spectral, fara a folosi antene). Am observat cand am facut transmisia in aceasi incapere ca receptorul
primea semnal chiar daca ii scoteam antena, in schimb cu antena pus la receptor dar scoasa la
transmitator nu se putea receptiona nimic.
In prima masuratoare am folosit receptorul impreuna cu analizorul spectral, receptorul fiind
legat la o antenna, iar analizorul spectral deasemeni legat la o antena de acelasi tip. In urma
masuratorii am obtinut urmatoarea valoarea pentru valoarea medie rssi – 31 dBm, la distanta de 2
metrii intre antene. Apoi am masurat si cu receptorul obtinand o valoarea medie foarte apropiata
pentru rssi de -33 dBm. Ceea ce inseamna ca pentru valori relativ mari ale rssi receptorul masoara
destul de bine acest indice, ceea ce inseamna ca se poate stabili un algoritm prin care sa se modifice
dinamic parametrul putere astfel incat sa se optimizeze consumul de energie folosindu-se de valoarea
parametrului rssi, cel putin pentru valori mari. Apoi am incercat o masuratoare in care am pus
transmitatorul in aceeasi cladire la 3 camere distanta si trecand prin 3 pereti grosi, distanta totala fiind
intre receptor si transmitator de 6 metrii. Apoi am depărtat antenele la o distanță de 3 metrii, și
38
așezându-le pe o suprafață confecționată din lemn. Am măsurat din nou cu receptorul și cu analizorul
de spectru, de data aceasta valorile măsurate au fost mai mici datorită distanței care a crescut și
datorită pierderii avantajului dat de obiectele metalice. În acest caz valoarea rssi raportat de către
receptor pentru puterea de transmisie maximă a fost de -22 dBm, iar valoarea afișată de analizorul de
spectru este de -16 dBm .

Fig 6.1.6 Fluctuația factorului rssi

Apoi am făcut măsurători pe teren pentru a vedea cât de bine se comportă transmisia în mediu
urban. Valori la care mă așteptăm pentru distanța de transmisie ar fi de aproximativ 2 km pentru
mediul urban. Posibil mai puțin în acest experiment, datorită folosirii unor transmițător/receptor cu o
performanță medie. Am dorit să analizez și influența factorului de împrăștiere asupra distanței de
transmisie. În cadrul acestei măsurători am folosit SF=7, această valoarea a factorului de împrăștiere
ne dă o rată a datelor de xxx b/s. Formula de calcul pentru rată biților în LoRa fiind ilustrată mai jos.
4
[4 + 𝐶𝑅 ]
𝑅𝑏 = 𝑆𝐹 ∗
2𝑆𝐹
[ ]
𝐵𝑊
În funcție de cerințele aplicației putem modifică parametrii CR, SF, BW. Pentru a obține rata
biților dorită dar și protecția necesară pentru a mari distanță la care se face transmisia. Valori posibile
ale variabilelor ecuației :SF=6,7,8,9,10,11,12; CR = 1,2,3,4; BW = 10.4, 15.6, 20.8, 31.25, 41.7, 62.5,
125, 250, 500 kHz. În cazul experimentului am încercat să obținem o rată cât mai bună a datelor așa
că am folosit următorii parametrii SF=7 ,BW=250 ,CR=1; în urma unui calcul simplu putem vedea
că rata datelor va fi egală cu b/s (rezultă o valoare de 10.681 kb/s). O valoare relativ mică pentru
aplicații care solicită transferuri mari de date dar o valoare suficientă pentru aplicații IoT, unde se
transmit date preluate de senzori și se comandă anumite actuatoare sau motorașe, care în mod obișnuit
nu necesită rate ale datelor foarte mari.

39
Dispozitivul fix a fost amplasat la etajul 7 al clădirii Leu A. Și măsurătorile s-au făcut în
următoarele puncte prezentate în figura 5.1.5. Iar cu dispozitivul mobil m-am deplasat în mai multe
locații pentru a obține raza de transmisie a chipului pentru valoarea cea mai bună a ratei datelor. Am
mărit distanță de unde am făcut transmisia până în momentul în care unul din 30 de pachete nu
conținea mesajul pe care l-am trimis. Acest lucru însemnând o probabilitate de primire a pachetelor
eronate de aproximativ 3.3 %. În figura 13 se poate vedea locurile în care s-au făcut măsurătorile, și
am atașat și grafice ale variației factorului rssi cu schimbarea SF.

Fig 6.1.7 Locuri unde s-au făcut măsurători

Prima locație de unde am făcut măsutori a fost la metrou Politehnica după vis-a-vis de cladirea
IBM, apoi la benzinaria OMV. Rezultatele măsurătorilor sunt atașate în anexă în figurile
A2,A3,A4,A5. În funcție de rezultatele măsurătorilor pentru diferite distanțe am atașat o legendă unde
se poate vedea distanțele obținute pentru diferite valori ale SF pentru a obține o conexiune cu un nivel
de pierde al pachetelor de sub 3,3%. După ce am măsurat pentru SF = 7, au urmat măsurători pentru
SF = 10, SF = 12. Puterea de transmisie a fost setată din software la puterea maximă. Dispozitivul a
fost alimentat în timpul măsurătorilor de la o baterie externă de capacitate 4000 mAh s i a fost conectat
la portul care injectează curent de 2 mA. Puterea a fost suficientă din informațiile care le afișa
Raspberry pi, în schimb am avut probleme cu conectorul de la antena care introducea pierderi mari
de până la -30 dBm.Cu toate acestea am observat în timpul măsurătorilor că am reușit să primim
semnale care aveau factorul RSSI = -127 dBm, valoarea minimă specificată de producătorul Semtech
fiind de -147 dBm. Deci pentru un aparat extern sau o altă sursă de recepție externă, care urmărește
o lățime de bandă mai mare, acest mesaj LoRa va apărea ca scufundat în zgomot și nu se poate
vizualiza, nefiind cazul să fie decodat. Desigur că un receptor centrat pe această frecvența va putea
vizualiza mesajul. Dacă folosim criptare mesajul va putea fi vizualizat dar nu și înțeles, securitatea
transmisiei fiind un subiect de actualitate, mai ales în domeniul IoT.

40
7 Capitolul Implementare
7.1 Implementarea software

Datorită timpului scurt am folosit o librărie care implementează setarea regiștriilor plăcuței
sx127x, acestă librărie este scrisă în limbajul Node js. Pentru a implementa comunicația și a face
măsurători am folosit tot limbajul node js, fiind simplu de importat librăria și de făcut analiză
defectelor software. Desigur folosind acest limbaj am întâmpinat și destule probleme datorită naturii
limbajului node js, fiind defapt derivat din standardul ECMA script care este folosit și pentru
javascript. Codul sursă de node este interpretat de către motorul V8 creat de Google și care este
motorul browserului Chrome. Cel mai dificil pas este de a lucra cu node js pentru utilizarea plăcuței
deoarece node js utilizează pentru mărirea vitezei apelărilor de funcții asincrone. Mai precis pentru
operațiile costisitoare ca timp când sunt implicate și dispozitive periferice, putem face un apel
asincron, mai precis procesul de node nu se va bloca în așteptarea răspunsului de la dispozitivul
periferic în schimb el va memora o adresa de întoarcere, și va continuă execuția codului. Din acest
motiv trebuie să avem grijă la scrierea codului pentru a fi siguri că operația executată de plăcută a
fost dusă cu bine la sfârșit. Dacă nu reușim să ne asigurăm de asta riscăm să generăm situații
inexplicabile care sunt foarte greu de rezolvat și necesită verificarea conținutului regiștriilor.
Importarea implementării MAC disponibilă de git-hub:
Git clone: https://github.com/sandeepmistry/node-sx127x

Această comandă ne copiază codul sursă local pentru a putea face modificări sau a îl utiliza mai
departe.
pi@raspberrypi:~/node_modules $ ls -lrt
total 4
drwxr-xr-x 5 pi pi 4096 Jun 6 19:17 sx127x
In interiorul directorului:
pi@raspberrypi:~/node_modules/sx127x $ ls -lrt
total 36
-rw-r--r-- 1 pi pi 1071 Nov 12 2016 LICENSE
-rw-r--r-- 1 pi pi 42 Nov 12 2016 index.js
-rw-r--r-- 1 pi pi 1219 Nov 12 2016 README.md
-rw-r--r-- 1 pi pi 4339 Nov 12 2016 API.md
-rw-r--r-- 1 pi pi 1708 Jun 6 19:17 package.json
drwxr-xr-x 2 pi pi 4096 Jun 21 22:55 lib
drwxr-xr-x 7 pi pi 4096 Jun 26 22:04 node_modules
drwxr-xr-x 2 pi pi 4096 Jun 27 07:20 examples

41
În directorului lib avem implementarea modurilor de utilizare a transmițătorului LoRa de la
Semtech. Acesta va putea fi importat în orice fișier de tip .js dacă se știe calea acestuia. L-am importat
în index.js pentru a testa dacă funcționează. Am făcut câteva teste simple unde am transmis câteva
mesaje în care conținutul era reprezentat de “Hello” la care am adăugat numărul pachetului, pentru
aceste pachete am afișat parametrii măsurați de receptor: rssi și snr. Pentru a putea face schimb rapid
între modul de transmițător și receptor am adăugat event listener pe anumite combinații de butoane
pentru a funcționa în modul transmițător (CTRL + W) și modul receptor (CTRL + Q). Pentru a realiza
acest lucru am importat un pachet care se numește keypress:
pi@raspberrypi:~ $ npm install keypress
keypress@0.2.1 node_modules/keypress
Apoi am adăugat event listener pe combinațiile de taste specificate :
var keypress = require('keypress');
// folosim `process.stdin` pentru a emite evenimente la apăsarea tastelor
keypress(process.stdin);
// listen for the "keypress" event
process.stdin.on('keypress', function (ch, key) {
console.log('got "keypress"', key);
if (key && key.ctrl && key.name == 'c') {
// cod pentru transmițator || receptor
}
});
Dintre toate transmițătoarele folosite până acum, cele actuale având cel mai mic rssi .
Am transmis urmatoarele mesaje:
pi@raspberrypi:~/node_modules/sx127x/examples $ node p83.js
got "keypress" { name: 'w',
ctrl: true,
meta: false,
shift: false,
sequence: '\u0017' }
open success
write: hello 0
write: hello 1
write: hello 2
42
write: hello 3
write: hello 4
Am si logat tastele apăsate pentru a avea că întradevar corespund .
La recepție am primit următoarele date :
pi@raspberrypi:~$ node p83.js
got "keypress" { name: 'q',
ctrl: true,
meta: false,
shift: false,
sequence: '\u0011' }
open success
receive success
data: 'hello 0' rssi: -20 snr: 12.75
data: 'hello 1' rssi: -21 snr: 12.75
data: 'hello 2' rssi: -22 snr: 11.75
data: 'hello 3' rssi: -23 snr: 12.25
data: 'hello 4' rssi: -25 snr: 12.75
Aceste transmisii inițiale le-am făcut folosind următoarea configurație a parametrilor:
Lățime de bandă: 250 Khz
Putere de transmisie: 2
Factor de împrăștiere: 7 (rata chipurile / rata simbolurilor)
Frecvența: 443 Mhz
Utilizând valoarea 7 pentru factorul de împrastiere însemna că puteam obține cea mai bună rată a
datelor, dar aceasta având influență asupra distanței la care se putea desfașura transmisia.
In implementarea software am realizat deasemeni functia de schimbare a factorului de
imprastiere dinamic la cererea unei parti. Uzual acest lucru poate fi cerut de catre receptor daca
observa ca mesajele primite au parametrul rssi destul de mic si exista riscul de a pierde conexiunea.
Din acest motiv am facut si masuratorile de laborator, sa vad cat de bine interpreteaza receptorul
parametrul rssi pentru un mesaj primit. Dupa cum am spus mai sus, receptorul masoara cu o marja de
eroare destul de mica pentru un mesaj relativ puternic, analizorul spectral aratand o valoare de -8
dBm iar valoarea afisata de placuta era de -14 dBm. Pentru semnale cu valoarea intre -8 dBm si -30
dBm erorile raportate de receptor au avut valori intre -6 dBm si -12 dBm . Insa pentru valori mai mici
ale semnalului, sub -30 dBm valoarea erorilor se incadra intre -20 dBm si -40 dBm, erori foarte mari

43
care pot limita functionarea unui algoritm care sa faca schimbarea dinamica a parametrilor
comunicatiei .
Acest algoritm va adauga informatie in plus care trebuie transmisa si astfel consumand o parte
din simbolurile utile. Desigur ca aceasta implementare trebuie sa fie foarte bine optimizata pentru a
nu folosi multe resurse de calcul, cu toate ca majoritatea micro-computerelor prezente in ziua de astazi
au performante ridicate asta permitand programarea intr-un limbaj mai inalt care face posibili
adaugarea unor functionalitati greu de implementat folosind un limbaj mai apropiat de limbajul
masina. Pentru a usura munca in cazul masuratorilor a care am aratat influenta parametrului rssi
asupra distantei de transmisie, am elaborat un software prin care transmitatorul ii trimite receptorului
un mesaj care il determina sa isi schimbe factorul de imprastiere. In partea codului in care se apeleaza
functia care seteaza valoarea registrilor astfel incat placuta sa functioneze ca receptor, respectiv se
seteaza registrul RegOpMode bitii 0-2 cu valoarea 101, care inseamna ca placuta este setata pe modul
de receptie continua. Apoi in interiorul apelului acestei functii se insereaza in partea care verifica
continutul pachetului inca o verificare pentru un pachet predefinit.
La primirea acestui pachet se apeleaza functia de schimbare a factorului rssi. In cazul meu codul
arata asa :
sx127x.open(function(err) {

console.log('open', err ? err : 'success');

if (err) {

throw err;

sx127x.on('data', function(data, rssi, snr) {

console.log('data:', '\'' + data.toString() + '\'', rssi, ' ', snr);

if (data.toString() == '!_setsfp=10') {

sx127x.setSpreadingFactor(10, function(err) {

console.log('SF : 10 ', err ? err : 'success');

});

});

Apoi in cazul in care se pierdeau prea multe pachete trebuia implementata o functie de reset
a parametrilor care pot fi setati de utilizator. Aceasta se putea implementa automat cu un timeout, de
exemplu in cazul in care mesajele sunt programate sa se trimita la 30 de minute si nu se primeste un
mesaj, placuta sa isi reseteze valorile parametrilor de comunicatie la o valoare standard precizata de
programator. Aceasta implementare ar putea fi foarte nefericita din pricina ceasului care ar putea sa
difere foarte mult in timp de la un dispozitiv la altul si ar crea o stare haotica a intregii retele care ar
fi greu , daca nu imposibil de rezolvat. Asa ca cealalta varianta la care m-am gandit a fost aceea de a
transmite un mesaj care sa fie stiut si de receptor, in momentul primirii acestui mesaj standard
receptorul sa isi reseteze parametrii cu niste parametrii programati. Functia de reset trebuia sa acopere

44
toate valorile factorilor de imprastiere , si trebuia sa tina cont de natura asincrona a limbajului node
js, care la schimbari ale valorilor registrilor ar putea bloca prea multe incercari de scriere a registrilor
in acelasi timp ceea ce ar duce la o exceptie, programul oprindu-se. Pentru aceasta am implementat
un ceas care sa trimita mesajul o data la doua secunde folosind al factor de imprastiere ; problema de
aici fiind cu transmitatorul mesajului de reset care trebuie sa isi schimbe valoarea registrului
SpreadingFactor. Implementarea este atasata pentru a transmite mesajul cu doua valori ale factorului
de imprastiere , fiind similara pentru celelalte :
if (key && key.ctrl && key.name == 'r') {

sx127x.open(function(err) {

console.log('open', err ? err : 'success');

if (err) {

throw err;

function send2() {

if (rst === 1) {

sx127x.setSpreadingFactor(7, function(err) {

console.log('RESET SF : 8 ', err ? err : 'success');

rst = rst + 1;

});

sx127x.write(new Buffer('RESET'), function(err) {

console.log('\t', err ? err : 'success');

console.log('SEND');

});

if (rst === 0) {

sx127x.setSpreadingFactor(12, function(err) {

console.log('RESET SF : 12 ', err ? err : 'success');

rst = rst + 1;

});

sx127x.write(new Buffer('RESET'), function(err) {

console.log('\t', err ? err : 'success');

console.log('SEND');

});

}
45
}

var t1 = setInterval(send2, 2000);

});

Pentru a realiza o retea cu trei noduri am imprumutat inca doua transmitatoare LoRa si am setat o
retea ca in imaginea alaturata :

Fig 7.1.1 Amplasarea nodurilor pentru crearea unei rețele

Scopul a fost pentru a reusi sa obtin o coliziune de pachete. Am transmis pachete numerotate
de la fiecare emitator , scopul era sa vad daca apar pierderi de pachete datorita coliziunii, pentru astfel
de distante mici fiind foarte greu sa am transmisia intrerupta de alti factori. Nereusind pana acum sa
obtin o pierdere de pachete de la aceasta distanta cu urmatoarele setari : SF=7, BW=250 kHz,
TxPower=17. Aceste masuratori le-am facut pastrand acesti parametrii pentru ca masuratorile sa aiba
coerenta. Software-ul pe care l-am scris pentru aceasta masuratoare primeste mesaje numerotate si se
opreste daca pierde un mesaj. Am atasat portiunea de software care este importanta ini acest caz.
Pentru a ilustra ca a avut loc o coliziune. Pentru a folosi cat mai multe pachete, am folosit ca
numerotare variabile cu valori intre 100 si 999. Considerand ca 899 de pachete este un numar suficient
de pachete pentru a beneficia de o congestie. Pentru celelalte doua transmitatoare codul este similar,
diferente doar la conventia pachetelor primite, si in ce variabila se pastreaza contorul care ne indica
numarul de pachete care s-au receptionat cu succes.
if (data.toString() == new RegExp(/t1:.../)) {
46
noOfMsg = data.toString.replace(/\D/g,'');

if( noOfMsg != x){

sx127x.close();

else if( noOfMsg != x){

x=x+1;

});

Pentru a obține schimbarea ratei de transmisie a trebuit să folosesc parametru rssi primit de receptor.
În cazul în care ultimul rssi primit are valoare mai mică decât o valoare presetată anterior, în cazul
meu fiind de -80 dBm , atunci receptorul îi va comunica transmițătorului să iși modifice factorul de
împrăștiere cu unul trimis de el.
Diagrama stărilor prin care trece dispozitivul :

Fig 7.1.2 Diagrama stărilor

47
RegOpMode = 0x01//inițiază plăcuța in modul LoRa
While(true) // buclă infinită
If IRQ1==1// întrerupere ne arată că avem pachete de transmis
Then mem_buff[addr_send]=msg // copiem mesajul in care buffer-ul pentru transmisie
Send(mem_buff[addr_send]) //trimitem informația din buffer
Else // dacă nu avem informație de trimis
If IRQ2 == 1 // verificăm dacă avem pachete de primit
Rpi_memory = mem_buff[rssi] //dacă avem pachet copiem valoarea rssi in
memoria raspberry
If Rpi_memory < -80 //dacă valoarea rssi a pachetului
Then IRQ1 = 1 //atunci avem un pachet de trimis
mem_buff[addr_send] = SET_SF_12 // pachet pentru modificarea valorii SF
Send(mem_buff[addr_send]) //trimitem pachetul

48
Concluzii

Am văzut această lucrare de licență mai mult ca pe o încercare practică de a dobândi o inițiere in
domeniul IoT. Acum înțeleg defapt tehnicile care au favorizat dezvoltarea tehnologiei în această
direcție; o bună parte din avântul acestor tehnologii a fost folosirea modulațiilor de tip bandă îngustă
și de tip bandă largă care utilizează foarte puțină energie pentru a transmite cu ajutorul unor
microcalculatoare informații prelucrate de la diferiți senzori, sau comandă diferite motorașe. De
asemeni prețul scăzut al acestor echipamente și eficientă lor energetică vor duce în viitor la folosirea
pe scară mult mai largă a acestor echipamente, și o dată cu acest pas se va trece la o standardizare a
acestor tehnologii.
Prin încercarea de a implementa această funcție de rată a datelor dinamică mi-am dat seama de toate
problemele care pot apărea atunci când se trece de la gândirea proiectului la implementarea. Dacă in
partea de proiectare nu se iau în calcul toate variabilele si toate lucrurile care nu vor merge așa cum
era de așteptat, atunci proiectul va avea întârzieri mari sau îi va lipsi din funcționalitățile pe care
promitea să le aducă, având doar o parte din ele.
Măsurătorile făcute asupra semnalului LoRa nu au fost de la bun început în plan, ele au apărut ca
necesitate după ce în urma măsurătorilor rezultatele nu au fost cele așteptate. Așa că a fost nevoie de
depanare pentru a remedia lucrurile. Prima problemă a fost un pin introdus greșit, a doua problemă
am întâmpinat-o în momentul în care un dispozitiv nu mai transmitea cu toate că totul arăta bine. A
trebuit să vizionăm pe analizorul de spectru cum arată semnalul trimis de către acest dispozitiv, și
întradevăr acesta nu arăta ca un semnal LoRa, nu am reușit să surprindem la acest semnale fenomenul
de creștere a frecvenței de transmisie, aceasta fiind o caracteristică a semnalelor LoRa. Dacă tot am
reușit să obținem acel analizor de spectru am făcut mai multe măsurători prin care am realizat
pierderile mari introduse de conectorii care fac legătura între antenă si dispozitiv.

49
50
Bibliografie
[1] SX1276/77/78/79 - 137 MHz to 1020 MHz Low Power Long Range Transceiver, Rev. 5 - August
2016 , Semtech Corporation
[2] AN1200.22 - LoRa™ Modulation Basics , Revision 2, May 2015, Semtech Corporation
[3] https://www.raspberrypi.org/documentation/usage/gpio/README.md
[4] https://nodejs.org/en/docs/guides/

51
ANEXE

Fig A.1 Transmisie realizata la metrou Politehnica

Fig A.2 Transmisie IBM Blvd Vasile Milea

52
Fig A.3 Transmisie efectuata la baza militare de pe Iuliu Maniu

Metrou Politehnica
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
-20

-40

-60
RSSI

-80

-100

-120

-140
Numărul pachetului
Transmisia 1 Transmisia 2 Transmisia 3 Transmisia 4
Transmisia 5 Transmisia 6 Transmisia 7

Fig A.4 Rezultate transmisiuni metrou Politehnica

53
IBM (Iuliu Maniu)
-100
1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930313233343536373839

-105

-110
RSSI

-115

-120

-125
Numărul pachetului
Transmisia 1 Transmisia 2 Transmisia 3 Transmisia 4
Transmisia 5 Transmisia 6 Transmisia 7 Transmisia 8

Fig A.5 Rezultate transmisiuni IBM

OMV (Iuliu Maniu)


-106
1 2 3 4 5 6 7 8 9 10111213141516171819202122232425262728293031323334353637
-108

-110

-112

-114
RSSI

-116

-118

-120

-122

-124
Numărul pachetului

Transmisia 1 Transmisia 2

Fig A.6 Rezultate transmisiuni OMV (1)

54
-102
1 2 3 4 5 6 7 8 9 101112131415161718192021222324252627282930313233343536
-104

-106

-108

-110

-112
RSSI

-114

-116

-118

-120

-122

-124
Numărul pachetului
Transmisia 1 Transmisia 2 Transmisia 3 Transmisia 4

Fig A.6 Rezultate transmisiuni OMV (2)

Codul sursă :
var SX127x = require('../index'); // or require('sx127x')
var keypress = require('keypress');
var sx127x = new SX127x({
frequency: 433e6,
signalBandwidth: 250e3,
txPower: 17,
spreadingFactor: 12, //un simbol il scriu pe 12 chip-uri !!!
});
var t = 0;
var count = 0;
var cntlimit = 0;
var txPow = 17;
var rst = 0;
var stop = 7;
keypress(process.stdin);
process.stdin.on('keypress', function(ch, key) {
console.log('got "keypress"', key);
//setare implicita
if (key && key.ctrl && key.name == 'q') {
sx127x.open(function(err) {
console.log('open', err ? err : 'success');
if (err) {
throw err;
}
sx127x.on('data', function(data, rssi, snr) {
console.log('data:', '\'' + data.toString() + '\'', rssi, ' ', snr);
if (data.toString() == 'hello 5') {
sx127x.setSpreadingFactor(11, function(err) {
55
console.log('SF : 11 ', err ? err : 'success');
});
}
if (data.toString() == 'hello 10') {
sx127x.setSpreadingFactor(10, function(err) {
console.log('SF : 10 ', err ? err : 'success');
});
}
if (data.toString() == 'hello 15') {
sx127x.setSpreadingFactor(9, function(err) {
console.log('SF : 9 ', err ? err : 'success');
});
}
if (data.toString() == 'hello 20') {
sx127x.setSpreadingFactor(8, function(err) {
console.log('SF : 8 ', err ? err : 'success');
});
}
if (data.toString() == 'hello 25') {
sx127x.setSpreadingFactor(7, function(err) {
console.log('SF : 7 ', err ? err : 'success');
});
}
if (data.toString() == 'RESET') {
sx127x.setSpreadingFactor(12, function(err) {
console.log('RESET !! SF : 12 ', err ? err : 'success');
});
}
});
// enable receive mode
sx127x.receive(function(err) {
console.log('receive', err ? err : 'success');
});
});
}
//setarea numarul do
if (key && key.ctrl && key.name == 'w') {
sx127x.open(function(err) {
console.log('open', err ? err : 'success');
if (err) {
throw err;
}
cntlimit = count;
function send1() {
console.log('write: hello ' + count);
sx127x.write(new Buffer('hello ' + count++), function(err) {
console.log('\t', err ? err : 'success');
});
if (cntlimit + 5 === count) {

56
clearInterval(t);
}
if (count == 8) {
sx127x.setSpreadingFactor(11, function(err) {
console.log('SF : 11 ', err ? err : 'success');
});
}
if (count == 13) {
sx127x.setSpreadingFactor(10, function(err) {
console.log('SF : 10 ', err ? err : 'success');
});
}
if (count == 18) {
sx127x.setSpreadingFactor(9, function(err) {
console.log('SF : 9 ', err ? err : 'success');
});
}
if (count == 23) {
sx127x.setSpreadingFactor(8, function(err) {
console.log('SF : 8 ', err ? err : 'success');
});
}
if (count == 28) {
sx127x.setSpreadingFactor(7, function(err) {
console.log('SF : 7 ', err ? err : 'success');
});
}
}
var t = setInterval(send1, 1500);
});
}
if (key && key.ctrl && key.name == 'p') {
if (count < 9) {
t = 5;
}
if (count >= 9 && count <= 12) {
t = 10;
}
if (count >= 13 && count <= 18) {
t = 15;
}
if (count >= 19 && count <= 23) {
t = 20;
}
if (count >= 24 && count <= 28) {
t = 25;
}
sx127x.open(function(err) {
console.log('open', err ? err : 'success');

57
if (err) {
throw err;
}
console.log('write: hello ' + count);
sx127x.write(new Buffer('hello ' + t), function(err) {
console.log('\t', err ? err : 'success');
});
});
}
//partea de oprire
if (key && key.ctrl && key.name == 'd') {
// close the device
sx127x.close(function(err) {
console.log('close', err ? err : 'success');
});
}
if (key && key.ctrl && key.name == 'n') {
txPow = txPow - 1;
sx127x.setTxPower(txPow, function(err) {
console.log('TxPow', err ? err : txPow)
});
}
if (key && key.ctrl && key.name == 'b') {
txPow = txPow + 1;
sx127x.setTxPower(txPow, function(err)
console.log('TxPow', err ? err : txPow)
});
}
if (key && key.ctrl && key.name == 't') {
count = 0;
sx127x.setSpreadingFactor(12, function(err) {
console.log('RESET !!! SF : 12 ', err ? err : 'success');
});
}
// RESET !!
if (key && key.ctrl && key.name == 'r') {
sx127x.open(function(err) {
console.log('open', err ? err : 'success');
if (err) {
throw err;
}
function send2() {
if (rst === 6) {
sx127x.setSpreadingFactor(12, function(err) {
console.log('RESET SF : 12 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');

58
console.log('SEND');
});
}
if (rst === stop) {
clearInterval(t1);
rst = 0;
count = 0;
}
if (rst === 5) {
sx127x.setSpreadingFactor(11, function(err) {
console.log('RESET SF : 11 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});
}
if (rst === 4) {
sx127x.setSpreadingFactor(10, function(err) {
console.log('RESET SF : 10 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});
}
if (rst === 3) {
sx127x.setSpreadingFactor(9, function(err) {
console.log('RESET SF : 9 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});
}
if (rst === 2) {
sx127x.setSpreadingFactor(8, function(err) {
console.log('RESET SF : 8 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});
}
if (rst === 1) {

59
sx127x.setSpreadingFactor(7, function(err) {
console.log('RESET SF : 8 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});
}
if (rst === 0) {
sx127x.setSpreadingFactor(12, function(err) {
console.log('RESET SF : 12 ', err ? err : 'success');
rst = rst + 1;
});
sx127x.write(new Buffer('RESET'), function(err) {
console.log('\t', err ? err : 'success');
console.log('SEND');
});

}
}
var t1 = setInterval(send2, 2000);
});
}
if (key && key.ctrl && key.name == 'u') {
console.log('TxPow ! :', sx127x._txPower);
console.log('SF ! :', sx127x._spreadingFactor);
}
});
process.stdin.setRawMode(true);
process.stdin.resume();

60

S-ar putea să vă placă și