- Potrebné materiály
- Prepojenie Raspberry Pi s LoRa
- Prepojenie Arduina s LoRa
- pyLoRa pre Raspberry Pi
- Konfigurácia modulu Raspberry Pi pre LoRa
- Programovanie Raspberry Pi pre LoRa
- Arduino kód pre komunikáciu LoRa s Raspberry Pi
- Testovanie komunikácie LoRa medzi Raspberry Pi a Arduino
LoRa je čoraz obľúbenejší s príchodom IoT, Connected Cars, M2M, Industry 4.0 atď. Vďaka svojej schopnosti komunikovať na veľké vzdialenosti s veľmi menším výkonom ju dizajnéri prednostne používajú na odosielanie a príjem dát z batérie Thing. Už sme hovorili o základoch LoRa a o tom, ako používať LoRa s Arduinom. Aj keď je táto technológia pôvodne určená na komunikáciu s uzlom LoRa pomocou brány LoRa, existuje veľa scenárov, v ktorých musí uzol LoRa komunikovať s iným uzlom LoRa, aby si mohol vymieňať informácie na veľké vzdialenosti. V tomto tutoriále sa teda dozvieme, ako používať modul LoRa SX1278 s Raspberry pikomunikovať s iným SX1278 pripojeným k mikrokontroléru ako Arduino. Táto metóda sa môže hodiť na mnohých miestach, pretože Arduino by mohlo fungovať ako server na načítanie údajov zo senzorov a ich odoslanie na Pi na veľkú vzdialenosť prostredníctvom LoRa a potom môže Pi pôsobiaci ako klient tieto informácie prijať a nahrať ich do mohol, pretože má prístup k internetu. Znie to zaujímavo, že? Takže poďme na to.
Potrebné materiály
- Modul LoXa SX1278 433 MHz - 2 čísla
- 433MHz LoRa anténa - 2Nos
- Arduino UNO alebo iná verzia
- Raspberry Pi 3
Predpokladá sa, že váš Raspberry Pi už má nainštalovaný operačný systém a je schopný sa pripojiť na internet. Ak nie, postupujte podľa pokynov v návode Začíname s Raspberry Pi. Tu používame Rasbian Jessie nainštalovaný Raspberry Pi 3.
Varovanie: Vždy používajte svoj modul SX1278 LoRa s anténami 433 MHz; inak by sa modul mohol poškodiť.
Prepojenie Raspberry Pi s LoRa
Než sa pustíme do softvérových balíkov, pripravme si hardvér. SX1278 je 16-pinový Lora modul, ktorý komunikuje s využitím SPI na 3,3 Logic. Raspberry pi tiež pracuje na logickej úrovni 3,3 V a má tiež zabudovaný port SPI a regulátor 3,3 V. Takže môžeme priamo spojiť modul LoRa s Raspberry Pi. Tabuľka pripojení je uvedená nižšieMalinový koláč | Modul Lora - SX1278 |
3,3 V | 3,3 V |
Uzemnenie | Uzemnenie |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Povoliť |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Môžete tiež použiť nižšie uvedenú schému zapojenia. Upozorňujeme, že schéma zapojenia bola vytvorená pomocou modulu RFM9x, ktorý je veľmi podobný modulu SX1278, a preto sa jeho vzhľad môže na nasledujúcom obrázku líšiť.
Pripojenia sú celkom priame, problémom, s ktorým sa môžete stretnúť, je iba to, že model SX1278 nie je kompatibilný s doskou, preto na jeho pripojenie musíte použiť priamo spojovacie vodiče alebo použiť dve malé nepájivé pole, ako je uvedené nižšie. Len málokto navrhuje, aby bol modul LoRa napájaný samostatnou napájacou lištou 3,3 V, pretože Pi nemusí byť schopný zabezpečiť dostatočný prúd. Avšak Lora ako modul s nízkym výkonom by mala fungovať na 3,3 V koľajnici Pi, otestoval som to isté a zistil som, že funguje bez akýchkoľvek problémov. Ale stále to berte so štipkou soli. Moje nastavenie spojenia LoRa s Raspberry pi vyzerá asi takto nižšie
Prepojenie Arduina s LoRa
Pripojenie pre modul Arduino zostáva rovnaké, aké sme použili v našom predchádzajúcom tutoriáli. Jediný rozdiel bude v tom, že namiesto použitia knižnice od Sandeep Mistry použijeme knižnicu Rspreal založenú na rádiovej hlave, o ktorej sa budeme ďalej rozprávať v tomto projekte. Obvod je uvedený nižšie
Opäť môžete použiť pin 3.3V na Arduino Uno alebo použiť samostatný regulátor 3.3V. V tomto projekte som použil palubný regulátor napätia. Tabuľka pinových pripojení je uvedená nižšie, aby vám pomohla ľahko vykonať pripojenia.
Modul LoRa SX1278 | Rada Arduino UNO |
3,3 V | 3,3 V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Pretože sa modul nezmestí na nepájivú dosku, použil som priamo na pripojenie spojovacie vodiče. Po vytvorení spojenia bude nastavenie Arduino LoRa vyzerať asi takto nižšie
pyLoRa pre Raspberry Pi
Existuje veľa balíkov pythonu, ktoré môžete použiť s LoRa. Raspberry Pi sa tiež bežne používa ako LoRaWAN na získavanie údajov z viacerých uzlov LoRa. Ale v tomto projekte je naším cieľom robiť komunikáciu Peer to Peer medzi dvoma modulmi Raspberry Pi alebo medzi Raspberry Pi a Arduino. Rozhodol som sa teda použiť balíček pyLoRa. Má rpsreal LoRa Arduino a rpsreal LoRa Raspberry pi moduly, ktoré môžu byť použité v prostredí Arduino a Raspberry Pi. Zatiaľ sa zamerajme na prostredie Raspberry Pi.
Konfigurácia modulu Raspberry Pi pre LoRa
Ako už bolo povedané, modul LoRa pracuje s komunikáciou SPI, takže musíme povoliť SPI na Pi a potom nainštalovať balík pylora . Podľa rovnakých pokynov urobte to isté po otvorení okna terminálu Pi. Opäť používam tmel na pripojenie k môjmu Pi, môžete použiť svoju pohodlnú metódu.
Krok 1: Prejdite do konfiguračného okna pomocou nasledujúceho príkazu. Ak chcete získať nižšie okno
sudo raspi-config
Krok 2: Prejdite na možnosti prepojenia a povoľte SPI, ako je to znázornené na obrázku nižšie. Musíme povoliť rozhranie SPI, pretože ako sme hovorili, LCD a PI komunikujú prostredníctvom protokolu SPI
Krok 3: Uložte zmeny a vráťte sa späť do okna terminálu. Uistite sa, že pip a python sú aktualizované, a potom nainštalujte balíček RPi.GPIO pomocou nasledujúceho príkazu.
pip nainštaluj RPi.GPIO
Táto trieda balíka nám pomôže ovládať pin GPIO na Pi. Ak bude obrazovka úspešne nainštalovaná, bude vyzerať takto
Krok 4: Podobne postupujte pri inštalácii balíka spidev pomocou nasledujúceho príkazu. Spidev je väzba pythonu pre Linux, ktorú je možné použiť na vykonávanie SPI komunikácie na Raspberry Pi.
pip nainštalovať spidev
Ak je inštalácia úspešná, terminál by mal vyzerať asi takto nižšie.
Krok 5: Ďalej umožníme nainštalovať balíček pyLoRa pomocou nasledujúceho príkazu pip. Tento balík inštaluje modely rádia spojené s LoRa.
pip nainštaluj pyLoRa
Ak je inštalácia úspešná, uvidíte nasledujúcu obrazovku.
Balík PyLoRa podporuje aj šifrovanú komunikáciu, ktorú je možné bez problémov používať s procesormi Arduino a Raspberry Pi. Týmto sa zvýši bezpečnosť údajov vo vašej komunikácii. Ale po tomto kroku musíte nainštalovať samostatný balík, ktorý nerobím, pretože šifrovanie nie je v rozsahu tohto tutoriálu. Ak chcete získať viac informácií, môžete sledovať vyššie uvedené odkazy na github.
Potom môžete v tomto kroku pridať informácie o ceste k balíku pi a vyskúšať program python uvedený na konci. Ale nebol som schopný úspešne pridať cestu, a preto som musel ručne stiahnuť knižnicu a použiť ju priamo pre svoje programy. Musel som teda pokračovať v nasledujúcich krokoch
Krok 6: Stiahnite a nainštalujte si balík python-rpi.gpio a spidev pomocou nasledujúceho príkazu.
sudo apt-get nainštalovať python-rpi.gpio python3-rpi.gpio sudo apt-get nainštalovať python-spidev python3-spidev
Po oboch inštaláciách by sa v okne terminálu malo zobraziť niečo také.
Krok 7: Nainštalujte tiež git a potom ho použite na klonovanie adresára python pre náš Raspberry Pi. Môžete to urobiť pomocou nasledujúcich príkazov.
sudo apt-get install git sudo git clone
Po dokončení tohto kroku by ste mali nájsť podadresár SX127x v domovskom priečinku Raspberry Pi. To bude mať všetky požadované súbory spojené s knižnicou.
Programovanie Raspberry Pi pre LoRa
V komunikácii typu peer to peer LoRa sa modul, ktorý prenáša informácie, nazýva server a modul, ktorý informácie prijíma, sa nazýva klient. Vo väčšine prípadov sa Arduino použije v teréne so senzorom na meranie údajov a Pi sa použije na príjem týchto údajov. Preto som sa v tomto tutoriále rozhodol použiť Raspberry Pi ako klienta a Arduino ako server. Kompletný klientský program Raspberry Pi možno nájsť v dolnej časti tejto stránky. Tu sa pokúsim vysvetliť dôležité riadky v programe.
Upozornenie: Skontrolujte, či je programový súbor v rovnakom adresári, v ktorom je aj priečinok knižnice SX127x. Tento priečinok môžete skopírovať a použiť kdekoľvek, ak chcete preniesť projekt.
Program je veľmi jednoduchý, musíme nastaviť modul LoRa tak, aby pracoval na frekvencii 433 MHz a potom čakať na prichádzajúce pakety. Ak niečo dostaneme, jednoducho si ich vytlačíme na konzolu. Ako vždy začneme program importom požadovaných knižníc pythonu.
od času import spánku z SX127x.LoRa import * z SX127x.board_config import BOARD BOARD.setup ()
V tomto prípade sa časový balík používa na vytváranie oneskorení, balík Lora sa používa na komunikáciu LoRa a board_config sa používa na nastavenie parametrov dosky a LoRa. Tiež nastavenie doska pomocou BOARD.setup () funkciu.
Ďalej vytvoríme triedu python LoRa s tromi definíciami. Pretože sme odsadili iba to, aby program fungoval ako malinový klient, trieda má iba tri funkcie, a to triedu init, triedu start a triedu on_rx_done . Trieda init inicializuje modul LoRa na frekvencii 433 MHz so šírkou pásma 125 kHz, ako je stanovené v metóde set_pa_config . Potom tiež prepne modul do režimu spánku kvôli šetreniu spotreby energie.
# Predvolené hodnoty stredného rozsahu po inicializácii sú 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 čipov / symbol, CRC na 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (self, verbose = False): super (LoRaRcvCont, self).__ init __ (verbose) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Funkcia spustenia je taká, kde nakonfigurujeme modul ako prijímač a získame napríklad RSSI (indikátor sily signálu), stav, pracovnú frekvenciu atď. Nastavili sme modul tak, aby pracoval v režime nepretržitého prijímača (RXCONT) z režimu spánku a potom pomocou while cyklu načítal hodnoty ako RSSI a stav modemu. Taktiež vyprázdňujeme údaje v sériovej vyrovnávacej pamäti na terminál.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) zatiaľ čo True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Nakoniec sa funkcia on_rx_done vykoná po prečítaní prichádzajúceho paketu. V tejto funkcii sa prijaté hodnoty presunú do premennej nazývanej užitočné zaťaženie z vyrovnávacej pamäte Rx po nastavení vysokého príznaku príjmu. Potom sa prijaté hodnoty dekódujú pomocou utf-8 na tlač užívateľsky čitateľných údajov na shell. Taktiež sme modul uviedli späť do režimu spánku, kým nedostaneme ďalšiu hodnotu.
def on_rx_done (self): print ("\ nReceived:") 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)
Zvyšnou časťou programu je iba tlač prijatých hodnôt na konzolu a ukončenie programu pomocou prerušenia klávesnice. Z dôvodu úspory energie sme dosku opäť nastavili do režimu spánku aj po ukončení programu.
skúste: lora.start () okrem KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") nakoniec: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino kód pre komunikáciu LoRa s Raspberry Pi
Ako som už spomínal, kód rpsreal podporuje Arduino aj Pi, a preto je možná komunikácia medzi Arduino a Pi. Funguje na základe knižnice Radiohead od spoločnosti AirSpayce. Musíte si teda najskôr nainštalovať hlavnú knižnicu rádia do svojho Arduino IDE.
Ak to chcete urobiť, navštívte stránku Github a stiahnite si knižnicu do priečinka ZIP. Potom ho umiestnite do priečinka knižnice vo vašom Arduino IDE. Teraz reštartujte IDE Arduino a nájdete vzorové súbory pre hlavnú knižnicu rádia. Tu naprogramujeme Arduino tak, aby fungovalo ako server LoRa na odosielanie testovacích paketov ako 0 až 9. Kompletný kód, ktorý urobí to isté, nájdete ako vždy v spodnej časti tejto stránky. Tu vysvetlím niekoľko dôležitých riadkov v programe.
Program začneme importom knižnice SPI (predvolene nainštalovanej), aby sme na komunikáciu LoRa mohli používať protokol SPI, a potom knižnicu RH_RF95 z hlavice Radio. Potom definujeme, ku ktorému kolíku Arduina sme pripojili kolík Chip select (CS), Reset (RST) a Interrupt (INT) LoRa s Arduinom. Nakoniec tiež definujeme, že modul by mal pracovať na frekvencii 434 MHz a inicializovať modul LoRa.
#include
Vnútri nastavenie funkcie budeme resetovať modul Lora vytiahnutím jeho resetovacie pin na minimum po dobu 10 mili sekundu začať znova. Potom ho inicializujeme modulom, ktorý sme vytvorili skôr pomocou hlavnej knižnice Radio. Potom sme nastavili frekvenciu a vysielací výkon pre server LoRa. Čím je prenos vyšší, tým väčšiu vzdialenosť vaše pakety prejdú, ale spotrebujú viac energie.
void setup () { // Inicializovať Serial Monitor Serial.begin (9600); // Reset LoRa modulu pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); oneskorenie (10); digitalWrite (RFM95_RST, HIGH); oneskorenie (10); // Inicializácia modulu LoRa while (! Rf95.init ()) { Serial.println ("LoRa radio init failed"); while (1); } // Nastaviť predvolenú frekvenciu 434,0 MHz, ak (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency failed"); while (1); } rf95.setTxPower (18); // Prenosový výkon modulu Lora }
Vo vnútri funkcie nekonečnej slučky musíme jednoducho odoslať dátový paket cez modul LoRa. Tieto údaje môžu byť čokoľvek ako hodnota senzora príkazu používateľa. Ale pre jednoduchosť pošleme char hodnotu 0 až 9 na každý 1 sekundový interval a potom inicializujeme hodnotu späť na 0 po dosiahnutí 9. Upozorňujeme, že hodnoty je možné odosielať iba vo formáte char array a typ údajov by mal byť unit8_t je naraz 1 bajt. Kód, ktorý urobí to isté, je uvedený nižšie
void loop () { Serial.print ("Send:"); char radiopacket = char (hodnota)}; rf95.send ((uint8_t *) radiopacket, 1); oneskorenie (1 000); hodnota ++; if (hodnota> '9') hodnota = 48; }
Testovanie komunikácie LoRa medzi Raspberry Pi a Arduino
Teraz, keď sme pripravili náš hardvér aj program, musíme jednoducho nahrať Arduino kód na dosku UNO a pythonový náčrt by mal byť spustený na pi. Moje testovacie nastavenie s pripojeným hardvérom vyzerá nižšie
Po spustení skice klienta pythonu na Pi (použite iba python 3), ak všetko funguje správne, mali by ste vidieť balíčky Arduino prijaté v pi cez okno shellu. Mali by ste si všimnúť „Prijaté: 0“ až 9, ako je to znázornené na obrázku nižšie.
Kompletný kód Raspberry pi so všetkými požadovanými knižnicami si môžete stiahnuť odtiaľto.
Teraz môžete presunúť server Arduino a skontrolovať dosah modulu; v prípade potreby je tiež možné zobraziť hodnotu RSSI na shell. Úplné fungovania projektu možno nájsť na videu odkazujeme nižšie. Teraz, keď vieme, ako nadviazať komunikáciu LoRa s nízkou spotrebou na malú vzdialenosť medzi Arduino a Raspberry pi, môžeme pokračovať pridaním senzora na strane Arduino a cloudovej platformy na strane Pi, aby sme vytvorili kompletný balík IoT.
Dúfam, že ste pochopili projekt a páčilo sa vám jeho zostavenie. Ak máte problém s uvedením do prevádzky, použite technickú požiadavku v sekcii komentárov nižšie alebo na fórach.