- Potrebni materijali
- Povezivanje Raspberry Pi s LoRa
- Povezivanje Arduina s LoRa
- pyLoRa za Raspberry Pi
- Konfiguriranje modula Raspberry Pi za LoRa
- Programiranje Raspberry Pi za LoRa
- Arduino kôd za LoRa za komunikaciju s Raspberry Pi
- Testiranje LoRa komunikacije između Raspberry Pi i Arduino
LoRa je sve popularnija pojavom IoT-a, povezanih automobila, M2M-a, Industrije 4.0 itd. Zbog svoje sposobnosti komunikacije na velike udaljenosti s vrlo manje snage, dizajneri je poželjno koriste za slanje / primanje podataka s Thinga na baterije. Već smo razgovarali o osnovama LoRa i kako koristiti LoRa s Arduinom. Iako je tehnologija izvorno namijenjena LoRa čvoru za komunikaciju s LoRa pristupnikom, postoji mnogo scenarija u kojima LoRa čvor mora komunicirati s drugim LoRa čvorom radi razmjene informacija na velike udaljenosti. Dakle, u ovom uputstvu naučit ćemo kako koristiti LoRa modul SX1278 s Raspberry piza komunikaciju s drugim SX1278 povezanim s mikrokontrolerom poput Arduina. Ova metoda može vam dobro doći na mnogim mjestima, jer Arduino može djelovati kao poslužitelj za dohvaćanje podataka sa senzora i slanje na Pi na daljinu putem LoRa, a zatim Pi koji djeluje kao klijent može primiti te podatke i prenijeti ih na mogao jer ima pristup internetu. Zvuči zanimljivo zar ne? Pa, krenimo.
Potrebni materijali
- SX1278 433MHz LoRa modul - 2 br
- 433MHz LoRa antena - 2Br
- Arduino UNO- ili druga verzija
- Raspberry Pi 3
Pretpostavlja se da je vaš Raspberry Pi već spojen s operativnim sustavom i da se može povezati s internetom. Ako nije, slijedite upute za Početak rada s Raspberry Pi prije nego što nastavite. Ovdje koristimo Rasbian Jessie instaliran Raspberry Pi 3.
Upozorenje: Uvijek koristite svoj SX1278 LoRa modul s antenama od 433 MHz; inače bi se modul mogao oštetiti.
Povezivanje Raspberry Pi s LoRa
Prije nego što uđemo u softverske pakete, pripremimo hardver. SX1278 je 16-pin Lori modula koji je povezan pomoću SPI na 3.3V logike. Raspberry pi također radi na 3.3V logičkoj razini, a također ima ugrađeni SPI port i 3.3V regulator. Tako možemo izravno povezati LoRa modul s Raspberry Pi. Tablica veza prikazana je u nastavku| Raspberry Pi | Lora - SX1278 modul |
| 3,3 V | 3,3 V |
| Prizemlje | Prizemlje |
| GPIO 10 | MOSI |
| GPIO 9 | MISO |
| GPIO 11 | SCK |
| GPIO 8 | Nss / Omogući |
| GPIO 4 | DIO 0 |
| GPIO 17 | DIO 1 |
| GPIO 18 | DIO 2 |
| GPIO 27 | DIO 3 |
| GPIO 22 | RST |
Za referencu također možete koristiti donji dijagram spojeva. Imajte na umu da je shema sklopova stvorena pomoću modula RFM9x koji je vrlo sličan modulu SX1278, pa se izgled može razlikovati na donjoj slici.

Veze su prilično ravne, jedini problem s kojim biste se mogli suočiti je taj što SX1278 nije kompatibilan s pločama, pa morate za povezivanje izravno koristiti spojne žice ili upotrijebiti dvije male ploče kako je prikazano u nastavku. Također malo ljudi sugerira da se LoRa modul napaja zasebnom 3.3V naponom, jer Pi možda neće moći dati dovoljno struje. Međutim, Lora kao modul male snage trebao bi raditi na 3.3V željezničkoj pruzi od Pija, testirao sam isti i otkrio da radi bez problema. Ali, ipak ga uzmite s malo soli. Moja postavka veze LoRa s Raspberry pi izgleda nekako ovako u nastavku

Povezivanje Arduina s LoRa
Veza za Arduino modul ostaje ista kao ona koju smo koristili u našem prethodnom vodiču. Jedina će razlika biti u tome što ćemo umjesto korištenja knjižnice iz Sandeep Mistryja koristiti knjižnicu Rspreal koja se temelji na radijskoj glavi, o čemu ćemo razgovarati kasnije u ovom projektu. Krug je naveden u nastavku

