- Tarvittavat materiaalit
- Raspberry Pi: n yhdistäminen LoRa: n kanssa
- Arduinon yhdistäminen LoRaan
- pyLoRa Vadelma Pi: lle
- Raspberry Pi: n määrittäminen LoRa-moduulille
- Raspberry Pi -ohjelmointi LoRalle
- Arduino-koodi LoRalle kommunikoimaan Raspberry Pi: n kanssa
- LoRa-viestinnän testaus Vadelma Pi: n ja Arduinon välillä
LoRa on tulossa yhä suositummaksi IoT: n, yhdistettyjen autojen, M2M: n, Industry 4.0: n jne. Myötä. Koska se kykenee kommunikoimaan pitkiä matkoja hyvin pienellä teholla, suunnittelijat käyttävät sitä mieluiten lähettämään / vastaanottamaan tietoja paristokäyttöisestä asiasta. Olemme jo keskustelleet LoRan perusteista ja siitä, miten LoRaa käytetään Arduinon kanssa. Vaikka tekniikka on alun perin tarkoitettu LoRa-solmulle kommunikoimaan LoRa-yhdyskäytävän kanssa, on monia skenaarioita, joissa LoRa-solmun on oltava yhteydessä toiseen LoRa-solmuun vaihtaakseen tietoja pitkiä matkoja. Joten tässä opetusohjelmassa opimme käyttämään LoRa-moduulia SX1278 Raspberry pi: n kanssakommunikoida toisen SX1278: n kanssa, joka on kytketty mikro-ohjaimeen, kuten Arduino. Tämä menetelmä voi olla hyödyllinen monissa paikoissa, koska Arduino voisi toimia palvelimena hakemaan tietoja antureista ja lähettämään Pi: lle pitkän matkan LoRan kautta, ja sitten asiakkaana toimiva Pi voi vastaanottaa nämä tiedot ja ladata ne koska sillä on pääsy Internetiin. Kuulostaa mielenkiintoiselta? Joten, aloitetaan.
Tarvittavat materiaalit
- SX1278 433 MHz LoRa-moduuli - 2 numeroa
- 433 MHz LoRa-antenni - 2 Ei
- Arduino UNO- tai muu versio
- Vadelma Pi 3
Oletetaan, että Raspberry Pi: lläsi on jo flash-käyttöjärjestelmä ja että se pystyy muodostamaan yhteyden Internetiin. Jos ei, seuraa Aloittaminen Raspberry Pi -oppaalla ennen jatkamista. Tässä käytämme Rasbian Jessien asentamaa Raspberry Pi 3: ta.
Varoitus: Käytä aina SX1278 LoRa -moduuliasi 433 MHz: n antenneilla; muuten moduuli saattaa vaurioitua.
Raspberry Pi: n yhdistäminen LoRa: n kanssa
Ennen kuin pääsemme ohjelmistopaketteihin, hankitaan laitteisto valmiiksi. SX1278 on 16-napainen Lora-moduuli, joka kommunikoi käyttämällä SPI on 3.3V Logic. Vadelma pi toimii myös 3,3 V: n logiikkatasolla, ja siinä on myös sisäänrakennettu SPI-portti ja 3,3 V: n säädin. Joten voimme yhdistää LoRa-moduulin suoraan Raspberry Pi: hen. Liitäntätaulukko on esitetty allaVadelma Pi | Lora - SX1278-moduuli |
3,3 V | 3,3 V |
Maa | Maa |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Ota käyttöön |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Voit myös käyttää alla olevaa kytkentäkaaviota viitteeksi. Huomaa, että piirikaavio luotiin käyttämällä RFM9x-moduulia, joka on hyvin samanlainen kuin SX1278-moduuli, joten ulkonäkö saattaa poiketa alla olevasta kuvasta.
Liitännät ovat melko suoraviivaisia, ainoa ongelma, jonka saatat kohdata, on se, että SX1278 ei ole leipälautan kanssa yhteensopiva, joten sinun on käytettävä liitäntäjohtoja suoraan liitäntöjen tekemiseen tai käytettävä kahta pientä leipätaulua alla olevan kuvan mukaisesti. Myös harvat ihmiset ehdottavat LoRa-moduulin käyttämistä erillisellä 3,3 V: n virtakiskolla, koska Pi ei välttämättä pysty tuottamaan riittävästi virtaa. Kuitenkin, että Lora on pienitehoinen moduuli, sen pitäisi toimia Pi: n 3,3 V: n kiskossa, testasin saman ja huomasin sen toimivan ongelmitta. Mutta ota silti ripaus suolaa. Yhteyteni perustamiseen Lora kanssa Raspberry Pi näyttää suunnilleen tältä alla
Arduinon yhdistäminen LoRaan
Arduino-moduulin yhteys pysyy samana kuin edellisessä opetusohjelmassa. Ainoa ero on sen sijaan, että käytämme Sandeep Mistryn kirjastoa, vaan käytämme Rspreal-kirjastoa, joka perustuu radiopäähän, josta keskustelemme myöhemmin tässä projektissa. Piiri on annettu alla
Voit jälleen käyttää 3,3 V: n nastaa Arduino Unossa tai käyttää erillistä 3,3 V: n säätintä. Tässä projektissa olen käyttänyt sisäistä jännitesäätöä. Tappiliitäntätaulukko on annettu alla helpottamaan liitäntöjen tekemistä.
LoRa SX1278 -moduuli | Arduino UNO: n hallitus |
3,3 V | 3,3 V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Koska moduuli ei mahdu leipälautaan, olen käyttänyt liitäntäjohtoja suoraan liitäntöjen tekoon. Kun yhteys on muodostettu, Arduino LoRa -asennus näyttää tältä alla
pyLoRa Vadelma Pi: lle
LoRan kanssa voi käyttää monia python-paketteja. Yleensä Raspberry Pi: tä käytetään LoRaWAN: na tietojen saamiseksi useista LoRa-solmuista. Mutta tässä projektissa pyrimme tekemään vertaisviestinnän kahden Raspberry Pi -moduulin välillä tai Raspberry Pi: n ja Arduinon välillä. Joten päätin käyttää pyLoRa-pakettia. Siinä on rpsreal LoRa Arduino ja rpsreal LoRa Raspberry pi -moduulit, joita voidaan käyttää Arduino- ja Raspberry Pi -ympäristöissä. Keskitymme toistaiseksi Vadelma Pi -ympäristöön.
Raspberry Pi: n määrittäminen LoRa-moduulille
Kuten aiemmin kerrottiin, LoRa-moduuli toimii SPI-viestinnän kanssa, joten meidän on otettava SPI käyttöön Pi: ssä ja asennettava sitten pylora- paketti. Suorita sama noudattamalla seuraavia vaiheita, kun olet avannut Pi: n pääteikkunan. Jälleen käytän kittiä yhteyden muodostamiseen Pi: ään, voit käyttää kätevää menetelmääsi.
Vaihe 1: Mene määritysikkunaan seuraavalla komennolla. Saat alla olevan ikkunan
sudo raspi-config
Vaihe 2: Siirry rajapintavaihtoehtoihin ja ota SPI käyttöön alla olevan kuvan mukaisesti. Meidän on sallittava SPI-liitäntä, koska keskustellessamme LCD- ja PI-viestinnät ovat SPI-protokollan kautta
Vaihe 3: Tallenna muutokset ja palaa pääteikkunaan. Varmista, että pip ja python on päivitetty, ja asenna sitten RPi.GPIO- paketti seuraavalla komennolla.
pip asenna RPi.GPIO
Tämä pakettiluokka auttaa meitä hallitsemaan Pi: n GPIO-nastaa. Jos asennus onnistuu, näyttösi näyttää tältä
Vaihe 4: Jatka samalla tavalla spidev- paketin asentamista seuraavalla komennolla. Spidev on Linuxin python-sidonta, jota voidaan käyttää SPI-viestinnän suorittamiseen Raspberry Pi: llä.
pip asenna spidev
Jos asennus onnistuu, päätelaitteen pitäisi näyttää tältä alla.
Vaihe 5: Seuraavaksi pyLoRa-paketti voidaan asentaa seuraavalla pip-komennolla. Tämä paketti asentaa LoRaan liittyvät radiomallit.
pip asenna pyLoRa
Jos asennus onnistuu, näet seuraavan näytön.
PyLoRa-paketti tukee myös salattua viestintää, jota voidaan käyttää saumattomasti Arduinon ja Raspberry Pi: n kanssa. Tämä parantaa tietoliikenteen tietoturvaa. Mutta sinun on asennettava erillinen paketti tämän vaiheen jälkeen, jota en tee, koska salaus ei kuulu tämän opetusohjelman piiriin. Voit seurata yllä olevia github-linkkejä saadaksesi lisätietoja.
Tämän jälkeen voit lisätä paketin polkutiedot pi: lle ja kokeilla lopussa olevaa python-ohjelmaa. Mutta en voinut lisätä polkua onnistuneesti, joten minun piti ladata kirjasto manuaalisesti ja käyttää sitä suoraan ohjelmissani. Joten minun piti jatkaa seuraavia vaiheita
Vaihe 6: Lataa ja asenna python-rpi.gpio-paketti ja spidev-paketti alla olevan komennon avulla.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Pääteikkunan pitäisi näyttää jotain tällaista molempien asennusten jälkeen.
Vaihe 7: Asenna myös git ja käytä sitä sitten Vadelma Pi: n python-hakemiston kloonaamiseen. Voit tehdä sen seuraavilla komennoilla.
sudo apt-get install git sudo git klooni
Kun tämä vaihe on valmis, sinun pitäisi löytää SX127x-alihakemisto Raspberry Pi -kotikansiosta. Kaikki tarvittavat tiedostot liitetään kirjastoon.
Raspberry Pi -ohjelmointi LoRalle
Vertaisverkossa LoRa-viestinnässä informaatiota välittävää moduulia kutsutaan palvelimeksi ja informaatiota vastaanottavaa moduulia asiakkaaksi. Useimmissa tapauksissa Arduinoa käytetään kentällä anturin kanssa mittaamaan tietoja ja Pi: tä käytetään näiden tietojen vastaanottamiseen. Joten päätin käyttää Raspberry Pi: tä asiakkaana ja Arduinoa palvelimena tässä opetusohjelmassa. Täydellinen Raspberry Pi client ohjelma löytyy alareunassa tämän sivun. Yritän tässä selittää ohjelman tärkeät linjat.
Varoitus: Varmista, että ohjelmatiedosto on samassa hakemistossa kuin SX127x-kirjastokansio. Voit kopioida tämän kansion ja käyttää sitä missä tahansa, jos haluat siirtää projektin.
Ohjelma on melko yksinkertainen, joudumme asettamaan LoRa-moduulin toimimaan 433 MHz: ssä ja kuuntelemaan sitten saapuvia paketteja. Jos saamme jotain, tulosta ne yksinkertaisesti konsolille. Kuten aina, aloitamme ohjelman tuomalla vaaditut python-kirjastot.
tuoda lepotila SX127x: stä ajoissa . LoRa-tuonti * SX127x.board_config-tuonnista BOARD BOARD.setup ()
Tässä tapauksessa aikapakettia käytetään viiveiden luomiseen, Lora-pakettia käytetään LoRa-viestintään ja board_config-asetusta käytetään hallitus- ja LoRa-parametrien asettamiseen. Asennamme myös levyn BOARD.setup () -toiminnolla.
Seuraavaksi luomme python LoRa -luokan kolmella määritelmällä. Koska me vain sisennämme ohjelman toimimaan vadelma-asiakkaana, luokassa on vain kolme toimintoa, nimittäin init-luokka, start-luokka ja on_rx_done- luokka. Init-luokka alustaa LoRa-moduulin 433 MHz: ssä 125 kHz: n kaistanleveydellä, joka on asetettu set_pa_config- menetelmällä. Sitten se asettaa moduulin myös lepotilaan virrankulutuksen säästämiseksi.
# Keskitason oletusasetukset aloituksen jälkeen ovat 434,0 MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128 sirua / symboli, CRC 13 dBm: llä lora.set_pa_config (pa_select = 1) def __init __ (itse, sanallinen = väärä): super (LoRaRcvCont, itse).__ init __ (verbose) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Käynnistystoiminnolla konfiguroidaan moduuli vastaanottimeksi ja saadaan kuten RSSI (vastaanottavan signaalin voimakkuuden ilmaisin), tila, toimintataajuus jne. Asetamme moduulin toimimaan jatkuvassa vastaanottotilassa (RXCONT) lepotilasta ja käytämme sitten jonkin aikaa silmukkaa lukemaan arvoja, kuten RSSI ja modeemin tila. Huuhdellaan myös sarjapuskurin tiedot päätelaitteelle.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) kun taas True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Lopuksi on_rx_done- toiminto suoritetaan, kun saapuva paketti on luettu. Tässä toiminnossa vastaanotetut arvot siirretään Rx-puskurista hyötykuormaksi kutsuttuun muuttujaan, kun vastaanottava lippu on asetettu korkealle. Sitten vastaanotetut arvot dekoodataan utf-8: lla käyttäjän luettavien tietojen tulostamiseksi kuoreen. Laitamme myös moduulin takaisin lepotilaan, kunnes toinen arvo vastaanotetaan.
def on_rx_done (itse): print ("\ nVastaanotettu:") self.clear_irq_flags (RxDone = 1) hyötykuorma = self.read_payload (nocheck = True) tulosta (tavua (hyötykuorma).decode ("utf-8", "ohita"))) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Ohjelman loppuosa on vain tulostaa vastaanotetut arvot konsolille ja lopettaa ohjelma näppäimistön keskeytyksellä. Asetimme levyn jälleen lepotilaan myös ohjelman lopettamisen jälkeen virran säästämiseksi.
yritä: lora.start () paitsi KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") lopuksi: sys.stdout.flush () print ("") lora. set_mode (MODE.SLEEP) BOARD.teardown ()
Arduino-koodi LoRalle kommunikoimaan Raspberry Pi: n kanssa
Kuten aiemmin mainitsin, rpsreal- koodi tukee sekä Arduinoa että Pi: tä, joten kommunikointi Arduinon ja Pi välillä on mahdollista. Se toimii AirSpaycen Radiohead-kirjaston perusteella. Joten sinun on asennettava ensin radiopääkirjasto Arduino IDE -laitteeseesi.
Voit tehdä tämän käymällä Github-sivulla ja lataamalla kirjaston ZIP-kansioon. Aseta sitten se Arduino IDE: n kirjastokansioon. Käynnistä nyt Arduino IDE uudelleen ja löydät esimerkkitiedostot Radio head -kirjastolle. Täällä me ohjelmoimme Arduinon toimimaan LoRa-palvelimena lähettämään testipaketteja, kuten 0 - 9. Täydellinen koodi tekemään sama löytyy tämän sivun alareunasta kuin aina. Tässä selitän muutaman tärkeän linjan ohjelmassa.
Aloitamme ohjelman tuomalla SPI-kirjaston (oletuksena asennettu) käyttämään SPI-protokollaa ja sitten RH_RF95-kirjastoa Radio Headista LoRa-viestinnän suorittamiseksi. Sitten määritämme, mihin Arduinon piniin olemme liittäneet LoRan sirunvalinnan (CS), nollaus (RST) ja keskeytys (INT) nastan Arduinolla. Lopuksi määritellään myös, että moduulin tulisi toimia 434 MHz: n taajuudella ja alustaa LoRa-moduuli.
#sisältää
Sisällä setup toiminto me palauttaa Lora moduuli vetämällä sen reset pin alhainen 10 millisekunnin toinen aloittaa alusta. Sitten alustamme sen moduulilla, jonka olemme aiemmin luoneet käyttämällä Radio head -kirjastoa. Sitten asetetaan taajuus ja lähetysteho LoRa-palvelimelle. Suurempi lähetys, kauempana paketit kulkevat, mutta kuluttaa enemmän virtaa.
void setup () { // Initialize Serial Monitor Serial.begin (9600); // Nollaa LoRa-moduulin pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); viive (10); digitalWrite (RFM95_RST, HIGH); viive (10); // Alusta LoRa-moduuli, kun (! Rf95.init ()) { Serial.println ("LoRa-radion aloitus epäonnistui"); kun (1); } // Aseta oletustaajuus 434,0 MHz, jos (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("setFrequency epäonnistui"); kun (1); } rf95.setTxPower (18); // Lora-moduulin lähetysteho }
Infinite loop -toiminnon sisällä meidän on yksinkertaisesti lähetettävä datapaketti LoRa-moduulin kautta. Nämä tiedot voivat olla mitä tahansa käyttäjän komennon anturin arvoa. Mutta yksinkertaisuuden vuoksi lähetämme char-arvon 0-9 jokaista sekunnin välein ja alustamme sitten arvon takaisin arvoon 0 saavutettuasi 9. Huomaa, että arvot voidaan lähettää vain char-taulukon muodossa ja datan tyypin tulisi olla unit8_t, joka on 1 tavu kerrallaan. Sama tekevä koodi näkyy alla
void loop () { Sarja.tulos ("Lähetä:"); char radiopaketti = char (arvo)}; rf95.lähetä ((uint8_t *) radiopaketti, 1); viive (1000); arvo ++; jos (arvo> '9') arvo = 48; }
LoRa-viestinnän testaus Vadelma Pi: n ja Arduinon välillä
Nyt, kun saimme sekä laitteistomme että ohjelmamme valmiiksi, meidän on yksinkertaisesti ladattava Arduino-koodi UNO-levylle ja python-luonnos olisi käynnistettävä pi: llä. Testiasennukseni molempien laitteiden ollessa kytkettyinä näyttää tältä alla
Kun python-asiakkaan luonnos on käynnistetty Pi: llä (käytä vain python 3: ta), jos kaikki toimii oikein, sinun pitäisi nähdä Arduino-paketit, jotka on vastaanotettu pi: ssä kuori-ikkunasta. Sinun tulisi huomata "Vastaanotettu: 0" - 9, kuten alla olevassa kuvassa.
Raspberry pi -koodin ja tarvittavat kirjastot voidaan ladata täältä.
Voit nyt siirtää Arduino-palvelimen ja tarkistaa moduulin alueen; RSSI-arvo on myös mahdollista näyttää kuoressa tarvittaessa. Projektin täydellinen toiminta löytyy alla olevasta videosta. Nyt kun tiedämme kuinka luoda pitkän matkan pienitehoinen LoRa-tiedonsiirto Arduinon ja Raspberry pi: n välille, voimme jatkaa anturin lisäämistä Arduino-puolella ja pilvialustaa Pi-puolella täydellisen IoT-paketin luomiseksi.
Toivottavasti ymmärrät projektin ja nautit sen rakentamisesta. Jos sinulla on vaikeuksia saada se toimimaan, käytä alla olevaa kommenttiosaa tai muiden teknisten kyselyjen foorumeita.