- Mga Materyal na Kinakailangan
- Pagkonekta ng Raspberry Pi sa LoRa
- Pagkonekta sa Arduino kay LoRa
- pyLoRa para sa Raspberry Pi
- Ang pag-configure ng module ng Raspberry Pi para sa LoRa
- Programming Raspberry Pi para sa LoRa
- Arduino Code para sa LoRa upang makipag-usap sa Raspberry Pi
- Pagsubok sa LoRa Komunikasyon sa pagitan ng Raspberry Pi at Arduino
Ang LoRa ay lalong nagiging popular sa pagdating ng IoT, Connected Cars, M2M, Industry 4.0 at iba pa Dahil sa kakayahang makipag-usap sa mahabang distansya na may napakaliit na kuryente mas mabuti itong ginagamit ng mga taga-disenyo upang magpadala / tumanggap ng data mula sa isang bagay na pinapatakbo ng baterya. Tinalakay na natin ang mga pangunahing kaalaman ng LoRa at kung paano gamitin ang LoRa kasama si Arduino. Bagaman ang teknolohiya ay orihinal na inilaan para sa isang LoRa Node upang makipag-usap sa isang LoRa gateway, maraming mga sitwasyon kung saan ang isang LoRa Node ay kailangang makipag-usap sa isa pang LoRa Node upang makipagpalitan ng impormasyon sa mahabang distansya. Kaya, sa tutorial na ito matututunan natin kung paano gumamit ng isang module ng LoRa SX1278 na may Raspberry piupang makipag-usap sa isa pang SX1278 na konektado sa isang microcontroller tulad ng Arduino. Ang pamamaraang ito ay maaaring maging madaling gamiting sa maraming lugar dahil ang Arduino ay maaaring kumilos bilang isang Server upang kumuha ng data mula sa mga sensor at ipadala ito sa Pi sa isang mahabang distansya sa pamamagitan ng LoRa at pagkatapos ay ang Pi na kumikilos bilang isang Client ay maaaring makatanggap ng impormasyong ito at mai-upload ito sa maaaring dahil may access ito sa internet. Tunog nakakainteres di ba? Kaya, magsimula na tayo.
Mga Materyal na Kinakailangan
- SX1278 433MHz LoRa Module - 2 Blg
- 433MHz LoRa antena - 2No
- Arduino UNO- o ibang bersyon
- Raspberry Pi 3
Ipinapalagay na ang iyong Raspberry Pi ay na-flash na gamit ang isang operating system at nakakonekta sa internet. Kung hindi, sundin ang Pagsisimula sa tutorial ng Raspberry Pi bago magpatuloy. Narito ginagamit namin ang Rasbian Jessie na naka-install na Raspberry Pi 3.
Babala: Palaging gamitin ang iyong SX1278 LoRa module na may 433 MHz antennas; kung hindi man ay maaaring mapinsala ang modyul.
Pagkonekta ng Raspberry Pi sa LoRa
Bago kami makarating sa mga package ng software, ihanda na natin ang hardware. Ang SX1278 ay isang 16-pin na module ng Lora na nakikipag-usap gamit ang SPI sa 3.3V Logic. Ang Raspberry pi ay nagpapatakbo din sa antas ng lohika ng 3.3V at mayroon ding built-in na SPI port at 3.3V regulator. Kaya't maaari naming direktang ikonekta ang module ng LoRa sa Raspberry Pi. Ang talahanayan ng koneksyon ay ipinapakita sa ibabaRaspberry Pi | Lora - SX1278 Modyul |
3.3V | 3.3V |
Lupa | Lupa |
GPIO 10 | MOSI |
GPIO 9 | MISO |
GPIO 11 | SCK |
GPIO 8 | Nss / Paganahin |
GPIO 4 | DIO 0 |
GPIO 17 | DIO 1 |
GPIO 18 | DIO 2 |
GPIO 27 | DIO 3 |
GPIO 22 | RST |
Maaari mo ring gamitin ang circuit diagram sa ibaba para sa sanggunian. Tandaan na ang circuit diagram ay nilikha gamit ang module na RFM9x na halos kapareho ng module ng SX1278, kaya't maaaring magkakaiba ang hitsura sa imahe sa ibaba.
Ang mga koneksyon ay medyo tuwid, ang problema lamang na maaaring harapin mo ay ang SX1278 ay hindi tugma sa breadboard kaya't kailangan mong gumamit ng mga wire na kumonekta nang direkta upang makagawa ng mga koneksyon o gumamit ng dalawang maliit na mga breadboard tulad ng ipinakita sa ibaba. Ilang mga tao rin ang nagmumungkahi na paandarin ang module ng LoRa na may magkakahiwalay na 3.3V power rail dahil ang Pi ay maaaring hindi makapagmula ng sapat na kasalukuyang. Gayunpaman ang Lora na isang mababang module ng kuryente ay dapat gumana sa 3.3V rail ng Pi, sinubukan ko ang pareho at nalaman kong gumagana ito nang walang anumang problema. Ngunit, kunin pa rin ito sa isang pakot ng asin. Ang set-up ng aking koneksyon ng LoRa sa Raspberry pi ay mukhang isang bagay sa ibaba
Pagkonekta sa Arduino kay LoRa
Ang koneksyon para sa module ng Arduino ay mananatiling pareho sa ginamit namin sa aming nakaraang tutorial. Ang pagkakaiba lamang ay sa halip na gamitin ang silid-aklatan mula sa Sandeep Mistry gagamitin namin ang Rspreal library batay sa Radio head na tatalakayin namin sa paglaon sa proyektong ito. Ang circuit ay ibinibigay sa ibaba
Muli maaari mong gamitin ang 3.3V pin sa Arduino Uno o gumamit ng isang hiwalay na 3.3V regulator. Sa proyektong ito ginamit ko ang on-board voltage regulator. Ang talahanayan ng koneksyon ng pin ay ibinibigay sa ibaba upang matulungan kang madaling makagawa ng mga koneksyon.
LoRa SX1278 Modyul | Arduino UNO Board |
3.3V | 3.3V |
Gnd | Gnd |
En / Nss | D10 |
G0 / DIO0 | D2 |
SCK | D13 |
MISO | D12 |
MOSI | D11 |
RST | D9 |
Dahil ang module ay hindi umaangkop sa isang breadboard ginamit ko ang mga wires na kumokonekta nang direkta upang gawin ang mga koneksyon. Kapag ang koneksyon ay ginawa Arduino LoRa setup ay magiging hitsura ng isang bagay tulad nito sa ibaba
pyLoRa para sa Raspberry Pi
Maraming mga pakete sa python na maaari mong gamitin sa LoRa. Karaniwan din ang Raspberry Pi ay ginagamit bilang isang LoRaWAN upang makakuha ng data mula sa maraming mga node ng LoRa. Ngunit, sa proyektong ito ang aming hangarin na gawin ang komunikasyon ng Peer to Peer sa pagitan ng dalawang module ng Raspberry Pi o sa pagitan ng isang Raspberry Pi at isang Arduino. Kaya, napagpasyahan kong gamitin ang pyLoRa package. Mayroon itong rpsreal LoRa Arduino at rpsreal LoRa Raspberry pi modules na maaaring magamit sa Arduino at sa kapaligiran ng Raspberry Pi. Sa ngayon, mag-focus tayo sa kapaligiran ng Raspberry Pi.
Ang pag-configure ng module ng Raspberry Pi para sa LoRa
Tulad ng sinabi nang mas maaga ang module ng LoRa ay gumagana sa komunikasyon ng SPI, kaya kailangan naming paganahin ang SPI sa Pi at pagkatapos ay i-install ang pylora package. Sundin ang mga hakbang sa ibaba upang gawin ang pareho, pagkatapos buksan ang window ng terminal ng Pi. Muli, gumagamit ako ng masilya upang kumonekta sa aking Pi maaari mong gamitin ang iyong maginhawang pamamaraan.
Hakbang 1: Pumunta sa window ng pagsasaayos gamit ang sumusunod na utos. Upang makuha ang window sa ibaba
sudo raspi-config
Hakbang 2: Mag-navigate sa mga pagpipilian sa interfacing at paganahin ang SPI tulad ng ipinakita sa imahe sa ibaba. Kailangan naming paganahin ang interface ng SPI sapagkat habang tinatalakay namin ang LCD at PI na nakikipag-usap sa pamamagitan ng SPI protocol
Hakbang 3: I- save ang mga pagbabago at bumalik sa window ng terminal. Tiyaking nai-update ang pip at python at pagkatapos ay i-install ang RPi.GPIO package gamit ang sumusunod na utos.
pip install RPi.GPIO
Tutulungan kami ng klase ng package na makontrol ang GPIO pin sa Pi. Kung matagumpay na na-install ang iyong screen ay ganito ang hitsura
Hakbang 4: Gayundin magpatuloy sa pag-install ng spidev package gamit ang sumusunod na utos. Ang Spidev ay isang python binding para sa Linux na maaaring magamit upang maisagawa ang komunikasyon ng SPI sa Raspberry Pi.
pip install spidev
Kung matagumpay ang pag-install ang terminal ay dapat magmukhang katulad nito sa ibaba.
Hakbang 5: Susunod na hahayaan ang pag- install ng pyLoRa package gamit ang sumusunod na pip command. Ini-install ng package na ito ang mga modelo ng Radio na nauugnay sa LoRa.
pip install pyLoRa
Kung matagumpay ang pag-install makikita mo ang sumusunod na screen.
Sinusuportahan din ng pakete ng PyLoRa ang naka-encrypt na komunikasyon na maaaring magamit nang walang putol sa Arduino at Raspberry Pi. Mapapabuti nito ang seguridad ng data sa iyong komunikasyon. Ngunit kailangan mong mag-install ng magkakahiwalay na package pagkatapos ng hakbang na ito na hindi ko ginagawa dahil ang pag-encrypt ay wala sa saklaw ng tutorial na ito. Maaari mong sundin ang mga link sa itaas ng github para sa higit pang mga detalye.
Pagkatapos, ang hakbang na ito maaari mong idagdag ang impormasyon sa path ng package sa pi at subukan kasama ang programang sawa na ibinigay sa dulo. Ngunit hindi ko nagawang magdagdag ng landas na matagumpay at samakatuwid ay manu-manong nag-download ng library at gumamit ng pareho nang direkta para sa aking mga programa. Kaya't kailangan kong magpatuloy sa mga sumusunod na hakbang
Hakbang 6: I-download at i - install ang python-rpi.gpio package at spidev package gamit ang command sa ibaba.
sudo apt-get install python-rpi.gpio python3-rpi.gpio sudo apt-get install python-spidev python3-spidev
Ang window ng terminal ay dapat magpakita ng tulad nito pagkatapos ng parehong mga pag-install.
Hakbang 7: Mag- install din ng git at pagkatapos ay gamitin ito upang ma-clone ang direktoryo ng sawa para sa aming Raspberry Pi. Maaari mong gawin iyon gamit ang mga sumusunod na utos.
sudo apt-get install git sudo git clone
Kapag nakumpleto ang hakbang na ito dapat mong makita ang SX127x sub direktoryo sa Raspberry Pi home folder. Magkakaroon ito ng lahat ng kinakailangang mga file na nauugnay sa library.
Programming Raspberry Pi para sa LoRa
Sa isang peer to peer na LoRa na komunikasyon ang modyul na nagpapadala ng impormasyon ay tinatawag na isang server at ang modyul na tumatanggap ng impormasyon ay tinatawag na isang kliyente. Sa karamihan ng mga kaso ang Arduino ay gagamitin sa patlang na may isang sensor upang sukatin ang data at gagamitin ang Pi upang matanggap ang data na ito. Kaya, nagpasya akong gamitin ang Raspberry Pi bilang isang kliyente at ang Arduino bilang isang server sa tutorial na ito. Ang kumpletong programa ng client ng Raspberry Pi ay matatagpuan sa ilalim ng pahinang ito. Dito ko susubukan na ipaliwanag ang mga mahahalagang linya sa programa.
Pag-iingat: Siguraduhin na ang file ng programa ay nasa parehong direktoryo kung saan naroroon ang folder ng SX127x library. Maaari mong kopyahin ang folder na ito at gamitin ito kahit saan kung nais mong i-port ang proyekto.
Ang programa ay medyo simple kailangan naming itakda ang module ng LoRa upang gumana sa 433Mhz at pagkatapos ay makinig para sa mga papasok na packet. Kung makakatanggap kami ng anumang simpleng na-print namin ang mga ito sa console. Tulad ng lagi naming sinisimulan ang programa sa pamamagitan ng pag-import ng kinakailangang mga library ng sawa.
mula sa oras na pag-import ng pagtulog mula sa SX127x.LoRa import * mula sa SX127x.board_config import BOARD BOARD.setup ()
Sa kasong ito ang oras na pakete ay ginagamit upang lumikha ng mga pagkaantala, ang Lora package ay ginagamit para sa komunikasyon ng LoRa at ang board_config ay ginagamit upang itakda ang board at mga parameter ng LoRa. Inaayos din namin ang board gamit ang function na BOARD.setup () .
Susunod na nilikha namin ang klase ng python LoRa na may tatlong mga kahulugan. Dahil indent lamang namin upang paganahin ang programa bilang isang raspberry client ang klase ay may tatlong mga pag-andar lamang katulad ng init class, start class at on_rx_done class. Pinasimulan ng init class ang module ng LoRa sa 433MHz na may 125kHz bandwidth tulad ng itinakda sa set_pa_config na pamamaraan. Pagkatapos ay inilalagay din ang module sa mode ng pagtulog upang makatipid ng pagkonsumo ng kuryente.
# Medium Range Defaults pagkatapos init ay 434.0MHz, Bw = 125 kHz, Cr = 4/5, Sf = 128chips / simbolo, CRC sa 13 dBm lora.set_pa_config (pa_select = 1) def __init __ (sarili, verbose = Mali): sobrang (LoRaRcvCont, sarili).__ init __ (verbose) self.set_mode (MODE.SLEEP) self.set_dio_mapping (* 6)
Ang pag-andar ng pagsisimula ay kung saan namin mai-configure ang module bilang tatanggap at kumuha tulad ng RSSI (Tumatanggap ng tagapagpahiwatig ng lakas ng signal), katayuan, dalas ng operating atbp. Itinakda namin ang module upang gumana sa tuluy-tuloy na mode ng tatanggap (RXCONT) mula sa mode na pagtulog at pagkatapos ay gumamit ng isang habang loop upang basahin ang mga halaga tulad ng RSSI at katayuan ng modem. I-flush din namin ang data sa serial buffer papunta sa terminal.
def start (self): self.reset_ptr_rx () self.set_mode (MODE.RXCONT) habang True: sleep (.5) rssi_value = self.get_rssi_value () status = self.get_modem_status () sys.stdout.flush ()
Sa wakas ang on_rx_done function ay naisakatuparan pagkatapos mabasa ang papasok na packet. Sa pagpapaandar na ito ang mga natanggap na halaga ay inililipat sa isang variable na tinatawag na payload mula sa Rx buffer pagkatapos itakda ang mataas na pagtanggap ng flag. Pagkatapos ang mga natanggap na halaga ay na-decode ng utf-8 upang mai-print ang isang nababasa na data ng gumagamit sa shell. Inilagay din namin ang module sa mode ng pagtulog hanggang sa matanggap ang isa pang halaga.
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", 'huwag pansinin')) self.set_mode (MODE.SLEEP) self.reset_ptr_rx () self.set_mode (MODE.RXCONT)
Ang natitirang bahagi ng programa ay upang mai - print lamang ang mga natanggap na halaga sa console at wakasan ang programa gamit ang isang makagambala na keyboard. Muli naming itinakda ang board sa mode ng pagtulog kahit na matapos ang pagwawakas ng programa upang makatipid ng kuryente.
subukan: lora.start () maliban sa KeyboardInterrupt: sys.stdout.flush () print ("") sys.stderr.write ("KeyboardInterrupt \ n") sa wakas: sys.stdout.flush () print ("") lora. set_mode (MODE. TULOG) BOARD.teardown ()
Arduino Code para sa LoRa upang makipag-usap sa Raspberry Pi
Tulad ng nabanggit ko nang mas maaga ang rpsreal code ay sumusuporta sa parehong Arduino at Pi at samakatuwid posible ang komunikasyon sa pagitan ng Arduino at Pi. Gumagana ito batay sa Radiohead Library mula sa AirSpayce's. Kaya kailangan mo munang i - install ang library ng ulo ng radyo sa iyong Arduino IDE.
Upang gawin iyon bisitahin ang pahina ng Github at i-download ang library sa ZIP folder. Pagkatapos ilagay ito sa folder ng library ng iyong Arduino IDE. Ngayon, i-restart ang Arduino IDE at makakakita ka ng mga halimbawang file para sa Radio head library. Dito ipaprogram namin ang Arduino upang gumana bilang isang server ng LoRa upang magpadala ng mga packet na pagsubok tulad ng 0 hanggang 9. Ang Kumpletong code upang gawin ang pareho ay matatagpuan sa ilalim ng pahinang ito nang lagi. Dito, ipapaliwanag ko ang ilang mahahalagang linya sa programa.
Sinimulan namin ang programa sa pamamagitan ng pag-import ng library ng SPI (na naka-install bilang default) upang magamit ang SPI protocol at pagkatapos ang RH_RF95 library mula sa Radio head upang maisagawa ang komunikasyon ng LoRa. Pagkatapos ay tinukoy namin kung aling pin ng Arduino ang naikonekta namin sa Chip select (CS), Reset (RST) at Interrupt (INT) pin ng LoRa kasama ng Arduino. Sa wakas ay tinukoy din namin na ang module ay dapat gumana sa 434MHz Frequency at ipasimula ang module ng LoRa.
# isama
Sa loob ng pag- andar ng pag- setup ay ire-reset namin ang module ng LoRa sa pamamagitan ng paghila ng reset pin nito sa mababa sa 10 milli segundo upang magsimulang sariwa. Pagkatapos ay pinasimulan namin ito sa module na nilikha namin kanina gamit ang radio head library. Pagkatapos, itinatakda namin ang dalas at lakas ng paghahatid para sa LoRa server. Mas mataas ang paghahatid ng mas distansya ang iyong mga packet ay maglalakbay ngunit gugugol ng mas maraming lakas.
void setup () { // Initialize Serial Monitor Serial.begin (9600); // Reset LoRa Module pinMode (RFM95_RST, OUTPUT); digitalWrite (RFM95_RST, LOW); antala (10); digitalWrite (RFM95_RST, TAAS); antala (10); // Initialize LoRa Module habang (! Rf95.init ()) { Serial.println ("LoRa radio init failed"); habang (1); } // Itakda ang default na dalas 434.0MHz kung (! Rf95.setFrequency (RF95_FREQ)) { Serial.println ("Nabigo ang setFrequency"); habang (1); } rf95.setTxPower (18); // Transmission power of the Lora Module }
Sa loob ng walang katapusang pag- andar ng loop , kailangan lang naming ipadala ang data packet sa pamamagitan ng module na LoRa. Ang data na ito ay maaaring maging anumang tulad ng halaga ng sensor ng utos ng gumagamit. Ngunit para sa pagiging simple magpapadala kami ng halaga ng char 0 hanggang 9 para sa bawat 1 segundo na agwat at pagkatapos ay simulan ang halaga pabalik sa 0 pagkatapos maabot ang 9. Tandaan na ang mga halaga ay maipapadala lamang sa isang format na char array at ang uri ng data ay dapat na unit8_t na ay 1 byte nang paisa-isa. Ang code na gawin ang pareho ay ipinapakita sa ibaba
void loop () { Serial.print ("Ipadala:"); char radiopacket = char (halaga)}; rf95.send ((uint8_t *) radiopacket, 1); pagkaantala (1000); halaga ++; kung (halaga> '9') halaga = 48; }
Pagsubok sa LoRa Komunikasyon sa pagitan ng Raspberry Pi at Arduino
Ngayon, na nakakuha kami ng pareho ng aming hardware at programa na kailangan lang namin i-upload ang Arduino code sa UNO board at ang python sketch ay dapat ilunsad sa pi. Ang aking set-up na pagsubok kasama ang parehong hardware na nakakonekta, mukhang isang bagay sa ibaba
Kapag ang python client sketch ay inilunsad sa Pi (gamitin lamang sawa 3), kung ang lahat ay gumagana nang maayos dapat mong makita ang mga Arduino packet na natanggap sa pi kahit na ang window ng shell. Dapat mong mapansin ang "Natanggap: 0" hanggang sa 9 tulad ng ipinakita sa imahe sa ibaba.
Ang kumpletong Raspberry pi code na may lahat ng mga kinakailangang aklatan ay maaaring ma-download mula dito.
Maaari mo na ngayong ilipat ang Arduino server at suriin ang saklaw ng module; posible ring ipakita ang halaga ng RSSI sa shell kung kinakailangan. Ang kumpletong pagtatrabaho ng proyekto ay matatagpuan sa video na naka-link sa ibaba. Ngayon, na alam namin kung paano magtaguyod ng malayong distansya ng LoRa na komunikasyon sa pagitan ng Arduino at Raspberry pi maaari kaming magpatuloy sa pagdaragdag ng sensor sa gilid ng Arduino at cloud platform sa Pi side upang makagawa ng isang kumpletong pakete ng IoT.
Inaasahan kong naintindihan mo ang proyekto at nasiyahan sa pagbuo nito. Kung mayroon kang problema sa pagpapaandar nito, gamitin ang seksyon ng komento sa ibaba o ang mga forum para sa iba pang mga teknikal na quair.