Opet možete koristiti 3.3V pin na Arduino Uno ili koristiti zasebni regulator od 3.3V. U ovom projektu koristio sam ugrađeni regulator napona. Tablica pin priključaka data je u nastavku kako bi vam pomogla da lako uspostavite veze.
| LoRa SX1278 modul | Arduino UNO odbor |
| 3,3 V | 3,3 V |
| Gnd | Gnd |
| En / Nss | D10 |
| G0 / DIO0 | D2 |
| SCK | D13 |
| MISO | D12 |
| MOSI | D11 |
| RST | D9 |
Budući da modul ne stane u ploču za povezivanje, za povezivanje sam izravno koristio spojne žice. Nakon uspostavljanja veze, postavljanje Arduino LoRa izgledat će otprilike ovako u nastavku

pyLoRa za Raspberry Pi
Postoji mnogo python paketa koje možete koristiti s LoRa. Također se često Raspberry Pi koristi kao LoRaWAN za dobivanje podataka iz više LoRa čvorova. Ali, u ovom projektu želimo postići peer to peer komunikaciju između dva Raspberry Pi modula ili između Raspberry Pi i Arduina. Stoga sam odlučio koristiti paket pyLoRa. Ima rpsreal LoRa Arduino i rpsreal LoRa Raspberry pi module koji se mogu koristiti na Arduinu i Raspberry Pi okruženju. Za sada se usredotočimo na okruženje Raspberry Pi.
Konfiguriranje modula Raspberry Pi za LoRa
Kao što je ranije rečeno, LoRa modul radi sa SPI komunikacijom, tako da moramo omogućiti SPI na Pi, a zatim instalirati paket pylora . Slijedite korake u nastavku da biste učinili isto, nakon otvaranja prozora terminala Pi. Opet, koristim kit za povezivanje s mojim Pi-om, možete koristiti svoj prikladan način.
Korak 1: Uđite u prozor za konfiguraciju pomoću sljedeće naredbe. Da biste dobili donji prozor
sudo raspi-config


Korak 2: Idite na opcije povezivanja i omogućite SPI kao što je prikazano na donjoj slici. Moramo omogućiti SPI sučelje, jer kao što smo razgovarali, LCD i PI komuniciraju putem SPI protokola

Korak 3: Spremite promjene i vratite se na prozor terminala. Obavezno ažurirajte pip i python, a zatim instalirajte paket RPi.GPIO pomoću sljedeće naredbe.
pip instalirati RPi.GPIO
Ova klasa paketa pomoći će nam u kontroli GPIO pina na Pi. Ako je uspješno instaliran, vaš će zaslon izgledati ovako

Korak 4: Slično nastavite s instaliranjem paketa spidev pomoću sljedeće naredbe. Spidev je python vezanje za Linux koje se može koristiti za obavljanje SPI komunikacije na Raspberry Pi.
pip instalirati spidev
Ako je instalacija uspješna, terminal bi trebao izgledati otprilike ovako u nastavku.

Korak 5: Sljedeći omogućuje instalaciju paketa pyLoRa pomoću sljedeće naredbe pip. Ovaj paket instalira radio modele povezane s LoRa.
pip instalirati pyLoRa
Ako je instalacija uspješna, vidjet ćete sljedeći zaslon.

Paket PyLoRa također podržava šifriranu komunikaciju koja se bez problema može koristiti s Arduinom i Raspberry Pi. To će poboljšati sigurnost podataka u vašoj komunikaciji. Ali nakon ovog koraka morate instalirati zasebni paket, što ja ne radim, jer šifriranje nije u opsegu ovog vodiča. Možete slijediti gornje github veze za više detalja.
Nakon toga, u ovaj korak možete dodati podatke o putanji paketa u pi i pokušati s programom python danim na kraju. Ali nisam uspio dodati stazu, pa sam morao ručno preuzeti knjižnicu i koristiti je izravno za svoje programe. Zato sam morao nastaviti sa sljedećim koracima
Korak 6: Preuzmite i instalirajte python-rpi.gpio paket i spidev paket pomoću naredbe u nastavku.
sudo apt-get instalirati python-rpi.gpio python3-rpi.gpio sudo apt-get instalirati python-spidev python3-spidev
Prozor terminala trebao bi prikazati nešto slično nakon obje instalacije.


