- Szükséges anyagok
- A Raspberry Pi összekapcsolása a LoRa-val
- Arduino és LoRa összekapcsolása
- pyLoRa a Raspberry Pi számára
- A Raspberry Pi beállítása a LoRa modulhoz
- Raspberry Pi programozása a LoRa számára
- Arduino kód a LoRa számára, hogy kommunikáljon a Raspberry Pi-vel
- LoRa kommunikáció tesztelése Raspberry Pi és Arduino között
A LoRa egyre népszerűbb az IoT, a Connected Cars, az M2M, az Industry 4.0 stb. Megjelenésével. Mivel nagy távolságra, nagyon alacsony energiával képes kommunikálni, a tervezők ezt előnyösen arra használják, hogy adatokat küldjenek / fogadjanak akkumulátorral működő Thing-től. A LoRa alapjait és a LoRa használatának módját már megbeszéltük az Arduinóval. Noha a technológiát eredetileg egy LoRa csomópontnak szánták kommunikálni egy LoRa átjáróval, sok olyan eset van, amikor egy LoRa csomópontnak kommunikálnia kell egy másik LoRa csomópontdal, hogy információt cseréljen nagy távolságra. Tehát ebben az oktatóanyagban megtanuljuk, hogyan kell használni az SX1278 LoRa modult a Raspberry pi programmalkommunikálni egy másik SX1278-zal, amely olyan mikrovezérlőhöz csatlakozik, mint az Arduino. Ez a módszer sok helyen jól jöhet, mivel az Arduino szerverként működhet, hogy adatokat lehessen lekérni az érzékelőkből és nagy távolságra elküldje a Pi-nek a LoRa-n keresztül, majd az ügyfélként működő Pi megkapja ezeket az információkat, és feltöltheti a lehet, mivel hozzáfér az internethez. Érdekesen hangzik, igaz? Tehát kezdjük.
Szükséges anyagok
- SX1278 433MHz LoRa modul - 2 sz
- 433MHz LoRa antenna - 2Nos
- Arduino UNO- vagy más verzió
- Málna Pi 3
Feltételezzük, hogy a Raspberry Pi már operációs rendszerrel rendelkezik és képes csatlakozni az internethez. Ha nem, akkor a folytatás előtt kövesse az Első lépések a Raspberry Pi ismertetővel. Itt a Rasbian Jessie által telepített Raspberry Pi 3 szoftvert használjuk.
Figyelem: Mindig használja az SX1278 LoRa modult 433 MHz-es antennákkal; különben a modul megsérülhet.
A Raspberry Pi összekapcsolása a LoRa-val
Mielőtt belekezdenénk a szoftvercsomagokba, készítsük elő a hardvert. Az SX1278 egy 16 tűs Lora modul, amely az SPI használatával kommunikál a 3,3 V-os logikán. A Raspberry pi 3,3 V-os logikai szinten működik, és beépített SPI porttal és 3,3 V-os szabályzóval is rendelkezik. Így közvetlenül összekapcsolhatjuk a LoRa modult a Raspberry Pi-vel. A csatlakozási táblázat az alábbiakban láthatóRaspberry Pi | Lora - SX1278 modul |
3.3V | 3.3V |
Talaj | Talaj |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Engedélyezés |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Az alábbi kapcsolási rajzot is felhasználhatja referenciaként. Vegye figyelembe, hogy a kapcsolási rajzot az RFM9x modul segítségével hozták létre, amely nagyon hasonlít az SX1278 modulhoz, ezért a megjelenés az alábbi képen eltérhet.
A csatlakozások eléggé előre irányulnak, egyetlen probléma, amellyel szembesülhet, hogy az SX1278 nem kompatibilis a kenyérlemezzel, ezért közvetlenül a csatlakozó vezetékeket kell használnia a csatlakozások létrehozásához, vagy két kis kenyérlapot kell használni, az alábbiak szerint. Ugyancsak kevesen javasolják a LoRa modul külön 3,3 V-os tápellátással történő ellátását, mivel a Pi nem biztos, hogy elegendő áramot képes biztosítani. Ugyanakkor Lora alacsony fogyasztású modulnak a Pi 3,3 V-os sínjén kell működnie, ugyanezt teszteltem, és azt tapasztaltam, hogy probléma nélkül működik. De mégis vegyél egy csipet sóval. A LoRa és a Raspberry pi összeköttetésének beállítása az alábbiak szerint néz ki
Arduino és LoRa összekapcsolása
Az Arduino modul kapcsolata ugyanaz marad, mint az előző oktatóanyagunkban. Az egyetlen különbség abban áll, hogy ahelyett, hogy a Sandeep Mistry könyvtárát használnánk, az Rspreal könyvtárat fogjuk használni a Radio head alapján, amelyet később a projekt során megvitatunk. Az áramkört az alábbiakban adjuk meg
Ismét használhatja a 3,3 V-os tűt az Arduino Uno-on, vagy használhat egy külön 3,3 V-os szabályozót. Ebben a projektben a fedélzeti feszültségszabályozót használtam. A csatlakozótáblázat az alábbiakban található, amely megkönnyíti a csatlakozások létrehozását.
LoRa SX1278 modul | Arduino UNO Igazgatóság |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Mivel a modul nem illeszkedik kenyérlapba, a csatlakozásokat közvetlenül a csatlakozó vezetékekkel használtam. Miután a kapcsolat létrejött, az Arduino LoRa beállítása az alábbiak szerint fog kinézni
pyLoRa a Raspberry Pi számára
Számos python csomag használható a LoRa-val. Szintén általában a Raspberry Pi-t használják LoRaWAN-ként több LoRa-csomópont adatainak lekéréséhez. De ebben a projektben az a célunk, hogy a Peer to Peer kommunikációt folytassuk két Raspberry Pi modul, vagy egy Raspberry Pi és egy Arduino között. Tehát úgy döntöttem, hogy a pyLoRa csomagot használom. Van egy rpsreal LoRa Arduino és rpsreal LoRa Raspberry pi modulja, amelyek az Arduino és a Raspberry Pi környezetben használhatók. Most egyelőre a Raspberry Pi környezetre összpontosítsunk.
A Raspberry Pi beállítása a LoRa modulhoz
Mint korábban elmondtuk, a LoRa modul az SPI kommunikációval működik, ezért engedélyeznünk kell az SPI-t a Pi-n, majd telepítenünk kell a pylora csomagot. Kövesse az alábbi lépéseket ugyanezhez, miután megnyitotta a Pi terminálablakát. Ismét gittet használok, hogy csatlakozzak a Pi-hez, használhatja a kényelmes módszert.
1. lépés: A következő paranccsal lépjen be a konfigurációs ablakba. Az alábbi ablak eléréséhez
sudo raspi-config
2. lépés: Keresse meg az interfészbeállításokat, és engedélyezze az SPI-t az alábbi képen látható módon. Meg kell engedélyezni az SPI interfész, mert ahogy megbeszéltük az LCD és a PI keresztül kommunikál SPI protokoll
3. lépés: Mentse el a módosításokat, és térjen vissza a terminál ablakához. Győződjön meg arról, hogy a pip és a python frissítve van, majd telepítse az RPi.GPIO csomagot a következő paranccsal.
pip telepítse az RPi.GPIO fájlt
Ez a csomagosztály segít nekünk irányítani a Pi GPIO gombját. Sikeres telepítés esetén a képernyő így fog kinézni
4. lépés: Hasonlóképpen folytassa a spidev csomag telepítését a következő paranccsal. A Spidev egy python-kötés a Linux számára, amely felhasználható SPI kommunikáció végrehajtására a Raspberry Pi-n.
pip install spidev
Ha a telepítés sikeres, a terminálnak ilyennek kell kinéznie az alábbiakban.
5. lépés: Ezután a következő pip paranccsal telepítheti a pyLoRa csomagot. Ez a csomag telepíti a LoRa-hoz társított rádiómodelleket.
pip telepítse a pyLoRa-t
Ha a telepítés sikeres, a következő képernyőt fogja látni.
A PyLoRa csomag támogatja a titkosított kommunikációt is, amelyet az Arduino és a Raspberry Pi zökkenőmentesen használhat. Ez javítja a kommunikáció adatbiztonságát. De a lépés után külön csomagot kell telepítenie, amit nem csinálok, mivel a titkosítás nem tartozik az oktatóanyag körébe. A részletekért kövesse a fenti github linkeket.
Ezt követően ezt a lépést hozzáadhatja a csomag elérési útjának információihoz a pi-hez, és megpróbálhatja a végén megadott python programmal. De nem sikerült sikeresen hozzáadni az elérési utat, ezért kézzel kellett letöltenem a könyvtárat, és ugyanazt kellett használnom közvetlenül a programjaimhoz. Tehát a következő lépéseket kellett végrehajtanom
6. lépés: Töltse le és telepítse a python-rpi.gpio csomagot és a spidev csomagot az alábbi paranccsal.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
A terminál ablakának ilyet kell mutatnia mindkét telepítés után.
7. lépés: Telepítse a git programot is, majd klónozza a Raspberry Pi python könyvtárát. Ezt a következő parancsokkal teheti meg.
sudo apt-get install git sudo git klón
Miután ez a lépés befejeződött, meg kell találnia az SX127x alkönyvtárat a Raspberry Pi otthoni mappájában. Ehhez az összes szükséges fájl társul a könyvtárhoz.
Raspberry Pi programozása a LoRa számára
A peer to peer LoRa kommunikációban az információt továbbító modult kiszolgálónak, az információt fogadó modult pedig kliensnek nevezzük. A legtöbb esetben az Arduino-t egy szenzorral ellátott mezőben használják az adatok mérésére, a Pi-t pedig az adatok fogadására. Tehát úgy döntöttem, hogy a Raspberry Pi-t kliensként, az Arduino-t pedig kiszolgálóként használom ebben az oktatóanyagban. A teljes Raspberry Pi kliens program az oldal alján található. Itt megpróbálom elmagyarázni a program fontos vonalait.
Vigyázat: Győződjön meg arról, hogy a programfájl ugyanabban a könyvtárban található, ahol az SX127x könyvtár mappa található. Másolhatja ezt a mappát, és bárhol használhatja, ha portot szeretne adni a projektre.
A program nagyon egyszerű, be kell állítanunk a LoRa modult 433 MHz-es működésre, majd meg kell hallgatnunk a bejövő csomagokat. Ha bármit kapunk, egyszerűen kinyomtatjuk őket a konzolra. Mint mindig, a programot a szükséges python könyvtárak importálásával kezdjük.
időtől kezdve alvó állapotot importál az SX127x- ből. LoRa import * az SX127x.board_config fájlból importálás BOARD BOARD.setup ()
Ebben az esetben az időcsomagot használják késések létrehozására, a Lora csomagot a LoRa kommunikációra, a board_config pedig a tábla és a LoRa paraméterek beállítására. A táblát a BOARD.setup () függvény segítségével is beállítjuk.
Ezután létrehozzuk a python LoRa osztályt három definícióval. Mivel csak azt vesszük figyelembe, hogy a program málna kliensként működjön, az osztálynak csak három funkciója van: az init osztály, a kezdő osztály és az on_rx_done osztály. Az init osztály inicializálja a LoRa modult 433 MHz-ben, 125 kHz-es sávszélességgel, a set_pa_config metódus szerint. Ezután a modult alvó üzemmódba is állítja az energiafogyasztás csökkentése érdekében.
# A közepes tartomány alapértelmezései az init után 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips / szimbólum, CRC 13 dBm-en lora.set_pa_config (pa_select = 1) def __init __ (self, verbose = False): szuper (LoRaRcvCont, self).__ init __ (részletes) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
A start funkció az, ahol konfiguráljuk a modult vevőként, és megkapjuk például az RSSI-t (vevőjel erősségének jelzője), állapotát, működési frekvenciáját stb. A modult úgy állítottuk be, hogy alvó üzemmódból folyamatos vevő módban (RXCONT) működjön, majd egy darab hurok segítségével leolvassuk az értékeket, például az RSSI-t és a modem állapotát. A soros pufferben lévő adatokat a terminálra is átöntjük.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) míg True: alvás (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Végül az on_rx_done függvény végrehajtásra kerül a beérkező csomag elolvasása után. Ebben a funkcióban a fogadott értékeket a vevő jelző magasra állítása után az Rx pufferből hasznos terhelésnek nevezik. Ezután a kapott értékeket az utf-8 segítségével dekódoljuk, hogy a felhasználó által olvasható adatokat kinyomtassuk a shellre. A modult is alvó üzemmódba állítjuk, amíg egy másik érték nem érkezik.
def on_rx_done (self): print ("\ nFogadott:") self.clear_irq_flags (RxDone = 1) hasznos teher = self.read_payload (nocheck = True) print (byte (hasznos).decode ("utf-8", "ignore")) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
A program fennmaradó része csupán az, hogy kinyomtatja a fogadott értékeket a konzolra, és a programot billentyűzet megszakítással állítja le. Az energiatakarékosság érdekében a táblát ismét alvó üzemmódba állítottuk a program leállítása után is.
próbáld meg: lora.start (), kivéve a KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") végül: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino kód a LoRa számára, hogy kommunikáljon a Raspberry Pi-vel
Mint korábban említettem, az rpsreal kód támogatja mind az Arduino-t, mind a Pi-t, így lehetséges az Arduino és Pi közötti kommunikáció. Az AirSpayce Radiohead könyvtárának alapján működik. Tehát először a rádiófej könyvtárat kell telepítenie az Arduino IDE-jére.
Ehhez látogassa meg a Github oldalt, és töltse le a könyvtárat a ZIP mappába. Ezután helyezze az Arduino IDE könyvtár mappájába. Most indítsa újra az Arduino IDE alkalmazást, és talál példákat a Radio head könyvtárra. Itt arra programozzuk az Arduino-t, hogy LoRa szerverként működjön olyan tesztcsomagok küldésére, mint 0 és 9 között. Az ehhez szükséges Complete kód megtalálható az oldal alján, mint mindig. Itt néhány fontos sort elmagyarázok a programban.
A programot úgy kezdjük, hogy importáljuk az alapértelmezés szerint telepített SPI könyvtárat az SPI protokoll használatához, majd az RH_RF95 könyvtárat a Radio head-től a LoRa kommunikáció végrehajtásához. Ezután meghatározzuk, hogy az Arduino melyik tűjéhez csatlakoztattuk a LoRa Chip select (CS), Reset (RST) és Interrupt (INT) csapját az Arduino-val. Végül meghatározzuk azt is, hogy a modulnak 434MHz frekvenciában kell működnie, és inicializálja a LoRa modult.
#include
A beállítási funkción belül alaphelyzetbe állítjuk a LoRa modult úgy, hogy a visszaállító csapot 10 millimásodpercre alacsonyra húzzuk, hogy újrakezdődjön. Ezután inicializáljuk azt a modult, amelyet korábban a Radio head library segítségével készítettünk. Ezután beállítjuk a LoRa szerver frekvenciáját és átviteli teljesítményét. Nagyobb az átvitel, nagyobb távolságot tesznek meg a csomagjai, de több energiát fogyaszt.
void setup () { // A Serial Monitor inicializálása a Serial.begin (9600); // LoRa modul pinMode visszaállítása (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); késés (10); digitalWrite (RFM95_RST, HIGH); késés (10); // inicializálja a LoRa modult, míg (! Rf95.init ()) { Serial.println ("LoRa rádióindítás meghiúsult"); míg (1); } // Állítsa be az alapértelmezett frekvenciát 434,0 MHz, ha (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency sikertelen"); míg (1); } rf95.setTxPower (18); // A Lora modul átviteli teljesítménye }
A végtelen hurok funkcióban egyszerűen el kell küldenünk az adatcsomagot a LoRa modulon keresztül. Ezek az adatok bármi hasonlóak lehetnek a felhasználói parancs szenzorértékével. De az egyszerűség kedvéért 0 és 9 közötti char értéket küldünk minden 1 másodpercenként, majd inicializáljuk az értéket 0-ra, miután elértük a 9. értéket. Vegye figyelembe, hogy az értékeket csak char tömb formátumban lehet elküldeni, és az adatok típusának unit8_t-nek kell lennie egyszerre 1 bájt. Az ehhez hasonló kód az alábbiakban látható
void loop () { Soros.nyomtatás ("Küldés:"); char radiopacket = char (érték)}; rf95.send ((uint8_t *) radiopacket, 1); késés (1000); érték ++; ha (érték> '9') értéke = 48; }
LoRa kommunikáció tesztelése Raspberry Pi és Arduino között
Most, hogy mind a hardverünket, mind a programunkat elkészítettük, egyszerűen fel kell töltenünk az Arduino kódot az UNO táblára, és a python vázlatot a pi-n kell elindítani. A tesztbeállításom mindkét csatlakoztatott hardver mellett az alábbiak szerint néz ki
Miután a Python kliens vázlata elindult a Pi-n (csak a Python 3-at használja), ha minden megfelelően működik, akkor a shell ablakban meg kell látnia a Pi-ben kapott Arduino csomagokat. Észre kell vennie a „Beérkezett: 0” -tól 9-ig, mint az alábbi képen látható.
A teljes Raspberry pi kód és az összes szükséges könyvtár letölthető innen.
Most áthelyezheti az Arduino szervert és ellenőrizheti a modul hatótávolságát; szükség esetén az RSSI érték megjeleníthető a shellen is. A projekt teljes működése az alábbi linken található videóban található. Most, hogy tudjuk, hogyan lehet nagy távolságú LoRa kommunikációt létrehozni az Arduino és a Raspberry pi között, folytathatjuk az érzékelő hozzáadásával az Arduino oldalon és a felhő platformon a Pi oldalon, hogy teljes IoT csomagot készítsünk.
Remélem, megértette a projektet, és élvezte az építését. Ha problémája van a működésbe helyezésével, használja az alábbi megjegyzések részt vagy a fórumokat más technikai igényekhez.