- Reikalingos medžiagos
- Avietės Pi sujungimas su LoRa
- „Arduino“ sujungimas su „LoRa“
- „PyLoRa“ - avietei Pi
- „Raspberry Pi“ konfigūravimas „LoRa“ moduliui
- „Raspberry Pi“ programavimas „LoRa“
- „Arduino“ kodas, skirtas „LoRa“ bendrauti su „Raspberry Pi“
- „LoRa“ ryšio tarp „Raspberry Pi“ ir „Arduino“ testavimas
„LoRa “ tampa vis populiaresnė, kai atsiranda „IoT“, „Connected Cars“, „M2M“, „Industry 4.0“ ir tt Mes jau aptarėme „LoRa“ pagrindus ir tai, kaip naudoti „LoRa“ su „Arduino“. Nors iš pradžių ši technologija skirta „LoRa“ mazgui bendrauti su „LoRa“ šliuzais, yra daugybė scenarijų, kai „LoRa“ mazgas turi bendrauti su kitu „LoRa“ mazgu, kad galėtų keistis informacija dideliu atstumu. Taigi, šioje pamokoje sužinosime, kaip naudoti „LoRa“ modulį SX1278 su „Raspberry pi“bendrauti su kitu SX1278, prijungtu prie mikrovaldiklio, pavyzdžiui, „Arduino“. Šis metodas gali būti naudingas daugelyje vietų, nes „Arduino“ galėtų veikti kaip serveris, kad gautų duomenis iš jutiklių ir išsiųstų juos Pi per ilgą atstumą per „LoRa“, o tada Pi kaip klientas gali gauti šią informaciją ir įkelti į galėtų, nes turi prieigą prie interneto. Skamba įdomiai, tiesa? Taigi, pradėkime.
Reikalingos medžiagos
- SX1278 433MHz LoRa modulis - 2 Nr
- 433MHz LoRa antena - 2Nos
- Arduino UNO- ar kita versija
- Aviečių Pi 3
Daroma prielaida, kad jūsų „Raspberry Pi“ jau yra įdiegta su operacine sistema ir gali prisijungti prie interneto. Jei ne, prieš tęsdami vadovaukitės instrukcija „Pradėti naudoti„ Raspberry Pi ““. Čia mes naudojame Rasbian Jessie įdiegtą „Raspberry Pi 3“.
Įspėjimas: Visada naudokite savo SX1278 LoRa modulį su 433 MHz antenomis; kitaip modulis gali sugesti.
Avietės Pi sujungimas su LoRa
Prieš patekdami į programinės įrangos paketus, pasiruoškime aparatinę įrangą. „ SX1278“ yra 16 kontaktų „ Lora“ modulis, kuris bendrauja naudodamas SPI 3,3 V logikoje. „Raspberry pi“ taip pat veikia 3,3 V loginiu lygiu, taip pat turi įmontuotą SPI prievadą ir 3,3 V reguliatorių. Taigi „LoRa“ modulį galime tiesiogiai sujungti su „Raspberry Pi“. Ryšių lentelė parodyta žemiauAvietė Pi | „Lora“ - SX1278 modulis |
3.3V | 3.3V |
Žemė | Žemė |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Įjungti |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Taip pat galite naudoti žemiau pateiktą grandinės schemą. Atkreipkite dėmesį, kad grandinės schema buvo sukurta naudojant RFM9x modulį, kuris yra labai panašus į SX1278 modulį, todėl žemiau esančiame paveikslėlyje išvaizda gali skirtis.
Jungtys yra gana tiesios į priekį, vienintelė problema, su kuria galite susidurti, yra ta, kad SX1278 nėra suderinama su duona, todėl turite tiesiogiai naudoti jungiamuosius laidus, kad sujungtumėte, arba naudokite dvi mažas plokštes, kaip parodyta žemiau. Taip pat nedaugelis žmonių siūlo maitinti „LoRa“ modulį su atskiru 3,3 V maitinimo bėgiu, nes „Pi“ gali nepavykti tiekti pakankamai srovės. Tačiau „Lora“, būdamas mažos galios modulis, turėtų veikti ant 3,3 V Pi bėgio, aš tą patį išbandžiau ir radau, kad jis veikia be jokių problemų. Bet vis tiek paimkite jį su žiupsneliu druskos. Mano „ LoRa“ ir „Raspberry pi“ ryšio sąranka atrodo maždaug taip žemiau
„Arduino“ sujungimas su „LoRa“
„Arduino“ modulio ryšys išlieka toks pat, kokį naudojome ankstesnėje mokymo programoje. Vienintelis skirtumas bus tas, kad užuot naudoję „Sandeep Mistry“ biblioteką, naudosime „Rspreal“ biblioteką, paremtą „Radio head“, kurią aptarsime vėliau šiame projekte. Grandinė pateikiama žemiau
Vėlgi galite naudoti 3,3 V kaištį „Arduino Uno“ arba naudoti atskirą 3,3 V reguliatorių. Šiame projekte aš naudojau borto įtampos reguliatorių. Smeigtukų sujungimo lentelė pateikiama žemiau, kad būtų lengviau atlikti sujungimus.
„LoRa SX1278“ modulis | „Arduino“ UNO valdyba |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Kadangi modulis netelpa į duonos lentą, sujungimams atlikti naudoju jungiamuosius laidus. Atlikus ryšį, „ Arduino LoRa“ sąranka atrodys maždaug taip žemiau
„PyLoRa“ - avietei Pi
Yra daug „Python“ paketų, kuriuos galite naudoti su „LoRa“. Taip pat dažniausiai „Raspberry Pi“ naudojamas kaip „LoRaWAN“ norint gauti duomenis iš kelių „LoRa“ mazgų. Tačiau šiame projekte mes siekiame bendrauti tarpusavyje tarp dviejų „Raspberry Pi“ modulių arba tarp „Raspberry Pi“ ir „Arduino“. Taigi, aš nusprendžiau naudoti pyLoRa paketą. Jis turi rpsreal „LoRa Arduino“ ir „rpsreal LoRa Raspberry pi“ modulius, kuriuos galima naudoti „Arduino“ ir „Raspberry Pi“ aplinkoje. Kol kas sutelkime dėmesį į „Raspberry Pi“ aplinką.
„Raspberry Pi“ konfigūravimas „LoRa“ moduliui
Kaip sakyta anksčiau, „LoRa“ modulis veikia su SPI ryšiu, todėl turime įgalinti SPI „Pi“ ir įdiegti „ pylora“ paketą. Atlikite „Pi“ terminalo langą, atlikite toliau nurodytus veiksmus. Vėlgi, aš naudoju glaistą prisijungti prie savo Pi, galite naudoti savo patogų metodą.
1 žingsnis: Įeikite į konfigūracijos langą naudodami šią komandą. Norėdami gauti žemiau esantį langą
sudo raspi-config
2 žingsnis: Eikite į sąsajos parinktis ir įgalinkite SPI, kaip parodyta paveikslėlyje žemiau. Turime įjungti SPI sąsają, nes kai aptarėme, LCD ir PI bendrauja per SPI protokolą
3 žingsnis: išsaugokite pakeitimus ir grįžkite į terminalo langą. Įsitikinkite, kad „pip“ ir „python“ yra atnaujinti, tada įdiekite „ RPi.GPIO“ paketą naudodami šią komandą.
pip įdiegti RPi.GPIO
Ši paketų klasė padės mums valdyti „PiIO“ GPIO kaištį. Jei sėkmingai įdiegsite, ekranas atrodys taip
4 žingsnis: Panašiai tęskite diegdami „ spidev“ paketą naudodami šią komandą. „Spidev“ yra „python“ susiejimas su „Linux“, kurį galima naudoti SPI ryšiui atlikti su „Raspberry Pi“.
pip įdiegti spidev
Jei diegimas bus sėkmingas, terminalas turėtų atrodyti maždaug taip žemiau.
5 žingsnis: Tada galite įdiegti pyLoRa paketą naudodami šią komandą pip. Šis paketas įdiegia radijo modelius, susietus su LoRa.
pip įdiegti pyLoRa
Jei diegimas bus sėkmingas, pamatysite šį ekraną.
„PyLoRa“ paketas taip pat palaiko šifruotą ryšį, kurį galima sklandžiai naudoti su „Arduino“ ir „Raspberry Pi“. Tai pagerins jūsų bendravimo duomenų saugumą. Bet po šio veiksmo turite įdiegti atskirą paketą, kurio nedarau, nes šifravimas nėra šios mokymo programos taikymo sritis. Norėdami sužinoti daugiau, galite sekti aukščiau pateiktas „github“ nuorodas.
Po šio veiksmo galite pridėti paketo kelio informaciją „pi“ ir pabandyti naudoti „ python“ programą, pateiktą pabaigoje. Bet aš negalėjau sėkmingai pridėti kelio, todėl turėjau rankiniu būdu atsisiųsti biblioteką ir naudoti tą patį tiesiogiai savo programoms. Taigi turėjau atlikti šiuos veiksmus
6 žingsnis: atsisiųskite ir įdiekite python-rpi.gpio paketą ir „spidev“ paketą naudodami žemiau esančią komandą.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Terminalo lange po abiejų diegimų turėtų būti rodoma kažkas panašaus.
7 žingsnis: Taip pat įdiekite „git“ ir naudokite jį klonuodami „Raspberry Pi“ pitono katalogą. Tai galite padaryti naudodami šias komandas.
sudo apt-get install git sudo git klonas
Atlikę šį veiksmą , „Raspberry Pi“ namų aplanke turėtumėte rasti SX127x pakatalogį. Tai turės visus reikalingus failus, susietus su biblioteka.
„Raspberry Pi“ programavimas „LoRa“
„PeR to peer LoRa“ komunikacijoje informaciją perduodantis modulis vadinamas serveriu, o informaciją priimantis modulis - klientu. Daugeliu atvejų „Arduino“ bus naudojamas lauke su jutikliu duomenims matuoti, o „Pi“ bus naudojamas šiems duomenims gauti. Taigi, šioje pamokoje nusprendžiau naudoti „ Raspberry Pi“ kaip klientą, o „Arduino“ - kaip serverį. Visiškai Aviečių Pi kliento programa galima rasti šio puslapio apačioje. Čia pabandysiu paaiškinti svarbias programos eiles.
Dėmesio: įsitikinkite, kad programos failas yra tame pačiame kataloge, kuriame yra bibliotekos aplankas SX127x. Šį aplanką galite nukopijuoti ir naudoti bet kur, jei norite perkelti projektą.
Programa yra gana paprasta, mes turime nustatyti „LoRa“ modulį veikti 433 MHz greičiu ir tada klausytis gaunamų paketų. Jei ką nors gauname, mes juos paprastai atsispausdiname ant konsolės. Kaip visada, programą pradedame importuodami reikalingas python bibliotekas.
nuo laiko importuoti miego režimą iš SX127x.LoRa importuoti * iš SX127x.board_config importuoti BOARD BOARD.setup ()
Šiuo atveju laiko paketas naudojamas vėlavimams sukurti, „Lora“ paketas naudojamas „LoRa“ ryšiui, o „ board_config“ - plokštės ir „LoRa“ parametrams nustatyti. Mes taip pat nustatome lentą naudodami funkciją BOARD.setup () .
Tada sukursime pitono LoRa klasę su trimis apibrėžimais. Kadangi mes tik įtraukiame, kad programa veiktų kaip aviečių klientas, klasė turi tik tris funkcijas, ty init klasę, start klasę ir on_rx_done klasę. „Init“ klasė inicializuoja „LoRa“ modulį 433MHz dažniu 125 kHz pralaidumu, kaip nustatyta metodu „ set_pa_config“ . Tada modulis taip pat įjungiamas miego režimu, kad būtų sutaupyta energijos.
# Vidutinio diapazono numatytieji parametrai po inicijavimo yra 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 žetonų / simbolis, CRC 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)
Pradžios funkcija yra tai, kai mes sukonfigūruojame modulį kaip imtuvą ir gauname, pavyzdžiui, RSSI (gaunamo signalo stiprumo indikatorius), būseną, veikimo dažnį ir kt. Mes nustatėme, kad modulis veiktų nepertraukiamo imtuvo režimu (RXCONT) iš miego režimo, tada naudodamiesi tam tikrą laiką, skaitykite tokias vertes kaip RSSI ir modemo būsena. Taip pat nuosekliame buferyje esančius duomenis išvalome ant terminalo.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) o True: miegas (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Galiausiai funkcija on_rx_done bus vykdoma perskaičius gaunamą paketą. Šioje funkcijoje gautos vertės perkeliamos į kintamąjį, vadinamą naudingoji apkrova iš Rx buferio, nustačius aukštą priėmimo vėliavą. Tada gautos reikšmės yra dekoduojamos naudojant utf-8, kad atspausdintų vartotojo skaitomus duomenis ant apvalkalo. Taip pat modulis vėl įjungiamas miego režimu, kol gaunama kita vertė.
def on_rx_done (self): print ("\ nGauta:") self.clear_irq_flags (RxDone = 1) naudingoji apkrova = self.read_payload (nocheck = True) spausdinti (baitai (naudingoji apkrova). decod ("utf-8", "ignoruoti"))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Likusi programos dalis yra tik atspausdinti gautas reikšmes į konsolę ir nutraukti programą naudojant klaviatūros pertraukimą. Mes vėl nustatėme plokštę miego režimu net ir nutraukę programą, kad taupytume energiją.
pabandykite: lora.start (), išskyrus „KeyboardInterrupt“: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") galiausiai: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
„Arduino“ kodas, skirtas „LoRa“ bendrauti su „Raspberry Pi“
Kaip jau minėjau anksčiau, „ rpsreal“ kodas palaiko ir „Arduino“, ir „Pi“, todėl yra įmanoma palaikyti ryšį tarp „Arduino“ ir „Pi“. Jis veikia pagal „AirSpayce“ „Radiohead“ biblioteką. Taigi pirmiausia turite įdiegti radijo vadovų biblioteką į „Arduino IDE“.
Norėdami tai padaryti, apsilankykite „Github“ puslapyje ir atsisiųskite biblioteką į ZIP aplanką. Tada įdėkite jį į „Arduino IDE“ bibliotekos aplanką. Dabar iš naujo paleiskite „Arduino IDE“ ir rasite „Radio head“ bibliotekos failų pavyzdžių. Čia užprogramuosime „Arduino“ veikti kaip „LoRa“ serverį, kad būtų galima siųsti bandomuosius paketus, pavyzdžiui, nuo 0 iki 9. Visą tą patį kodą galite rasti šio puslapio apačioje, kaip visada. Čia paaiškinsiu keletą svarbių programos eilučių.
Programą pradedame importuodami SPI biblioteką (įdiegtą pagal numatytuosius nustatymus), kad būtų naudojama SPI protokolas, o paskui RH_RF95 biblioteka iš „Radio head“, kad būtų galima atlikti „LoRa“ ryšį. Tada mes nustatome, prie kurio „Arduino“ kaiščio prijungėme „LoRa“ „Chip select“ (CS), „Reset“ (RST) ir „Interrupt“ (INT) kaiščius su „Arduino“. Galiausiai mes taip pat apibrėžiame, kad modulis turėtų veikti 434MHz dažniu, ir inicializuoti „LoRa“ modulį.
# įtraukti
Sąrankos funkcijos viduje mes iš naujo nustatysime „LoRa“ modulį, 10 milijonų sekundžių atstumdami jo atstatymo kaištį, kad pradėtumėte iš naujo. Tada jį inicializuojame anksčiau sukurtu moduliu, naudodamiesi „Radio head library“. Tada nustatome „LoRa“ serverio dažnį ir perdavimo galią. Didesnis perdavimas, didesnis atstumas, kurį keliaus jūsų paketai, tačiau sunaudos daugiau energijos.
void setup () { // Initialize Serial Monitor Serial.begin (9600); // Iš naujo nustatyti „LoRa“ modulio „ pinMode“ (RFM95_RST, OUTPUT); „digitalWrite“ (RFM95_RST, LOW); vėlavimas (10); „digitalWrite“ (RFM95_RST, HIGH); vėlavimas (10); // Inicijuoti „LoRa“ modulį, kol (! Rf95.init ()) { Serial.println („LoRa radijo inicijavimas nepavyko“); o (1); } // Nustatykite numatytąjį dažnį 434,0 MHz, jei (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency nepavyko"); o (1); } rf95.setTxPower (18); // „Lora“ modulio perdavimo galia }
Begalinės ciklo funkcijos viduje mes tiesiog turime siųsti duomenų paketą per „LoRa“ modulį. Šie duomenys gali būti panašūs į vartotojo komandos jutiklio vertę. Bet dėl paprastumo mes išsiųsime char reikšmę nuo 0 iki 9 kas 1 sekundę, o po to reikšmę inicijuosime atgal į 0, kai pasieksite 9. Atkreipkite dėmesį, kad reikšmes galima siųsti tik char masyvo formatu, o duomenų tipas turėtų būti unit8_t, kad yra 1 baitas vienu metu. Tą patį darantis kodas parodytas žemiau
void loop () { Serial.print ("Siųsti:"); char radiopaketas = char (vertė)}; rf95.siųsti ((uint8_t *) radiopaketas, 1); vėlavimas (1000); vertė ++; jei (reikšmė> '9') vertė = 48; }
„LoRa“ ryšio tarp „Raspberry Pi“ ir „Arduino“ testavimas
Dabar, kai paruošėme ir aparatinę įrangą, ir programą, tiesiog turime įkelti „Arduino“ kodą į UNO lentą, o „python“ eskizas turėtų būti paleistas „pi“. Mano bandymo sąranka su prijungta aparatine įranga atrodo žemiau
Kai „python“ kliento eskizas bus paleistas „Pi“ (naudokite tik „Python 3“), jei viskas veikia tinkamai, turėtumėte pamatyti „Arduino“ paketus, gautus pi, nors ir apvalkalo lange. Turėtumėte pastebėti „Gauta: 0“ iki 9, kaip parodyta paveikslėlyje žemiau.
Išsamų „Raspberry pi“ kodą su visomis reikalingomis bibliotekomis galite atsisiųsti iš čia.
Dabar galite perkelti „Arduino“ serverį ir patikrinti modulio diapazoną; taip pat galima parodyti RSSI reikšmę apvalkale, jei to reikia. Pilnas darbo projekto galima rasti vaizdo įrašą žemiau susiję. Dabar, kai žinome, kaip užmegzti mažo nuotolio „LoRa“ ryšį tarp „Arduino“ ir „Raspberry pi“, galime pridėti jutiklį „Arduino“ pusėje ir debesies platformą „Pi“ pusėje, kad sukurtumėte pilną „IoT“ paketą.
Tikiuosi, kad supratote projektą ir patiko jį kurti. Jei kyla problemų jį veikiant, naudokite toliau pateiktą komentarų skiltį arba kitų techninių klausimų forumus.