- RF-modulet nRF24L01
- Kredsløbsdiagram
- Programmering af Raspberry Pi til at sende besked ved hjælp af nRF24l01
- Programmering af Arduino UNO til at modtage besked ved hjælp af nRF24l01
Designere bruger mange trådløse kommunikationssystemer som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF osv. Og valget af medium afhænger af, hvilken type applikation det bruges i. Blandt alt sammen, et populært trådløst medium til lokal netværkskommunikation er nRF24L01. Disse moduler fungerer på 2,4 GHz (ISM-bånd) med baudrate fra 250 Kbps til 2 Mbps, hvilket er lovligt i mange lande og kan bruges i industrielle og medicinske applikationer. Det hævdes også, at disse moduler med passende antenner kan sende og modtage signaler op til en afstand på 100 meter imellem dem. Vi har tidligere brugt nRF24L01 med Arduino til at styre servomotoren og oprette et chatrum.
Her bruger vi nRF24L01 - 2,4 GHz RF Transceiver-modul med Arduino UNO og Raspberry Pi til at etablere en trådløs kommunikation mellem dem. Raspberry pi fungerer som en sender, og Arduino Uno vil lytte til Raspberry Pi og udskrive beskeden sendt af Raspberry Pi ved hjælp af nRF24L01 på et 16x2 LCD. nRF24L01 har også indbygget BLE-funktionalitet, og den kan også kommunikere trådløst ved hjælp af BLE.
Selvstudiet er opdelt i to sektioner. Den første sektion vil omfatte grænsefladen mellem nRF24L01 og Arduino for at fungere som modtager, og den anden sektion vil omfatte grænsefladen mellem nRF24L01 og Raspberry Pi for at fungere som sender. Den komplette kode for begge sektioner med arbejdsvideo vedhæftes i slutningen af denne vejledning.
RF-modulet nRF24L01
De nRF24L01 moduler er transceiver moduler, hvilket betyder hvert modul kan både sende og modtage data, men da de er halv-duplex, de kan enten sende eller modtage data ad gangen. Modulet har den generiske nRF24L01 IC fra nordiske halvledere, som er ansvarlig for transmission og modtagelse af data. IC'en kommunikerer ved hjælp af SPI-protokollen og kan derfor let interfaces med alle mikrocontrollere. Det bliver meget lettere med Arduino, da bibliotekerne er let tilgængelige. De pinouts af en standard nRF24L01 modul er vist nedenfor
Modulet har en driftsspænding fra 1,9 V til 3,6 V (typisk 3,3 V) og bruger meget mindre strøm på kun 12 mA under normal drift, hvilket gør det batterieffektivt og kan derfor endda køre på møntceller. Selvom driftsspændingen er 3,3 V, er de fleste stifter 5 V tolerante og kan derfor direkte interfaces med 5 V mikrokontroller som Arduino. En anden fordel ved at bruge disse moduler er, at hvert modul har 6 rørledninger. Det betyder, at hvert modul kan kommunikere med 6 andre moduler for at transmittere eller modtage data. Dette gør modulet velegnet til oprettelse af stjerne- eller mesh-netværk i IoT-applikationer. De har også et bredt adresseområde på 125 unikke ID'er, og derfor kan vi i et lukket område bruge 125 af disse moduler uden at forstyrre hinanden.
Kredsløbsdiagram
nRF24L01 med Arduino:
Kredsløbsdiagrammet til at forbinde nRF24L01 med Arduino er let og har ikke meget komponenter. Den nRF24l01 vil være forbundet med SPI interface og 16x2 LCD interfaces med I2C protokol, som kun bruger to ledninger.
nRF24L01 med Raspberry Pi:
Kredsløbsdiagrammet til tilslutning af nRF24L01 med Raspberry Pi er også meget simpelt, og kun SPI-grænsefladen bruges til at forbinde Raspberry Pi og nRF24l01.
Programmering af Raspberry Pi til at sende besked ved hjælp af nRF24l01
Programmering af Raspberry Pi udføres ved hjælp af Python3. Du kan også bruge C / C ++ som Arduino. Men der er allerede et bibliotek til rådighed for nRF24l01 i python, som kan downloades fra github-siden. Bemærk, at pythonprogrammet og biblioteket skal være i samme mappe, ellers kan pythonprogrammet ikke finde biblioteket. Efter download af biblioteket skal du bare udpakke og oprette en mappe, hvor alle programmer og biblioteksfiler gemmes. Når biblioteksinstallationen er færdig, skal du bare begynde at skrive programmet. Programmet starter med inkluderingen af biblioteker, der vil blive brugt i kode som import af GPIO-bibliotek for at få adgang til Raspberry Pi GPIO'er og importtid for at få adgang til de tidsrelaterede funktioner. Hvis du er ny hos Raspberry Pi, så vend tilbage til at komme i gang med Raspberry pi.
importer RPi.GPIO som GPIO importtid import spidev fra lib_nrf24 import NRF24
Indstil GPIO-tilstand i " Broadcom SOC-kanal". Dette betyder, at du henviser til benene med "Broadcom SOC-kanal" -nummeret, dette er tallene efter "GPIO" (f.eks. GPIO01, GPIO02…). Disse er ikke bestyrelsesnumrene.
GPIO.setmode (GPIO.BCM)
Dernæst indstiller vi den til røradressen. Denne adresse er vigtig for at kommunikere med Arduino-modtageren. Adressen vil være i hex-kode.
rør =,]
Start radioen ved hjælp af GPIO08 som CE og GPIO25 som CSN-ben.
radio.begin (0, 25)
Indstil nyttelaststørrelse som 32 bit, kanaladresse som 76, datahastighed på 1 Mbps og effektniveauer som minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Åbn rørene for at begynde at skrive dataene og udskriv de grundlæggende detaljer i nRF24l01.
radio.openWritingPipe (rør) radio.printDetails ()
Forbered en besked i strengformularen. Denne meddelelse sendes til Arduino UNO.
sendMessage = liste ("Hej..Arduino UNO") mens len (sendMessage) <32: sendMessage.append (0)
Begynd at skrive til radioen, og fortsæt med at skrive den komplette streng, indtil radioen er tilgængelig. Sammen med det skal du notere tiden og udskrive en fejlretningserklæring om meddelelseslevering.
mens True: start = time.time () radio.write (sendMessage) print ("Sendte meddelelsen: {}". format (sendMessage)) send radio.startListening ()
Hvis strengen er afsluttet, og røret lukkes, skal du udskrive en fejlretningsmeddelelse om timeout.
mens den ikke er radio.tilgængelig (0): time.sleep (1/100) hvis time.time () - start> 2: print ("Time out.") # fejlmeddelelse om udskrivning, hvis radioen er afbrudt eller ikke fungerer mere, pause
Stop med at lytte til radioen og luk kommunikationen, og genstart kommunikationen efter 3 sekunder for at sende en ny besked.
radio.stopListening () # lukker radiotid. søvn (3) # giver forsinkelse på 3 sekunder
Raspberry-programmet er let at forstå, hvis du kender det grundlæggende i python. Komplet Python-program gives i slutningen af vejledningen.
Udførelse af Python-programmet i Raspberry Pi:
At udføre programmet er meget let efter følgende trin:
- Gem Python-program- og biblioteksfilerne i den samme mappe.
- Mit programfilnavn til afsender er nrfsend.py, og også alle filer er i samme mappe
- Gå til Command Terminal of Raspberry Pi. Og find python-programfilen ved hjælp af kommandoen “cd”.
- Åbn derefter mappen og skriv kommandoen “ sudo python3 your_program.py ” og tryk enter. Du vil være i stand til at se de grundlæggende detaljer i nRf24, og radioen begynder at sende beskederne efter hvert 3. sekund. Fejlmeddelelsen om meddelelse vises, når afsendelsen er færdig med alle sendte tegn.
Nu vil vi se det samme program som modtager i Arduino UNO.
Programmering af Arduino UNO til at modtage besked ved hjælp af nRF24l01
Programmering af Arduino UNO svarer til programmering af Raspberry Pi. Vi vil følge lignende metoder, men med forskellige programmeringssprog og trin. Trinene inkluderer læsedelen af nRF24l01. Biblioteket til nRF24l01 til Arduino kan downloades fra github-siden. Start med at inkludere nødvendige biblioteker. Vi bruger 16x2 LCD ved hjælp af I2C Shield, så inkluder Wire.h- biblioteket, og også nRF24l01 er grænseflade med SPI, så inkluder SPI-bibliotek.
#omfatte
Inkluder RF24- og LCD-biblioteket for adgang til RF24- og LCD-funktionerne.
#omfatte
LCD-adressen til I2C er 27, og det er en 16x2 LCD, så skriv dette ind i funktionen.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 er forbundet med standard SPI-ben sammen med CE i ben 9 og CSN i ben 10.
RF24 radio (9, 10);
Start radioen, indstil effektniveauet, og indstil kanalen til 76. Indstil også røradressen som Raspberry Pi, og åbn røret for at læse.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t rør = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Start I2C-kommunikationen, og initialiser LCD-skærmen.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Klar til modtagelse");
Begynd at lytte til radioen for indgående beskeder, og indstil meddelelseslængden til 32 byte.
radio.startListening (); char modtaget besked = {0}
Hvis der er tilsluttet radio, skal du begynde at læse beskeden og gemme den. Udskriv meddelelsen til seriel skærm og udskriv også til displayet, indtil den næste besked kommer. Stop radioen for at lytte og prøv igen efter et stykke tid. Her er det 10 mikrosekunder.
hvis (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("Slukning af radioen."); radio.stopListening (); String stringMessage (receivedMessage); lcd.clear (); forsinkelse (1000); lcd.print (stringMessage); }
Upload den komplette kode, der er givet i slutningen, til Arduino UNO, og vent på, at beskeden modtages.
Dette afslutter den komplette tutorial om at sende en besked ved hjælp af Raspberry Pi & nRf24l01 og modtage den ved hjælp af Arduino UNO & nRF24l01. Meddelelsen udskrives på 16x2 LCD. Røradresserne er meget vigtige i både Arduino UNO og Raspberry Pi. Hvis du har problemer under udførelsen af dette projekt, bedes du kommentere nedenfor eller kontakte forummet for mere detaljeret diskussion.
Se også demonstrationsvideoen nedenfor.