- Modulul RF nRF24L01
- Diagrama circuitului
- Programarea Raspberry Pi pentru a trimite mesaj folosind nRF24l01
- Programarea Arduino UNO pentru a primi mesaj folosind nRF24l01
Designerii folosesc multe sisteme de comunicații fără fir, cum ar fi Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Module Wi-Fi, 433MHz RF Modules, Lora, nRF etc. Și selectarea mediului depinde de tipul de aplicație în care este utilizat. toate, un mediu wireless popular pentru comunicațiile în rețeaua locală este nRF24L01. Aceste module funcționează pe 2,4 GHz (bandă ISM) cu o rată de transmisie de la 250 Kbps la 2 Mbps, ceea ce este legal în multe țări și poate fi utilizat în aplicații industriale și medicale. De asemenea, se susține că, cu antene adecvate, aceste module pot transmite și primi semnale până la o distanță de 100 de metri între ele. Am folosit anterior nRF24L01 cu Arduino pentru a controla servomotorul și a crea o cameră de chat.
Aici vom folosi modulul nRF24L01 - Transceiver RF de 2,4 GHz cu Arduino UNO și Raspberry Pi pentru a stabili o comunicație fără fir între ele. Raspberry pi va acționa ca un transmițător, iar Arduino Uno va asculta Raspberry Pi și va imprima mesajul trimis de Raspberry Pi folosind nRF24L01 pe un ecran LCD de 16x2. nRF24L01 are, de asemenea, capabilități BLE încorporate și poate comunica și fără fir folosind BLE.
Tutorialul este împărțit în două secțiuni. Prima secțiune va include interfața nRF24L01 cu Arduino pentru a acționa ca receptor și a doua secțiune va include interfața nRF24L01 cu Raspberry Pi pentru a acționa ca emițător. Codul complet pentru ambele secțiuni cu videoclip de lucru va fi atașat la sfârșitul acestui tutorial.
Modulul RF nRF24L01
Cele Modulele nRF24L01 sunt de emisie - recepție module, ceea ce înseamnă fiecare modul poate atât trimite și primi date, dar din moment ce acestea sunt semi-duplex, fie ele pot trimite sau primi date la un moment dat. Modulul are IC generic nRF24L01 de la semiconductori nordici, care este responsabil pentru transmiterea și recepția datelor. IC comunică utilizând protocolul SPI și, prin urmare, poate fi ușor interfațat cu orice microcontrolere. Devine mult mai ușor cu Arduino, deoarece bibliotecile sunt ușor disponibile. De pinouts unui modul standard nRF24L01 este prezentat mai jos
Modulul are o tensiune de funcționare de la 1,9 V la 3,6 V (de obicei 3,3 V) și consumă foarte puțin curent de doar 12 mA în timpul funcționării normale, ceea ce îl face eficient din punct de vedere al bateriei și, prin urmare, poate funcționa chiar și pe celulele monede. Chiar dacă tensiunea de funcționare este de 3,3V, majoritatea pinilor sunt toleranți la 5V și, prin urmare, pot fi interfațați direct cu microcontrolere de 5V, cum ar fi Arduino. Un alt avantaj al utilizării acestor module este că fiecare modul are 6 conducte. Adică, fiecare modul poate comunica cu alte 6 module pentru a transmite sau primi date. Acest lucru face ca modulul să fie potrivit pentru crearea de rețele stele sau mesh în aplicații IoT. De asemenea, au o gamă largă de adrese de 125 de ID-uri unice, prin urmare, într-o zonă închisă putem folosi 125 dintre aceste module fără a interfera unul cu celălalt.
Diagrama circuitului
nRF24L01 cu Arduino:
Schema circuitului pentru conectarea nRF24L01 cu Arduino este ușoară și nu are prea multe componente. NRF24l01 va fi conectat prin interfața SPI și LCD 16x2 este interfațat cu protocolul I2C care utilizează doar două fire.
nRF24L01 cu Raspberry Pi:
Schema circuitului pentru conectarea nRF24L01 cu Raspberry Pi este, de asemenea, foarte simplă și numai interfața SPI este utilizată pentru a conecta Raspberry Pi și nRF24l01.
Programarea Raspberry Pi pentru a trimite mesaj folosind nRF24l01
Programarea Raspberry Pi se va face folosind Python3. De asemenea, puteți utiliza C / C ++ ca Arduino. Dar există deja o bibliotecă disponibilă pentru nRF24l01 în python, care poate fi descărcată de pe pagina github. Rețineți că programul python și biblioteca ar trebui să se afle în același folder sau programul python nu va putea găsi biblioteca. După descărcarea bibliotecii, extrageți și creați un folder în care toate programele și fișierele bibliotecii vor fi stocate. Când instalarea bibliotecii este terminată, începeți să scrieți programul. Programul începe cu includerea de biblioteci care vor fi utilizate în cod, cum ar fi biblioteca GPIO de import , pentru accesarea GPIO- urilor Raspberry Pi și timpul de import pentru accesarea funcțiilor legate de timp. Dacă sunteți nou în Raspberry Pi, începeți să începeți cu Raspberry pi.
import RPi.GPIO ca GPIO timp de import import spidev din lib_nrf24 import NRF24
Setați modul GPIO în „ Canalul Broadcom SOC”. Aceasta înseamnă că vă referiți la pini după numărul „canalului Broadcom SOC”, acestea sunt numerele după „GPIO” (de ex. GPIO01, GPIO02…). Acestea nu sunt numerele consiliului.
GPIO.setmode (GPIO.BCM)
Apoi îl vom configura adresa conductei. Această adresă este importantă pentru a comunica cu receptorul Arduino. Adresa va fi în codul hex.
conducte =,]
Începeți radioul folosind GPIO08 ca CE și GPIO25 ca pini CSN.
radio.begin (0, 25)
Setați dimensiunea sarcinii utile pe 32 de biți, adresa canalului ca 76, rata de date de 1 Mbps și nivelurile de putere ca minim.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Deschideți conductele pentru a începe să scrieți datele și imprimați detaliile de bază ale nRF24l01.
radio.openWritingPipe (pipes) radio.printDetails ()
Pregătiți un mesaj în forma șirului. Acest mesaj va fi trimis către Arduino UNO.
sendMessage = list ("Salut..Arduino UNO") în timp ce len (sendMessage) <32: sendMessage.append (0)
Începeți să scrieți la radio și continuați să scrieți șirul complet până când radioul este disponibil. Împreună cu acesta, notați ora și imprimați o declarație de depanare a livrării mesajului.
în timp ce True: start = time.time () radio.write (sendMessage) print ("Trimis mesajul: {}". format (sendMessage)) send radio.startListening ()
Dacă șirul este finalizat și conducta este închisă, tipăriți un mesaj de depanare expirat.
în timp ce nu radio.available (0): time.sleep (1/100) în cazul în care time.time () - Start> 2: print ("Expirat".) mesaj de eroare # imprimare dacă radioul deconectat sau nu mai funcționează rupe
Nu mai ascultați radioul și închideți comunicarea și reporniți comunicarea după 3 secunde pentru a trimite un alt mesaj.
radio.stopListening () # închidere radio timp.sleep (3) # da întârziere de 3 secunde
Programul Raspberry este ușor de înțeles dacă cunoașteți elementele de bază ale pythonului. Programul complet Python este dat la sfârșitul tutorialului.
Executarea programului Python în Raspberry Pi:
Executarea programului este foarte ușoară după urmarea pașilor de mai jos:
- Salvați fișierele Python Program și Library în același folder.
- Numele fișierului meu pentru Sender este nrfsend.py și, de asemenea, fiecare fișier se află în același folder
- Mergeți la Terminalul de comandă al Raspberry Pi. Și localizați fișierul programului Python folosind comanda „cd”.
- Apoi deschideți folderul și scrieți comanda „ sudo python3 your_program.py ” și apăsați Enter. Veți putea vedea detaliile de bază ale nRf24 și radioul va începe să trimită mesajele după fiecare 3 secunde. Depanarea mesajului se va afișa după ce trimiterea se face cu toate caracterele trimise.
Acum vom vedea același program ca receptor în Arduino UNO.
Programarea Arduino UNO pentru a primi mesaj folosind nRF24l01
Programarea Arduino UNO este similară cu programarea Raspberry Pi. Vom urma metode similare, dar cu limbaj de programare și pași diferiți. Pașii vor include partea de citire a nRF24l01. Biblioteca pentru nRF24l01 pentru Arduino poate fi descărcată de pe pagina github. Începeți cu includerea bibliotecilor necesare. Folosim LCD 16x2 folosind I2C Shield, așa că includeți biblioteca Wire.h și, de asemenea, nRF24l01 este interfațat cu SPI, așa că includeți biblioteca SPI.
#include
Includeți biblioteca RF24 și LCD pentru accesarea funcțiilor RF24 și LCD.
#include
Adresa LCD pentru I2C este 27 și este un LCD 16x2, așa că scrieți acest lucru în funcție.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 este conectat cu pinii SPI standard împreună cu CE în pinul 9 și CSN în pinul 10.
Radio RF24 (9, 10);
Porniți radioul, setați nivelul de putere și setați canalul la 76. De asemenea, setați adresa conductei la fel ca Raspberry Pi și deschideți conducta pentru a citi.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Începeți comunicarea I2C și inițializați afișajul LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print („Gata de primire”);
Începeți să ascultați la radio mesajele primite și setați lungimea mesajului la 32 de octeți.
radio.startListening (); char primitMessage = {0}
Dacă este atașat radio, începeți să citiți mesajul și salvați-l. Imprimați mesajul pe monitorul serial și, de asemenea, imprimați pe afișaj până când urmează următorul mesaj. Opriți radioul pentru a asculta și încercați din nou după un anumit interval. Aici sunt 10 micro secunde.
if (radio.available ()) { radio.read (recepționatMesaj, dimensiunea (recepționatMesaj)); Serial.println (primitMesaj); Serial.println („Oprirea radioului”.); radio.stopListening (); String stringMessage (primitMesaj); lcd.clear (); întârziere (1000); lcd.print (stringMessage); }
Încărcați codul complet dat la final în Arduino UNO și așteptați să fie primit mesajul.
Aceasta termină tutorialul complet despre trimiterea unui mesaj folosind Raspberry Pi & nRf24l01 și primirea acestuia folosind Arduino UNO & nRF24l01. Mesajul va fi tipărit pe ecranul LCD 16x2. Adresele conductelor sunt foarte importante atât în Arduino UNO, cât și în Raspberry Pi. Dacă vă confruntați cu dificultăți în timp ce faceți acest proiect, vă rugăm să comentați mai jos sau să accesați forul pentru discuții mai detaliate.
De asemenea, verificați videoclipul demonstrativ de mai jos.