Korak 7: Također instalirajte git, a zatim ga upotrijebite za kloniranje python direktorija za našu Raspberry Pi. To možete učiniti pomoću sljedećih naredbi.
sudo apt-get install git sudo git klon

Nakon što je ovaj korak završen , trebali biste pronaći poddirektorij SX127x u početnoj mapi Raspberry Pi. Ovo će imati sve potrebne datoteke povezane s knjižnicom.
Programiranje Raspberry Pi za LoRa
U ravnopravnoj LoRa komunikaciji modul koji prenosi informacije naziva se poslužitelj, a modul koji prima informacije zove se klijent. U većini slučajeva Arduino će se koristiti na terenu sa senzorom za mjerenje podataka, a Pi će se koristiti za primanje tih podataka. Dakle, odlučio sam koristiti Raspberry Pi kao klijent, a Arduino kao poslužitelj u ovom vodiču. Kompletan malina Pi klijentski program može se naći na dnu ove stranice. Ovdje ću pokušati objasniti važne redove u programu.
Oprez: Provjerite je li programska datoteka u istom direktoriju u kojem je mapa knjižnice SX127x. Možete kopirati ovu mapu i koristiti je bilo gdje ako želite prenijeti projekt.
Program je prilično jednostavan, moramo postaviti LoRa modul da radi na 433 MHz, a zatim preslušati dolazne pakete. Ako nešto primimo, jednostavno ih ispisujemo na konzoli. Kao i uvijek započinjemo program uvozom potrebnih python biblioteka.
od vremena uvoz spavanje sa SX127x.LoRa uvoz * sa SX127x.board_config uvoz BOARD BOARD.setup ()
U ovom slučaju vremenski paket koristi se za stvaranje kašnjenja, Lora paket koristi se za LoRa komunikaciju, a board_config koristi za postavljanje parametara ploče i LoRa. Također postavljamo ploču pomoću funkcije BOARD.setup () .
Dalje kreiramo python LoRa klasu s tri definicije. Budući da uvlačimo samo da bi program radio kao klijent maline, klasa ima samo tri funkcije, a to su klasa init, klasa start i klasa on_rx_done . Klasa init inicijalizira LoRa modul na 433MHz sa 125kHz propusnom širinom kako je postavljeno u metodi set_pa_config . Tada modul također stavlja u stanje mirovanja radi uštede energije.
# Zadane vrijednosti srednjeg dometa nakon pokretanja su 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 čipova / simbol, CRC na 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (self, verbose = False): super (LoRaRcvCont, self).__ init __ (opširno) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Funkcija pokretanja je mjesto gdje konfiguriramo modul kao prijemnik i dobivamo poput RSSI-a (indikatora jačine prijemnog signala), statusa, radne frekvencije itd. Podesili smo modul da radi u načinu kontinuiranog prijamnika (RXCONT) iz stanja mirovanja, a zatim pomoću petlje while čita vrijednosti poput RSSI i statusa modema. Također ispiremo podatke iz serijskog međuspremnika na terminal.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) while True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Napokon se funkcija on_rx_done izvršava nakon čitanja dolaznog paketa. U ovoj se funkciji primljene vrijednosti premještaju u varijablu koja se naziva korisni teret iz Rx međuspremnika nakon postavljanja visoko primljene zastave. Zatim se primljene vrijednosti dekodiraju pomoću utf-8 za ispis korisničkih čitljivih podataka na ljusci. Također vraćamo modul u stanje mirovanja dok se ne primi druga vrijednost.
def on_rx_done (self): print ("\ nPrimljeno:") self.clear_irq_flags (RxDone = 1) payload = self.read_payload (nocheck = True) print (bytes (payload).decode ("utf-8", 'ignore'))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Preostali dio programa je samo ispis primljenih vrijednosti na konzoli i završavanje programa pomoću prekida na tipkovnici. Ponovo smo postavili ploču u stanje mirovanja čak i nakon prekida programa radi uštede energije.
probajte: lora.start () osim KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") konačno: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino kôd za LoRa za komunikaciju s Raspberry Pi
Kao što sam ranije spomenuo, rpsreal kôd podržava i Arduino i Pi i stoga je moguća komunikacija između Arduina i Pi. Djeluje na temelju knjižnice Radiohead iz AirSpayce's. Dakle, prvo morate instalirati knjižnicu radijske glave na svoj Arduino IDE.
Da biste to učinili, posjetite Github stranicu i preuzmite biblioteku u ZIP mapu. Zatim ga stavite u mapu knjižnice vašeg Arduino IDE-a. Sada ponovo pokrenite Arduino IDE i naći ćete primjere datoteka za knjižnicu Radio head. Ovdje ćemo Arduino programirati da radi kao LoRa poslužitelj za slanje testnih paketa poput 0 do 9. Kompletni kôd koji će učiniti isto nalazi se na dnu ove stranice kao i uvijek. Ovdje ću objasniti nekoliko važnih redaka u programu.
Program započinjemo uvozom SPI knjižnice (koja je instalirana prema zadanim postavkama) za upotrebu SPI protokola, a zatim biblioteke RH_RF95 iz glave Radio za obavljanje LoRa komunikacije. Zatim definiramo na koji pin Arduina smo povezali čip za odabir (CS), Reset (RST) i Interrupt (INT) pin LoRa s Arduinom. Napokon također definiramo da bi modul trebao raditi na frekvenciji 434MHz i inicijalizirati LoRa modul.
#include
Unutar funkcije postavljanja resetirat ćemo LoRa modul povlačenjem njegovog igle za resetiranje na 10 sekundi, kako bi započeo svježe. Zatim ga inicijaliziramo modulom koji smo ranije kreirali pomoću knjižnice Radio head. Zatim postavljamo frekvenciju i snagu prijenosa za LoRa poslužitelj. Što je prijenos veći, to će veći udaljenost prijeći vaši paketi, ali će trošiti više energije.
void setup () { // Inicijalizirajte serijski monitor Serial.begin (9600); // Resetiranje LoRa modula pinMode (RFM95_RST, IZLAZ); digitalWrite (RFM95_RST, LOW); kašnjenje (10); digitalWrite (RFM95_RST, HIGH); kašnjenje (10); // Inicijalizirajte LoRa modul dok (! Rf95.init ()) { Serial.println ("LoRa radio init nije uspio"); dok (1); } // // Postavite zadanu frekvenciju 434,0 MHz ako (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency failed"); dok (1); } rf95.setTxPower (18); // Snaga prijenosa modula Lora }
Unutar funkcije beskonačne petlje , jednostavno moramo poslati podatkovni paket putem LoRa modula. Ti podaci mogu biti bilo što poput vrijednosti senzora korisničke naredbe. Ali radi jednostavnosti, poslat ćemo vrijednost char 0 do 9 za svaki interval od 1 sekunde, a zatim inicijalizirati vrijednost natrag na 0 nakon postizanja 9. Imajte na umu da se vrijednosti mogu slati samo u formatu polja s charom, a vrsta podataka treba biti unit8_t koja je 1 bajt odjednom. Kôd za isto je prikazan u nastavku
petlja void () { Serial.print ("Pošalji:"); char radiopaket = char (vrijednost)}; rf95.send ((uint8_t *) radiopaket, 1); kašnjenje (1000); vrijednost ++; if (vrijednost> '9') vrijednost = 48; }
Testiranje LoRa komunikacije između Raspberry Pi i Arduino
Sad, kad smo pripremili i svoj hardver i program, jednostavno moramo prenijeti Arduino kôd na UNO ploču i skica pythona trebala bi se pokrenuti na pi. Moja testna postavka s oba spojena hardvera izgleda ovako otprilike u nastavku

Jednom kad se pokrene skica klijenta python na Pi (koristite samo python 3), ako sve radi ispravno, trebali biste vidjeti Arduino pakete primljene u pi kroz prozor ljuske. Trebali biste primijetiti "Primljeno: 0" do 9, kao što je prikazano na donjoj slici.

Kompletni Raspberry pi kod sa svim potrebnim bibliotekama možete preuzeti ovdje.
Sada možete premjestiti Arduino poslužitelj i provjeriti domet modula; po potrebi je moguće prikazati i vrijednost RSSI na ljusci. Kompletan radni projekta može se naći u video vezom u nastavku. Sada, kada znamo kako uspostaviti LoRa komunikaciju niske snage na velike udaljenosti između Arduina i Raspberry pi, možemo nastaviti s dodavanjem senzora na Arduino strani i oblačne platforme na Pi strani kako bismo napravili cjelovit IoT paket.
Nadam se da ste razumjeli projekt i uživali u njegovoj izradi. Ako imate problema s radom, upotrijebite odjeljak za komentare u nastavku ili forume za ostale tehničke upite.
