- NRF24L01 RF modulis
- Grandinės schema
- „Raspberry Pi“ programavimas siųsti pranešimą naudojant „nRF24l01“
- „Arduino UNO“ programavimas priimti pranešimą naudojant „nRF24l01“
Dizaineriai naudoja daugybę belaidžių ryšių sistemų, tokių kaip „Bluetooth Low Energy“ (BLE 4.0), „Zigbee“, ESP8266 „Wi-Fi“ moduliai, 433 MHz RF moduliai, „Lora“, „nRF“ ir kt. O terpės pasirinkimas priklauso nuo programos, kurioje ji naudojama, tipo. viskas, viena populiari belaidžio terpė vietiniam tinklui palaikyti yra „ nRF24L01“. Šie moduliai veikia 2,4 GHz (ISM juostoje) perdavimo sparta nuo 250 kbps iki 2 Mbps, o tai yra legalu daugelyje šalių ir gali būti naudojami pramonėje ir medicinoje. Taip pat teigiama, kad su tinkamomis antenomis šie moduliai gali perduoti ir priimti signalus iki 100 metrų atstumo tarp jų. Anksčiau mes naudojome „nRF24L01“ su „Arduino“ valdydami servo variklį ir sukūrę pokalbių kambarį.
Norėdami sukurti belaidį ryšį tarp jų, naudosime nRF24L01 - 2,4 GHz radijo imtuvo modulį su „Arduino UNO“ ir „Raspberry Pi“. „Raspberry pi“ veiks kaip siųstuvas, o „Arduino Uno“ klausysis „Raspberry Pi“ ir atspausdins „Raspberry Pi“ atsiųstą pranešimą naudodamas „nRF24L01“ 16x2 LCD ekrane. „nRF24L01“ taip pat turi įmontuotas „BLE“ galimybes ir taip pat gali bendrauti belaidžiu būdu naudodamas „BLE“.
Pamoka yra padalinta į dvi dalis. Pirmame skyriuje bus „ nRF24L01 “ sąsaja su „Arduino“, kad veiktų kaip imtuvas, o antrajame skyriuje bus „ nRF24L01 “ sąsaja su „Raspberry Pi“, kad ji veiktų kaip siųstuvas. Pilnas abiejų skyrių kodas su veikiančiu vaizdo įrašu bus pridėtas šios pamokos pabaigoje.
NRF24L01 RF modulis
„ NRF24L01“ moduliai yra siųstuvo-imtuvo moduliai, o tai reiškia, kad kiekvienas modulis gali ir siųsti, ir priimti duomenis, tačiau kadangi jie yra pusiau dupleksai, jie gali siųsti arba gauti duomenis vienu metu. Modulis turi bendrą Šiaurės šalių puslaidininkių „nRF24L01 IC“, atsakingą už duomenų perdavimą ir priėmimą. IC palaiko ryšį naudodamas SPI protokolą, todėl gali būti lengvai suderinamas su bet kokiais mikrovaldikliais. Su „Arduino“ daug lengviau, nes bibliotekos yra lengvai prieinamos. Kad standartinio nRF24L01 modulio pinouts yra parodyta žemiau
Modulio veikimo įtampa yra nuo 1,9 V iki 3,6 V (paprastai 3,3 V), o įprasto veikimo metu sunaudojama labai mažai tik 12 mA srovės, todėl baterija yra efektyvi ir todėl gali veikti net monetų elementuose. Nors darbinė įtampa yra 3,3 V, dauguma kaiščių yra atsparūs 5 V įtampai, todėl juos galima tiesiogiai susieti su 5 V mikrovaldikliais, tokiais kaip „Arduino“. Kitas šių modulių naudojimo pranašumas yra tas, kad kiekviename modulyje yra 6 vamzdynai. Tai reiškia, kad kiekvienas modulis gali bendrauti su 6 kitais moduliais perduoti ar priimti duomenis. Todėl modulis yra tinkamas kurti žvaigždžių ar tinklų tinklus IoT programose. Be to, jie turi platų 125 unikalių ID adresų diapazoną, todėl uždaroje zonoje mes galime naudoti 125 iš šių modulių netrukdydami vienas kitam.
Grandinės schema
nRF24L01 su „Arduino“:
„NRF24L01“ prijungimo prie „Arduino“ schema yra lengva ir neturi daug komponentų. „ NRF24l01“ bus sujungtas naudojant SPI sąsają, o 16x2 skystųjų kristalų ekranas yra susietas su „I2C“ protokolu, kuris naudoja tik du laidus.
nRF24L01 su aviete Pi:
„NRF24L01“ ir „Raspberry Pi“ prijungimo schema taip pat yra labai paprasta, o „Raspberry Pi“ ir „nRF24l01“ prijungti naudojama tik SPI sąsaja.
„Raspberry Pi“ programavimas siųsti pranešimą naudojant „nRF24l01“
„Raspberry Pi“ programavimas bus atliekamas naudojant „Python3“. Taip pat galite naudoti „C / C ++“ kaip „Arduino“. Bet jau yra „Python“ nRF24l01 biblioteka, kurią galima atsisiųsti iš „github“ puslapio. Atkreipkite dėmesį, kad „python“ programa ir biblioteka turėtų būti tame pačiame aplanke, kitaip „python“ programa negalės rasti bibliotekos. Atsisiuntę biblioteką, tiesiog ištraukite ir sukurkite aplanką, kuriame bus visos programos ir bibliotekos failai. Baigę bibliotekos diegimą, tiesiog pradėkite rašyti programą. Programa prasideda įtraukiant bibliotekas, kurios bus naudojamos tokiuose koduose kaip GPIO importavimo biblioteka, norint pasiekti Raspberry Pi GPIO ir importuoti laiką prieigai prie laiko funkcijų. Jei esate naujokas „Raspberry Pi“, grįžkite prie „Raspberry pi“ naudojimo pradžios.
importuoti RPi.GPIO kaip GPIO importavimo laiką importuoti spidev iš lib_nrf24 importuoti NRF24
„ Broadcom SOC kanale“ nustatykite GPIO režimą . Tai reiškia, kad smeigtukus nurodote „Broadcom SOC channel“ numeriu, tai yra skaičiai po „GPIO“ (pvz., GPIO01, GPIO02…). Tai nėra lentų numeriai.
GPIO.setmode (GPIO.BCM)
Toliau nustatysime vamzdžio adresą. Šis adresas yra svarbus norint bendrauti su „Arduino“ imtuvu. Adresas bus šešioliktainis kodas.
vamzdžiai =,]
Pradėkite radiją naudodami GPIO08 kaip CE ir GPIO25 kaip CSN kaiščius.
radijas. pradžia (0, 25)
Nustatykite naudingosios apkrovos dydį kaip 32 bitų, kanalo adresą - 76, duomenų perdavimo spartą - 1 Mb / s ir galios lygius.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Atidarykite vamzdžius, kad pradėtumėte rašyti duomenis, ir išspausdinkite pagrindinę „nRF24l01“ informaciją.
radio.openWritingPipe (vamzdžiai) radio.printDetails ()
Paruoškite pranešimą eilutės forma. Šis pranešimas bus išsiųstas „Arduino UNO“.
sendMessage = list ("Sveiki… Arrduino UNO"), o len (sendMessage) <32: sendMessage.append (0)
Pradėkite rašyti į radiją ir rašykite visą eilutę, kol radijas bus prieinamas. Kartu su juo užsirašykite laiką ir atsispausdinkite pranešimo pristatymo derinimo ataskaitą.
o True: start = time.time () radio.write (sendMessage) print ("Išsiųstas pranešimas: {}". format (sendMessage)) siųsti radio.startListening ()
Jei eilutė baigta ir vamzdis uždarytas, atspausdinkite derinimo pranešimą, kurio laikas baigėsi.
o ne radio.available (0): time.sleep (1/100) , jei time.time () - pradžia> 2: Spausdinti ("baigėsi.") # spausdinimo klaidos pranešimą, jei radijo atjungtas ar neveikia nebėra pertraukos
Nustokite klausytis radijo, uždarykite ryšį ir po 3 sekundžių pradėkite ryšį iš naujo, kad išsiųstumėte kitą pranešimą.
radijas.stopKlausymas () # uždaryti radijo laiką. miegoti (3) # suteikti 3 sekundžių uždelsimą
„Raspberry“ programą lengva suprasti, jei žinote pagrindinius pitono pagrindus. Pamokos pabaigoje pateikiama visa „Python“ programa.
„Python“ programos vykdymas „Raspberry Pi“:
Vykdant toliau nurodytus veiksmus labai lengva vykdyti programą:
- Išsaugokite „Python“ programos ir bibliotekos failus tame pačiame aplanke.
- Mano programos failo pavadinimas „Sender“ yra Nrfsend.py, o visi failai yra tame pačiame aplanke
- Eikite į „Raspberry Pi“ komandų terminalą. Ir raskite „python“ programos failą naudodami komandą „cd“.
- Tada atidarykite aplanką ir parašykite komandą „ sudo python3 your_program.py “ ir paspauskite Enter. Galėsite pamatyti pagrindinę „nRf24“ informaciją ir radijas pradės siųsti pranešimus kas 3 sekundes. Pranešimo derinimas bus rodomas išsiunčiant visus išsiųstus simbolius.
Dabar „Arduino UNO“ pamatysime tą pačią programą kaip imtuvą.
„Arduino UNO“ programavimas priimti pranešimą naudojant „nRF24l01“
„Arduino UNO“ programavimas yra panašus į „Raspberry Pi“ programavimą. Mes laikysimės panašių metodų, tačiau naudosime skirtingas programavimo kalbas ir veiksmus. Veiksmai apims nRF24l01 skaitymo dalį. „Arduino“ nRF24l01 biblioteką galima atsisiųsti iš „github“ puslapio. Pradėkite nuo būtinų bibliotekų įtraukimo. Mes naudojame 16x2 skystųjų kristalų ekraną naudodami „I2C Shield“, todėl įtraukite „ Wire.h“ biblioteką, o „nRF24l01“ yra susieta su SPI, taigi įtraukite ir „SPI“ biblioteką.
# įtraukti
Įtraukite RF24 ir LCD biblioteką, kad galėtumėte naudotis RF24 ir LCD funkcijomis.
# įtraukti
„I2C“ skystųjų kristalų ekranas yra 27, o 16x2 skystųjų kristalų ekranas, todėl įrašykite tai į funkciją.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 yra sujungtas su standartiniais SPI kaiščiais kartu su CE kaiščiu 9 ir CSN 10 kaiščiu.
RF24 radijas (9, 10);
Įjunkite radiją, nustatykite galios lygį ir nustatykite kanalą į 76. Taip pat nustatykite vamzdžio adresą, tokį patį kaip Raspberry Pi, ir atidarykite vamzdį skaityti.
radijas.prasideda (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t vamzdis = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, vamzdis);
Pradėkite „I2C“ ryšį ir pradėkite LCD ekraną.
Viela.prasideda (); lcd.begin (); lcd.home (); lcd.print („Parengta priimti“);
Pradėkite klausytis radijo, kad gautumėte žinutes ir nustatykite pranešimo ilgį 32 baitais.
radijas.startasKlausymasis (); char charMessage = {0}
Jei radijas prijungtas, pradėkite skaityti pranešimą ir išsaugokite jį. Spausdinkite pranešimą į nuoseklųjį monitorių ir atspausdinkite ekrane, kol ateis kitas pranešimas. Sustabdykite radiją klausytis ir po tam tikro laiko bandykite dar kartą. Čia yra 10 mikro sekundžių.
if (radio.available ()) { radio.read (gautasMessage, sizeof (gautasMessage)) Serial.println (gautas pranešimas); Serial.println („Radijo išjungimas“); radijas.stopKlausymas (); String stringMessage (gautas pranešimas); lcd.clear (); vėlavimas (1000); lcd.print (stringMessage); }
Įkelkite visą kodą, pateiktą pabaigoje, į „Arduino UNO“ ir palaukite, kol bus gautas pranešimas.
Baigiama išsami instrukcija, kaip išsiųsti pranešimą naudojant „Raspberry Pi & nRf24l01“ ir gauti jį naudojant „Arduino UNO & nRF24l01“. Pranešimas bus atspausdintas 16x2 LCD ekrane. Vamzdžių adresai yra labai svarbūs tiek „Arduino UNO“, tiek „Raspberry Pi“. Jei vykdydami šį projektą susiduriate su sunkumais, komentuokite toliau arba susisiekite su forumu, kur rasite išsamesnę diskusiją.
Taip pat patikrinkite toliau pateiktą demonstracinį vaizdo įrašą.