- Nepieciešamie materiāli
- Aveņu Pi savienošana ar LoRa
- Arduino savienošana ar LoRa
- pyLoRa par Aveņu Pi
- Raspberry Pi konfigurēšana LoRa modulim
- Avenes Pi programmēšana LoRa
- Arduino kods LoRa saziņai ar Raspberry Pi
- LoRa komunikācijas pārbaude starp Raspberry Pi un Arduino
LoRa kļūst arvien populārāka līdz ar IoT, Connected Cars, M2M, Industry 4.0 uc parādīšanos. Tā kā tā spēj sazināties lielos attālumos ar ļoti mazāku jaudu, dizaineri to vēlams izmantot, lai nosūtītu / saņemtu datus no lietas, kas darbojas ar akumulatoru. Mēs jau esam apsprieduši LoRa pamatus un to, kā izmantot LoRa ar Arduino. Lai gan tehnoloģija sākotnēji ir paredzēta LoRa mezgla saziņai ar LoRa vārteju, ir daudz scenāriju, kuros LoRa mezglam ir jāsazinās ar citu LoRa mezglu, lai apmainītos ar informāciju lielā attālumā. Tātad, šajā apmācībā mēs iemācīsimies izmantot LoRa moduli SX1278 ar Raspberry pisazināties ar citu SX1278, kas savienots ar mikrokontrolleru, piemēram, Arduino. Šī metode var būt noderīga daudzās vietās, jo Arduino varētu darboties kā serveris, lai iegūtu datus no sensoriem un nosūtītu tos lielam attālumam caur LoRa, un pēc tam Pi, kas darbojas kā klients, var saņemt šo informāciju un augšupielādēt vietnē varētu, jo tam ir piekļuve internetam. Izklausās interesanti, vai ne? Tātad, sāksim darbu.
Nepieciešamie materiāli
- SX1278 433MHz LoRa modulis - 2 Nr
- 433MHz LoRa antena - 2Nos
- Arduino UNO- vai cita versija
- Aveņu Pi 3
Tiek pieņemts, ka jūsu Raspberry Pi jau ir mirgojis ar operētājsistēmu un spēj izveidot savienojumu ar internetu. Ja nē, pirms turpināt, izpildiet pamācību Darba sākšana ar Raspberry Pi. Šeit mēs izmantojam Rasbian Jessie instalēto Raspberry Pi 3.
Brīdinājums: Vienmēr izmantojiet SX1278 LoRa moduli ar 433 MHz antenām; citādi modulis var sabojāties.
Aveņu Pi savienošana ar LoRa
Pirms nonākam programmatūras paketēs, sagatavosimies aparatūrai. SX1278 ir 16-pin Lora modulis, kas komunicē izmanto SPI uz 3.3V loģikas. Raspberry pi darbojas arī 3,3 V loģiskā līmenī, un tam ir arī iebūvēts SPI ports un 3,3 V regulators. Tātad mēs varam tieši savienot LoRa moduli ar Raspberry Pi. Savienojumu tabula ir parādīta zemākAveņu Pi | Lora - SX1278 modulis |
3.3V | 3.3V |
Zeme | Zeme |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Iespējot |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Atsaucei varat izmantot arī zemāk esošo shēmu. Ņemiet vērā, ka shēmas shēma tika izveidota, izmantojot moduli RFM9x, kas ir ļoti līdzīgs SX1278 modulim, līdz ar to izskats zemāk redzamajā attēlā var atšķirties.
Savienojumi ir diezgan taisni uz priekšu, vienīgā problēma, ar kuru jūs varētu saskarties, ir tā, ka SX1278 nav saderīgs ar paneļiem, tāpēc savienojumu veikšanai jums tieši jāizmanto savienojošie vadi vai jāizmanto divi mazi paneļi, kā parādīts zemāk. Arī daži cilvēki iesaka darbināt LoRa moduli ar atsevišķu 3,3 V barošanas sliedi, jo Pi, iespējams, nespēj piegādāt pietiekami daudz strāvas. Tomēr, ja Lora ir mazjaudas modulis, tai vajadzētu strādāt pie Pi 3,3 V sliedes, es to izmēģināju un atklāju, ka tas darbojas bez problēmām. Bet, tomēr ņem to ar šķipsniņu sāls. Mana LoRa un Raspberry pi savienojuma iestatīšana izskatās apmēram šādi
Arduino savienošana ar LoRa
Arduino moduļa savienojums paliek tāds pats kā tas, ko izmantojām iepriekšējā apmācībā. Vienīgā atšķirība būs tā vietā, lai izmantotu Sandeep Mistry bibliotēku, bet mēs izmantosim Rspreal bibliotēku, kuras pamatā ir Radio vadītājs, kuru mēs apspriedīsim vēlāk šajā projektā. Ķēde ir dota zemāk
Atkal jūs varat izmantot Arduino Uno 3.3V tapu vai izmantot atsevišķu 3.3V regulatoru. Šajā projektā esmu izmantojis borta sprieguma regulatoru. Adatu savienojuma tabula ir sniegta zemāk, lai palīdzētu jums viegli izveidot savienojumus.
LoRa SX1278 modulis | Arduino UNO valde |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Tā kā modulis neietilpst maizes dēlī, savienojumu veikšanai esmu izmantojis savienojošos vadus tieši. Kad savienojums ir izveidots, Arduino LoRa iestatīšana izskatās apmēram šādi
pyLoRa par Aveņu Pi
Ir daudz pitona pakotņu, kuras varat izmantot kopā ar LoRa. Arī Raspberry Pi parasti izmanto kā LoRaWAN, lai iegūtu datus no vairākiem LoRa mezgliem. Bet šajā projektā mūsu mērķis ir savstarpēji sazināties starp diviem Raspberry Pi moduļiem vai starp Raspberry Pi un Arduino. Tātad, es nolēmu izmantot pyLoRa pakotni. Tam ir rpsreal LoRa Arduino un rpsreal LoRa Raspberry pi moduļi, kurus var izmantot Arduino un Raspberry Pi vidē. Pagaidām pievērsīsimies Raspberry Pi videi.
Raspberry Pi konfigurēšana LoRa modulim
Kā jau iepriekš teicām, LoRa modulis darbojas ar SPI komunikāciju, tāpēc mums ir jāiespējo SPI Pi un pēc tam jāinstalē pylora pakotne. Veiciet tālāk norādītās darbības, lai izdarītu to pašu pēc Pi termināla loga atvēršanas. Atkal, es izmantoju špakteli, lai izveidotu savienojumu ar manu Pi, jūs varat izmantot savu ērto metodi.
1. darbība: iekļūstiet konfigurācijas logā, izmantojot šādu komandu. Lai iegūtu zemāk redzamo logu
sudo raspi-config
2. darbība. Pārejiet uz saskarnes opcijām un iespējojiet SPI, kā parādīts zemāk esošajā attēlā. Mums ir jāiespējo SPI saskarne, jo, apspriežot LCD, un PI sazinās, izmantojot SPI protokolu
3. darbība: saglabājiet izmaiņas un atgriezieties termināla logā. Pārliecinieties, ka pip un python ir atjaunināti, un pēc tam instalējiet RPi.GPIO pakotni, izmantojot šādu komandu.
instalējiet RPi.GPIO
Šī paketes klase mums palīdzēs kontrolēt GPIO tapu Pi. Ja veiksmīgi instalēsit, ekrāns izskatīsies šādi
4. darbība: tāpat rīkojieties ar pakotnes spidev instalēšanu, izmantojot šādu komandu. Spidev ir Linux pitons, kuru var izmantot SPI komunikācijas veikšanai ar Raspberry Pi.
pip instalēt spidev
Ja instalēšana ir veiksmīga, terminālim vajadzētu izskatīties apmēram šādi.
5. solis: Pēc tam ļauj instalēt pyLoRa pakotni, izmantojot šādu komandu pip. Šī pakotne instalē ar LoRa saistītos Radio modeļus.
PIP instalējiet pyLoRa
Ja instalēšana ir veiksmīga, tiks parādīts šāds ekrāns.
PyLoRa pakete atbalsta arī šifrētu saziņu, kuru var nemanāmi izmantot ar Arduino un Raspberry Pi. Tas uzlabos datu drošību jūsu saziņā. Bet jums ir jāinstalē atsevišķa pakotne pēc šī soļa, ko es nedaru, jo šifrēšana nav šīs apmācības darbības jomā. Lai iegūtu sīkāku informāciju, varat sekot iepriekš minētajām github saitēm.
Pēc šī soļa jūs varat pievienot pakotnes ceļa informāciju pi un izmēģināt ar beigās sniegto python programmu. Bet es nevarēju veiksmīgi pievienot ceļu, tāpēc man nācās manuāli lejupielādēt bibliotēku un to pašu izmantot tieši savām programmām. Tāpēc man bija jāveic šādas darbības
6. solis: Lejupielādējiet un instalējiet paketi python-rpi.gpio un spidev pakotni, izmantojot tālāk norādīto komandu.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get instalēt python-spidev python3-spidev
Pēc abām instalācijām termināļa logā jāparāda kaut kas līdzīgs šim.
7. solis: instalējiet arī git un pēc tam izmantojiet mūsu Raspberry Pi pitona direktorijas klonēšanu. To var izdarīt, izmantojot šādas komandas.
sudo apt-get install git sudo git klons
Kad šī darbība ir pabeigta , Raspberry Pi mājas mapē jāatrod SX127x apakškatalogs. Tam būs visi nepieciešamie faili, kas saistīti ar bibliotēku.
Avenes Pi programmēšana LoRa
Vienādranga LoRa komunikācijā moduli, kas pārraida informāciju, sauc par serveri, bet moduli, kas saņem informāciju, sauc par klientu. Vairumā gadījumu Arduino laukā ar sensoru tiks izmantots datu mērīšanai, un Pi tiks izmantots šo datu saņemšanai. Tātad, es šajā apmācībā nolēmu izmantot Raspberry Pi kā klientu un Arduino kā serveri. Pilnīga Raspberry Pi klienta programma ir atrodama pie šīs lapas apakšā. Šeit es mēģināšu izskaidrot svarīgās programmas līnijas.
Uzmanību: Pārliecinieties, vai programmas fails atrodas tajā pašā direktorijā, kurā atrodas bibliotēkas mape SX127x. Ja vēlaties portēt projektu, varat kopēt šo mapi un izmantot to jebkur.
Programma ir diezgan vienkārša. Mums ir jāiestata LoRa modulis darbam 433Mhz un pēc tam jāuzklausa ienākošās paketes. Ja kaut ko saņemam, mēs tos vienkārši izdrukājam uz konsoles. Kā vienmēr, mēs sākam programmu, importējot nepieciešamās pitona bibliotēkas.
no laika importēt miega režīmu no SX127x.LoRa imports * no SX127x.board_config importēt BOARD BOARD.setup ()
Šajā gadījumā laika pakete tiek izmantota kavējumu radīšanai, Lora pakete tiek izmantota LoRa saziņai un board_config tiek izmantota paneļa un LoRa parametru iestatīšanai. Mēs arī iestatām dēli, izmantojot funkciju BOARD.setup () .
Tālāk mēs izveidojam pitona LoRa klasi ar trim definīcijām. Tā kā mēs tikai atkāpjamies, lai programma darbotos kā aveņu klients, klasei ir tikai trīs funkcijas, proti, init klase, sākuma klase un on_rx_done klase. Init klase inicializē LoRa moduli 433MHz ar 125kHz joslas platumu, kā noteikts set_pa_config metodē. Tad tas arī nodod moduli miega režīmā, lai ietaupītu enerģijas patēriņu.
# Vidējā diapazona noklusējuma iestatījumi pēc init ir 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 mikroshēmas / simbols, CRC uz 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (self, verbose = False): super [LoRaRcvCont, self].__ init __ ( daudzbalsīgs ) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Sākuma funkcija ir tā, kur mēs konfigurējam moduli kā uztvērēju un iegūstam, piemēram, RSSI (Signāla saņemšanas signāla stiprums), statusu, darbības frekvenci utt. Mēs iestatījām moduli darbam nepārtrauktā uztvērēja režīmā (RXCONT) no miega režīma un pēc tam izmantojam kādu laiku, lai nolasītu tādas vērtības kā RSSI un modema statuss. Mēs arī noskalojam datus sērijveida buferī uz termināli.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT), kamēr True: miegs (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Visbeidzot, funkcija on_rx_done tiek izpildīta pēc ienākošās paketes nolasīšanas. Šajā funkcijā saņemtās vērtības tiek pārvietotas mainīgajā, ko sauc par lietderīgo slodzi no Rx bufera pēc tam, kad uztvērēja karogs ir iestatīts augstu. Tad saņemtās vērtības tiek dekodētas ar utf-8, lai uz čaulas izdrukātu lietotāja lasāmus datus. Mēs arī ievietojam moduli atpakaļ miega režīmā, līdz tiek saņemta cita vērtība.
def on_rx_done (self): print ("\ nSaņemts:") self.clear_irq_flags (RxDone = 1) lietderīgā slodze = self.read_payload (nocheck = True) print (baiti (lietderīgā slodze).decode ("utf-8", "ignorēt"))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Atlikusī programmas daļa ir tikai izdrukāt saņemtās vērtības konsolē un pārtraukt programmu, izmantojot tastatūras pārtraukumu. Lai taupītu enerģiju, mēs atkal iestatījām paneli miega režīmā pat pēc programmas pārtraukšanas.
mēģiniet: lora.start (), izņemot KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") visbeidzot: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino kods LoRa saziņai ar Raspberry Pi
Kā jau minēju iepriekš, rpsreal kods atbalsta gan Arduino, gan Pi, tāpēc ir iespējama komunikācija starp Arduino un Pi. Tas darbojas, pamatojoties uz AirSpayce Radiohead bibliotēku. Tātad vispirms savā Arduino IDE ir jāinstalē radio galvas bibliotēka.
Lai to izdarītu, apmeklējiet Github lapu un lejupielādējiet bibliotēku ZIP mapē. Pēc tam ievietojiet to Arduino IDE bibliotēkas mapē. Tagad restartējiet Arduino IDE un atradīsit Radio head bibliotēkas failu paraugus. Šeit mēs ieprogrammēsim Arduino darbam kā LoRa serverim, lai nosūtītu testa paketes, piemēram, no 0 līdz 9. Pilnīgu kodu, lai to izdarītu, kā vienmēr var atrast šīs lapas apakšdaļā. Šeit es paskaidrošu dažas svarīgas programmas līnijas.
Mēs sākam programmu, importējot SPI bibliotēku (instalēta pēc noklusējuma), lai izmantotu SPI protokolu un pēc tam RH_RF95 bibliotēku no Radio head, lai veiktu LoRa komunikāciju. Tad mēs definējam, kurai Arduino tapai mēs esam pievienojuši LoRa piespraudes Chip select (CS), Reset (RST) un Interrupt (INT) tapu ar Arduino. Visbeidzot, mēs arī definējam, ka modulim jādarbojas 434MHz frekvencē, un inicializējiet LoRa moduli.
# iekļaut
Iestatīšanas funkcijas iekšpusē mēs atiestatīsim LoRa moduli, velkot tā atiestatīšanas tapu uz zemu 10 mili sekundes, lai sāktu no jauna. Pēc tam mēs to inicializējam ar moduli, kuru mēs izveidojām iepriekš, izmantojot Radio head bibliotēku. Pēc tam mēs iestatījām LoRa servera frekvenci un pārraides jaudu. Lielāka pārraide, jo lielāks būs jūsu paketes ceļojums, bet patērēs vairāk enerģijas.
void setup () { // Initialize Serial Monitor Serial.begin (9600); // Atiestatīt LoRa moduļa pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); kavēšanās (10); digitalWrite (RFM95_RST, HIGH); kavēšanās (10); // Inicializējiet LoRa moduli, kamēr (! Rf95.init ()) { Serial.println ("LoRa radio init neizdevās"); kamēr (1); } // Iestatiet noklusējuma frekvenci 434,0MHz, ja (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency neizdevās"); kamēr (1); } rf95.setTxPower (18); // Lora moduļa pārraides jauda }
Bezgalīgās cilpas funkcijas ietvaros mums vienkārši ir jānosūta datu pakete caur LoRa moduli. Šie dati var būt kaut kas līdzīgs lietotāja komandas sensora vērtībai. Bet vienkāršības labad mēs nosūtīsim char vērtību no 0 uz 9 par katru 1 sekundes intervālu un pēc tam vērtību inicializēsim atpakaļ uz 0, sasniedzot 9. Ņemiet vērā, ka vērtības var nosūtīt tikai char masīva formātā, un datu tipam jābūt unit8_t, kas ir 1 baits vienlaikus. Kods, lai izdarītu to pašu, ir parādīts zemāk
void loop () { Serial.print ("Sūtīt:"); char radiopakete = char (vērtība)}; rf95.send ((uint8_t *) radiopakete, 1); kavēšanās (1000); vērtība ++; ja (vērtība> '9') vērtība = 48; }
LoRa komunikācijas pārbaude starp Raspberry Pi un Arduino
Tagad, kad esam ieguvuši gan savu aparatūru, gan programmu, mums vienkārši ir jāaugšupielādē Arduino kods UNO dēlī, un pitona skice ir jāuzsāk pi. Mana testa iestatīšana ar abām savienotajām aparatūrām izskatās apmēram šādi
Kad Python klienta skice ir palaista Pi (izmantojiet tikai Python 3), ja viss darbojas pareizi, jums vajadzētu redzēt Arduino paketes, kas saņemtas pi, lai gan čaulas logā. Jums vajadzētu pamanīt “Saņemts: 0” līdz 9, kā parādīts attēlā zemāk.
Pilnu Raspberry pi kodu ar visām nepieciešamajām bibliotēkām var lejupielādēt šeit.
Tagad jūs varat pārvietot Arduino serveri un pārbaudīt moduļa diapazonu; vajadzības gadījumā ir iespējams arī parādīt RSSI vērtību čaulā. Pilnīga darba projekta var atrast video saistīti zemāk. Tagad, kad mēs zinām, kā izveidot tālsatiksmes LoRa komunikāciju starp Arduino un Raspberry pi, mēs varam turpināt pievienot sensoru Arduino pusē un mākoņa platformu Pi pusē, lai izveidotu pilnīgu IoT paketi.
Ceru, ka sapratāt projektu un patika to veidot. Ja jums ir problēmas ar tā darbību, izmantojiet zemāk esošo komentāru sadaļu vai citu tehnisko jautājumu forumus.