- Potřebné materiály
- Propojení Raspberry Pi s LoRa
- Propojení Arduina s LoRa
- pyLoRa pro Raspberry Pi
- Konfigurace modulu Raspberry Pi pro LoRa
- Programování Raspberry Pi pro LoRa
- Arduino kód pro LoRa pro komunikaci s Raspberry Pi
- Testování komunikace LoRa mezi Raspberry Pi a Arduino
LoRa je stále populárnější s příchodem IoT, Connected Cars, M2M, Industry 4.0 atd. Vzhledem ke své schopnosti komunikovat na velké vzdálenosti s velmi malým výkonem ji návrháři s výhodou používají k odesílání / přijímání dat z baterie napájené z baterie. Už jsme diskutovali o základech LoRa a o tom, jak používat LoRa s Arduinem. Ačkoli je technologie původně určena pro uzel LoRa ke komunikaci s bránou LoRa, existuje mnoho scénářů, ve kterých musí uzel LoRa komunikovat s jiným uzlem LoRa, aby si mohl vyměňovat informace na velké vzdálenosti. V tomto výukovém programu se tedy naučíme, jak používat modul LoRa SX1278 s Raspberry pikomunikovat s dalším SX1278 připojeným k mikrokontroléru, jako je Arduino. Tato metoda se může hodit na mnoha místech, protože Arduino by mohlo fungovat jako server, který by načítal data ze senzorů a odesílal je Pi na velkou vzdálenost přes LoRa a poté by Pi jako klient mohl tyto informace přijímat a nahrávat do mohl, protože má přístup k internetu. Zní to zajímavě, že? Pojďme tedy začít.
Potřebné materiály
- Modul LoXa SX1278 433 MHz - 2 č
- 433MHz LoRa anténa - 2Nos
- Arduino UNO nebo jiná verze
- Raspberry Pi 3
Předpokládá se, že váš Raspberry Pi již má nainstalovaný operační systém a je schopen se připojit k internetu. Pokud ne, postupujte podle pokynů v příručce Začínáme s Raspberry Pi. Zde používáme Rasbian Jessie nainstalovanou Raspberry Pi 3.
Varování: Vždy používejte svůj modul SX1278 LoRa s anténami 433 MHz; jinak by se modul mohl poškodit.
Propojení Raspberry Pi s LoRa
Než se pustíme do softwarových balíčků, připravme si hardware. SX1278 je 16-pinový Lora modul, který komunikuje s využitím SPI na 3,3 Logic. Raspberry pi také pracuje na logické úrovni 3,3 V a má také vestavěný port SPI a regulátor 3,3 V. Takže můžeme přímo připojit modul LoRa k Raspberry Pi. Tabulka připojení je uvedena nížeRaspberry Pi | Modul Lora - SX1278 |
3,3 V | 3,3 V |
Přízemní | Přízemní |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Povolit |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Můžete také použít níže uvedené schéma zapojení pro referenci. Všimněte si, že schéma zapojení bylo vytvořeno pomocí modulu RFM9x, který je velmi podobný modulu SX1278, a proto se jeho vzhled může na následujícím obrázku lišit.
Připojení jsou docela přímočará, jediný problém, se kterým se můžete setkat, je, že SX1278 není kompatibilní s prkénkem, proto musíte k připojení použít přímo spojovací vodiče nebo použít dva malé prkénko, jak je uvedeno níže. Jen málo lidí navrhuje napájet modul LoRa samostatnou napájecí lištou 3,3 V, protože Pi nemusí být schopen dodávat dostatek proudu. Nicméně Lora jako modul s nízkým výkonem by měla fungovat na kolejnici 3.3V Pi, testoval jsem to samé a zjistil jsem, že funguje bez problémů. Ale pořád to berte se špetkou soli. Moje nastavení spojení LoRa s Raspberry pi vypadá asi takto níže
Propojení Arduina s LoRa
Připojení modulu Arduino zůstává stejné jako připojení, které jsme použili v našem předchozím tutoriálu. Jediným rozdílem bude, že místo použití knihovny od Sandeep Mistry použijeme knihovnu Rspreal založenou na hlavě rádia, o které budeme diskutovat dále v tomto projektu. Obvod je uveden níže
Opět můžete použít pin 3.3V na Arduino Uno nebo použít samostatný regulátor 3.3V. V tomto projektu jsem použil palubní regulátor napětí. Níže je uvedena tabulka připojení kolíků, která vám usnadní připojení.
Modul LoRa SX1278 | Deska Arduino UNO |
3,3 V | 3,3 V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Protože se modul nevejde do prkénka, použil jsem spojovací vodiče přímo k vytvoření připojení. Jakmile je připojení navázáno, nastavení Arduino LoRa bude vypadat níže
pyLoRa pro Raspberry Pi
Existuje mnoho balíčků pythonu, které můžete použít s LoRa. Raspberry Pi se také běžně používá jako LoRaWAN k získávání dat z více uzlů LoRa. Ale v tomto projektu je naším cílem dělat komunikaci Peer to Peer mezi dvěma moduly Raspberry Pi nebo mezi Raspberry Pi a Arduino. Rozhodl jsem se tedy použít balíček pyLoRa. Má moduly rpsreal LoRa Arduino a rpsreal LoRa Raspberry pi, které lze použít v prostředí Arduino a Raspberry Pi. Prozatím se zaměřme na prostředí Raspberry Pi.
Konfigurace modulu Raspberry Pi pro LoRa
Jak již bylo řečeno, modul LoRa pracuje s komunikací SPI, takže musíme povolit SPI na Pi a poté nainstalovat balíček pylora . Po otevření okna terminálu Pi postupujte podle následujících pokynů. Opět používám tmel k připojení k mému Pi, můžete použít svou pohodlnou metodu.
Krok 1: Vstupte do konfiguračního okna pomocí následujícího příkazu. Chcete-li získat níže uvedené okno
sudo raspi-config
Krok 2: Přejděte na možnosti rozhraní a povolte SPI, jak je znázorněno na obrázku níže. Musíme povolit rozhraní SPI, protože jak jsme diskutovali, LCD a PI komunikují prostřednictvím protokolu SPI
Krok 3: Uložte změny a vraťte se do okna terminálu. Ujistěte se, že pip a python jsou aktualizovány, a pak nainstalujte balíček RPi.GPIO pomocí následujícího příkazu.
pip nainstalujte RPi.GPIO
Tato třída balíčků nám pomůže ovládat pin GPIO na Pi. Pokud bude obrazovka úspěšně nainstalována, bude vypadat takto
Krok 4: Podobně pokračujte v instalaci balíčku spidev pomocí následujícího příkazu. Spidev je vazba pythonu pro Linux, kterou lze použít k provádění komunikace SPI na Raspberry Pi.
pip install spidev
Pokud je instalace úspěšná, měl by terminál vypadat níže.
Krok 5: Další umožňuje nainstalovat balíček pyLoRa pomocí následujícího příkazu pip. Tento balíček nainstaluje modely rádia spojené s LoRa.
pip nainstalujte pyLoRa
Pokud je instalace úspěšná, zobrazí se následující obrazovka.
Balíček PyLoRa také podporuje šifrovanou komunikaci, kterou lze bezproblémově použít s Arduino a Raspberry Pi. Tím se zlepší zabezpečení dat ve vaší komunikaci. Ale po tomto kroku musíte nainstalovat samostatný balíček, který nedělám, protože šifrování není v rozsahu tohoto tutoriálu. Další podrobnosti můžete sledovat na výše uvedených odkazech na github.
Po tomto kroku můžete přidat informace o cestě k balíčku do pi a zkusit program python uvedený na konci. Ale nebyl jsem schopen úspěšně přidat cestu, a proto jsem musel ručně stáhnout knihovnu a použít ji přímo pro své programy. Musel jsem tedy pokračovat v následujících krocích
Krok 6: Stáhněte a nainstalujte balíček python-rpi.gpio a balíček spidev pomocí níže uvedeného příkazu.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Okno terminálu by mělo po obou instalacích něco takového zobrazit.
Krok 7: Nainstalujte také git a poté jej použijte ke klonování adresáře python pro náš Raspberry Pi. Můžete to udělat pomocí následujících příkazů.
sudo apt-get install git sudo git clone
Jakmile je tento krok dokončen, měli byste najít podadresář SX127x v domovské složce Raspberry Pi. To bude mít všechny požadované soubory spojené s knihovnou.
Programování Raspberry Pi pro LoRa
V komunikaci typu peer to peer LoRa se modul, který přenáší informace, nazývá server a modul, který informace přijímá, se nazývá klient. Ve většině případů bude Arduino použito v terénu se senzorem pro měření dat a Pi bude použito pro příjem těchto dat. Rozhodl jsem se tedy v tomto kurzu použít Raspberry Pi jako klienta a Arduino jako server. Kompletní klientský program Raspberry Pi lze nalézt v dolní části této stránky. Zde se pokusím vysvětlit důležité řádky v programu.
Upozornění: Ujistěte se, že programový soubor je ve stejném adresáři, kde je složka knihovny SX127x. Tuto složku můžete zkopírovat a použít kdekoli, pokud chcete přenést projekt.
Program je docela jednoduchý, musíme nastavit modul LoRa tak, aby fungoval na 433 MHz a poté naslouchat příchozím paketům. Pokud něco obdržíme, jednoduše je vytiskneme na konzoli. Jako vždy začneme program importem požadovaných knihoven pythonu.
od importu času spánku z SX127x.LoRa import * z SX127x.board_config import BOARD BOARD.setup ()
V tomto případě se časový balíček používá k vytváření zpoždění, balíček Lora se používá pro komunikaci LoRa a board_config se používá k nastavení parametrů desky a LoRa. Také nastavení deska pomocí BOARD.setup () funkci.
Dále vytvoříme třídu LoRa pythonu se třemi definicemi. Jelikož odsazujeme pouze to, aby program fungoval jako malinový klient, má třída pouze tři funkce, jmenovitě třídu init, třídu start a třídu on_rx_done . Třída init inicializuje modul LoRa na 433 MHz s šířkou pásma 125 kHz, jak je nastaveno v metodě set_pa_config . Poté také přepne modul do režimu spánku, aby šetřil spotřebu energie.
# Výchozí hodnoty středního rozsahu po inicializaci jsou 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 čipů / 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)
Funkce spuštění je tam, kde nakonfigurujeme modul jako přijímač a získáváme jako RSSI (indikátor síly signálu), stav, provozní frekvenci atd. Nastavili jsme modul tak, aby pracoval v režimu nepřetržitého přijímače (RXCONT) z režimu spánku a poté pomocí while smyčky četl hodnoty jako RSSI a stav modemu. Rovněž vypláchneme data v sériové vyrovnávací paměti na terminál.
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 ()
Nakonec se funkce on_rx_done provede po přečtení příchozího paketu. V této funkci jsou přijaté hodnoty přesunuty do proměnné zvané užitečné zatížení z vyrovnávací paměti Rx po nastavení vysokého příznaku příjmu. Poté jsou přijaté hodnoty dekódovány pomocí utf-8 pro tisk uživatelsky čitelných dat na shellu. Také jsme modul uvedli zpět do režimu spánku, dokud nebude přijata další hodnota.
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)
Zbývající částí programu je pouze tisk přijatých hodnot na konzole a ukončení programu pomocí přerušení klávesnice. Znovu jsme desku uvedli do režimu spánku i po ukončení programu, abychom šetřili energii.
vyzkoušejte: lora.start () kromě KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") konečně: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino kód pro LoRa pro komunikaci s Raspberry Pi
Jak jsem již zmínil dříve, kód rpsreal podporuje Arduino i Pi, a proto je možná komunikace mezi Arduino a Pi. Funguje na základě knihovny Radiohead od AirSpayce. Nejprve tedy musíte nainstalovat radiovou knihovnu do svého Arduino IDE.
Chcete-li to provést, navštivte stránku Github a stáhněte si knihovnu do složky ZIP. Poté jej umístěte do složky knihovny ve vašem Arduino IDE. Nyní restartujte Arduino IDE a najdete ukázkové soubory pro hlavní knihovnu rádia. Zde naprogramujeme Arduino tak, aby fungovalo jako server LoRa, aby odesílal testovací pakety jako 0 až 9. Kompletní kód pro totéž najdete ve spodní části této stránky jako vždy. Zde vysvětlím několik důležitých řádků v programu.
Program začneme importem knihovny SPI (ve výchozím nastavení nainstalována), aby bylo možné použít protokol SPI, a poté knihovnu RH_RF95 z Radio Head k provedení komunikace LoRa. Poté definujeme, ke kterému pinu Arduina jsme připojili pin Chip select (CS), Reset (RST) a Interrupt (INT) LoRa s Arduino. Nakonec také definujeme, že modul by měl pracovat na frekvenci 434 MHz a inicializovat modul LoRa.
#zahrnout
Uvnitř nastavení funkce budeme resetovat modul Lora vytažením jeho resetovací pin na minimum po dobu 10 mili sekundu začít znovu. Poté jej inicializujeme modulem, který jsme vytvořili dříve pomocí hlavní knihovny rádia. Poté nastavíme frekvenci a přenosový výkon pro server LoRa. Čím vyšší je přenos, tím větší vzdálenost vaše pakety urazí, ale spotřebují více energie.
void setup () { // Inicializovat Serial Monitor Serial.begin (9600); // Reset modulu LoRa pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); zpoždění (10); digitalWrite (RFM95_RST, HIGH); zpoždění (10); // Inicializace modulu LoRa while (! Rf95.init ()) { Serial.println ("LoRa radio init failed"); while (1); } // Nastavit výchozí frekvenci 434,0MHz if (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency failed"); while (1); } rf95.setTxPower (18); // Přenosový výkon modulu Lora }
Uvnitř funkce nekonečné smyčky musíme jednoduše odeslat datový paket přes modul LoRa. Tato data mohou být cokoli jako hodnota senzoru uživatelského příkazu. Ale pro jednoduchost pošleme char hodnotu 0 až 9 na každý 1sekundový interval a poté inicializujeme hodnotu zpět na 0 po dosažení 9. Všimněte si, že hodnoty lze odeslat pouze ve formátu char pole a typ dat by měl být unit8_t že je 1 bajt najednou. Níže uvedený kód je stejný
void loop () { Serial.print ("Odeslat:"); char radiopacket = char (hodnota)}; rf95.send ((uint8_t *) radiopacket, 1); zpoždění (1000); hodnota ++; if (hodnota> '9') hodnota = 48; }
Testování komunikace LoRa mezi Raspberry Pi a Arduino
Nyní, když jsme připravili jak hardware, tak program, musíme jednoduše nahrát Arduino kód na UNO desku a python skica by měla být spuštěna na pi. Moje testovací nastavení s připojeným hardwarem vypadá níže
Jakmile je skica klienta pythonu spuštěna na Pi (použijte pouze python 3), pokud vše funguje správně, měli byste vidět pakety Arduino přijaté v pi přes okno shellu. Měli byste si všimnout „Přijato: 0“ až 9, jak je znázorněno na obrázku níže.
Kompletní Raspberry pi kód se všemi požadovanými knihovnami si můžete stáhnout zde.
Nyní můžete přesunout server Arduino a zkontrolovat dosah modulu; v případě potřeby je také možné zobrazit hodnotu RSSI na shellu. Úplné fungování projektu lze nalézt na videu odkazujeme níže. Nyní, když víme, jak navázat komunikaci LoRa na nízkou vzdálenost mezi Arduino a Raspberry pi, můžeme pokračovat přidáním senzoru na straně Arduino a cloudové platformy na straně Pi, abychom vytvořili kompletní balíček IoT.
Doufám, že jste pochopili projekt a užili jste si jeho stavbu. Pokud máte problém s uvedením do provozu, použijte sekci s komentáři níže nebo fóra pro další technické dotazy.