- RF-modulen nRF24L01
- Kretsdiagram
- Programmering av Raspberry Pi for å sende melding ved hjelp av nRF24l01
- Programmering av Arduino UNO for å motta melding ved hjelp av nRF24l01
Designere bruker mange trådløse kommunikasjonssystemer som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF osv. Og valg av medium avhenger av typen applikasjon det brukes i. Blant dem. alt, et populært trådløst medium for lokal nettverkskommunikasjon er nRF24L01. Disse modulene opererer på 2,4 GHz (ISM-bånd) med overføringshastighet fra 250 Kbps til 2 Mbps, noe som er lovlig i mange land og kan brukes i industrielle og medisinske applikasjoner. Det hevdes også at med riktige antenner kan disse modulene overføre og motta signaler opp til en avstand på 100 meter mellom dem. Vi brukte tidligere nRF24L01 med Arduino for å kontrollere servomotoren og lage et chatterom.
Her vil vi bruke nRF24L01 - 2,4 GHz RF Transceiver-modul med Arduino UNO og Raspberry Pi for å etablere en trådløs kommunikasjon mellom dem. Raspberry pi vil fungere som en sender, og Arduino Uno vil lytte til Raspberry Pi og skrive ut meldingen sendt av Raspberry Pi ved hjelp av nRF24L01 på en 16x2 LCD. nRF24L01 har også innebygd BLE-funksjoner, og den kan også kommunisere trådløst ved hjelp av BLE.
Opplæringen er delt inn i to seksjoner. Den første delen vil inkludere grensesnittet mellom nRF24L01 og Arduino for å fungere som mottaker, og den andre delen vil inkludere grensesnittet mellom nRF24L01 og Raspberry Pi for å fungere som sender. Den komplette koden for begge seksjonene med arbeidsvideo vil være vedlagt på slutten av denne opplæringen.
RF-modulen nRF24L01
De nRF24L01 modulene er transceiver moduler, noe som betyr at hver modul kan både sende og motta data, men siden de er halv-dupleks på de kan enten sende eller motta data om gangen. Modulen har den generiske nRF24L01 IC fra nordiske halvledere som er ansvarlig for overføring og mottak av data. IC-en kommuniserer ved hjelp av SPI-protokollen og kan dermed enkelt grensesnittes med alle mikrokontrollere. Det blir mye lettere med Arduino siden bibliotekene er lett tilgjengelige. De pinouts av en standard nRF24L01 modul er vist nedenfor
Modulen har driftsspenning fra 1,9V til 3,6V (vanligvis 3,3V) og bruker veldig mindre strøm på bare 12mA under normal drift, noe som gjør det batterieffektivt og dermed til og med kan kjøre på myntceller. Selv om driftsspenningen er 3,3V, er de fleste pinnene 5V tolerante og kan derfor grensesnittes direkte med 5V mikrokontrollere som Arduino. En annen fordel med å bruke disse modulene er at hver modul har 6 rørledninger. Betydning, hver modul kan kommunisere med 6 andre moduler for å overføre eller motta data. Dette gjør modulen egnet for å lage stjerne- eller mesh-nettverk i IoT-applikasjoner. De har også et bredt adresseområde på 125 unike ID-er, og i et lukket område kan vi bruke 125 av disse modulene uten å forstyrre hverandre.
Kretsdiagram
nRF24L01 med Arduino:
Kretsskjemaet for å koble nRF24L01 til Arduino er enkelt og har ikke mye komponenter. Den nRF24L01 vil bli koblet ved SPI-grensesnittet og den 16x2 LCD er integrert med I2C protokoll som bruker bare to ledninger.
nRF24L01 med Raspberry Pi:
Kretsskjemaet for å koble nRF24L01 til Raspberry Pi er også veldig enkelt, og bare SPI-grensesnittet brukes til å koble til Raspberry Pi og nRF24l01.
Programmering av Raspberry Pi for å sende melding ved hjelp av nRF24l01
Programmering av Raspberry Pi vil bli gjort ved hjelp av Python3. Du kan også bruke C / C ++ som Arduino. Men det er allerede et bibliotek tilgjengelig for nRF24l01 i python som kan lastes ned fra github-siden. Merk at pythonprogrammet og biblioteket skal være i samme mappe, ellers vil ikke pythonprogrammet finne biblioteket. Etter at du har lastet ned biblioteket, er det bare å pakke ut og lage en mappe der alle programmer og bibliotekfiler skal lagres. Når biblioteket er installert, er det bare å begynne å skrive programmet. Programmet starter med inkludering av biblioteker som vil bli brukt i kode som import av GPIO-bibliotek for tilgang til Raspberry Pi GPIO og importtid for å få tilgang til tidsrelaterte funksjoner. Hvis du er ny på Raspberry Pi, kan du gå tilbake til å komme i gang med Raspberry pi.
importer RPi.GPIO som GPIO importtid import spidev fra lib_nrf24 importer NRF24
Sett GPIO-modus i " Broadcom SOC-kanal". Dette betyr at du refererer til pinnene med "Broadcom SOC-kanal" -nummeret, dette er tallene etter "GPIO" (for f.eks. GPIO01, GPIO02…). Dette er ikke styretallene.
GPIO.setmode (GPIO.BCM)
Neste vil vi sette det opp røradressen. Denne adressen er viktig for å kommunisere med Arduino-mottakeren. Adressen vil være i heksekoden.
rør =,]
Begynn radioen ved å bruke GPIO08 som CE og GPIO25 som CSN-pinner.
radio.begin (0, 25)
Sett nyttelaststørrelse som 32 bit, kanaladresse som 76, datahastighet på 1 Mbps og effektnivåer som minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Åpne rørene for å begynne å skrive dataene og skriv ut de grunnleggende detaljene til nRF24l01.
radio.openWritingPipe (rør) radio.printDetails ()
Forbered en melding i strengskjemaet. Denne meldingen vil bli sendt til Arduino UNO.
sendMessage = liste ("Hei..Arduino UNO") mens len (sendMessage) <32: sendMessage.append (0)
Begynn å skrive til radioen og fortsett å skrive hele strengen til radioen er tilgjengelig. Sammen med det noterer du tiden og skriver ut en feilsøkingserklæring om levering av meldinger.
mens True: start = time.time () radio.write (sendMessage) print ("Sent the message: {}". format (sendMessage)) send radio.startListening ()
Hvis strengen er fullført og røret er lukket, kan du skrive ut en feilsøkingsmelding om tidsavbrudd.
mens ikke radio.available (0): time.sleep (1/100) hvis time.time () - start> 2: print ("Tidsavbrudd".) # print feilmelding hvis radio frakoblet eller ikke fungerer lenger bryte
Slutt å lytte til radio og lukk kommunikasjonen og start kommunikasjonen på nytt etter 3 sekunder for å sende en ny melding.
radio.stopListening () # lukk radiotid. sov (3) # gi forsinkelse på 3 sekunder
Raspberry-programmet er enkelt å forstå hvis du kjenner det grunnleggende om python. Komplett Python-program er gitt på slutten av opplæringen.
Gjennomføring av Python-programmet i Raspberry Pi:
Å gjennomføre programmet er veldig enkelt etter å ha fulgt trinnene nedenfor:
- Lagre Python-program- og biblioteksfilene i samme mappe.
- Mitt programfilnavn for avsender er nrfsend.py, og også alle filene er i samme mappe
- Gå til Command Terminal of Raspberry Pi. Og finn python-programfilen ved å bruke kommandoen “cd”.
- Åpne deretter mappen og skriv kommandoen “ sudo python3 your_program.py ” og trykk enter. Du vil kunne se de grunnleggende detaljene til nRf24, og radioen begynner å sende meldingene hvert 3. sekund. Feilsøkingen av meldingen vises etter at sending er utført med alle tegnene som er sendt.
Nå vil vi se det samme programmet som mottaker i Arduino UNO.
Programmering av Arduino UNO for å motta melding ved hjelp av nRF24l01
Programmering av Arduino UNO ligner på programmering av Raspberry Pi. Vi vil følge lignende metoder, men med forskjellige programmeringsspråk og trinn. Trinnene inkluderer lesedelen av nRF24l01. Biblioteket for nRF24l01 for Arduino kan lastes ned fra github-siden. Begynn med å inkludere nødvendige biblioteker. Vi bruker 16x2 LCD med I2C Shield, så inkluder Wire.h- biblioteket, og nRF24l01 er grensesnittet med SPI, så inkluder SPI-biblioteket.
#inkludere
Inkluder RF24- og LCD-biblioteket for tilgang til RF24- og LCD-funksjonene.
#inkludere
LCD-adressen til I2C er 27, og den er en 16x2 LCD, så skriv dette inn i funksjonen.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 er koblet til standard SPI-pinner sammen med CE i pinne 9 og CSN i pinne 10.
RF24 radio (9, 10);
Start radioen, still inn effektnivået og sett kanalen til 76. Sett også røradressen som Raspberry Pi og åpne røret for å lese.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Begynn I2C-kommunikasjonen og initialiser LCD-skjermen.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Klar til å motta");
Begynn å lytte til radioen for innkommende meldinger, og angi lengden på meldingen til 32 byte.
radio.startListening (); char mottattMessage = {0}
Hvis radio er koblet til, kan du begynne å lese meldingen og lagre den. Skriv ut meldingen til seriell skjerm, og skriv også ut til skjermen til neste melding kommer. Stopp radioen for å lytte og prøv på nytt etter noen intervaller. Her er det 10 mikrosekunder.
hvis (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (mottattMessage); Serial.println ("Slå av radioen."); radio.stopListening (); String stringMessage (receivedMessage); lcd.clear (); forsinkelse (1000); lcd.print (stringMessage); }
Last opp den komplette koden som er gitt på slutten, til Arduino UNO og vent på at meldingen skal mottas.
Dette fullfører den komplette opplæringen om å sende en melding ved hjelp av Raspberry Pi & nRf24l01 og motta den ved hjelp av Arduino UNO & nRF24l01. Meldingen blir skrevet ut på 16x2 LCD-skjermen. Røradressene er veldig viktige i både Arduino UNO og Raspberry Pi. Hvis du har problemer når du gjør dette prosjektet, kan du kommentere nedenfor eller kontakte forumet for mer detaljert diskusjon.
Sjekk også demonstrasjonsvideoen nedenfor.