- RF-modulen nRF24L01
- Kretsschema
- Programmering av Raspberry Pi för att skicka meddelande med nRF24l01
- Programmering av Arduino UNO för att ta emot meddelande med nRF24l01
Designers använder många trådlösa kommunikationssystem som Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi-moduler, 433MHz RF-moduler, Lora, nRF etc. Och valet av medium beror på vilken typ av applikation det används i. Bland allt, ett populärt trådlöst medium för lokal nätverkskommunikation är nRF24L01. Dessa moduler fungerar på 2,4 GHz (ISM-band) med överföringshastighet från 250 Kbps till 2 Mbps vilket är lagligt i många länder och kan användas i industriella och medicinska applikationer. Det hävdas också att med rätt antenner kan dessa moduler sända och ta emot signaler upp till ett avstånd på 100 meter mellan dem. Vi använde tidigare nRF24L01 med Arduino för att styra servomotorn och skapa ett chattrum.
Här kommer vi att använda nRF24L01 - 2,4 GHz RF-sändtagarmodul med Arduino UNO och Raspberry Pi för att skapa en trådlös kommunikation mellan dem. Raspberry pi fungerar som en sändare och Arduino Uno kommer att lyssna på Raspberry Pi och skriva ut meddelandet som skickats av Raspberry Pi med nRF24L01 på en 16x2 LCD. nRF24L01 har också inbyggd BLE-funktion och den kan också kommunicera trådlöst med BLE.
Självstudien är uppdelad i två avsnitt. Det första avsnittet inkluderar gränssnittet mellan nRF24L01 och Arduino för att fungera som mottagare och det andra avsnittet inkluderar gränssnittet mellan nRF24L01 och Raspberry Pi för att fungera som sändare. Den kompletta koden för båda sektionerna med arbetsvideo bifogas i slutet av denna handledning.
RF-modulen nRF24L01
De nRF24L01 modulerna är transceiver moduler, vilket innebär att varje modul kan både skicka och ta emot data, men eftersom de är halv duplex de antingen kan skicka och ta emot data på en gång. Modulen har den generiska nRF24L01 IC från nordiska halvledare som ansvarar för överföring och mottagning av data. IC kommunicerar med hjälp av SPI-protokollet och kan därför enkelt gränssnitt med alla mikrokontroller. Det blir mycket lättare med Arduino eftersom biblioteken är tillgängliga. De stifttilldelningar för en standard nRF24L01 modulen visas nedan
Modulen har en driftspänning från 1,9V till 3,6V (vanligtvis 3,3V) och förbrukar mycket mindre ström på endast 12mA under normal drift vilket gör det batterieffektivt och kan till och med köras på myntceller. Även om driftspänningen är 3,3 V är de flesta stiften 5 V-toleranta och kan därmed direkt anslutas till 5 V-mikrokontroller som Arduino. En annan fördel med att använda dessa moduler är att varje modul har 6 rörledningar. Det betyder att varje modul kan kommunicera med 6 andra moduler för att sända eller ta emot data. Detta gör modulen lämplig för att skapa stjärn- eller nätverksnätverk i IoT-applikationer. De har också ett brett adressområde på 125 unika ID: er, och därför kan vi i ett stängt område använda 125 av dessa moduler utan att störa varandra.
Kretsschema
nRF24L01 med Arduino:
Kretsschemat för att ansluta nRF24L01 med Arduino är enkelt och har inte mycket komponenter. Den nRF24L01 kommer att anslutas genom SPI-gränssnitt och 16x2 LCD är gränssnitts med I2C-protokollet som använder endast två trådar.
nRF24L01 med Raspberry Pi:
Kretsschemat för anslutning av nRF24L01 med Raspberry Pi är också väldigt enkelt och endast SPI-gränssnittet används för att ansluta Raspberry Pi och nRF24l01.
Programmering av Raspberry Pi för att skicka meddelande med nRF24l01
Programmering av Raspberry Pi kommer att göras med Python3. Du kan också använda C / C ++ som Arduino. Men det finns redan ett bibliotek tillgängligt för nRF24l01 i python som kan laddas ner från github-sidan. Observera att pythonprogrammet och biblioteket ska vara i samma mapp, annars kan pythonprogrammet inte hitta biblioteket. Efter att ha laddat ner biblioteket extraherar du bara och skapar en mapp där alla program och biblioteksfiler kommer att lagras. När biblioteksinstallationen är klar, börja bara skriva programmet. Startprogrammet med införandet av bibliotek som kommer att användas i kod som import GPIO bibliotek för åtkomst till Raspberry Pi GPIO och import tid för åtkomst till tidsrelaterade funktioner. Om du är ny på Raspberry Pi kan du börja med Raspberry pi.
import RPi.GPIO som GPIO import tiden import spidev från lib_nrf24 import NRF24
Ställ in GPIO-läget i " Broadcom SOC-kanal". Detta betyder att du hänvisar till stiften med "Broadcom SOC-kanal" -numret, dessa är siffrorna efter "GPIO" (för t.ex. GPIO01, GPIO02…). Dessa är inte styrelsenummer.
GPIO.setmode (GPIO.BCM)
Därefter kommer vi att ställa in röradressen. Denna adress är viktig för att kommunicera med Arduino-mottagaren. Adressen kommer att finnas i hexkoden.
rör =,]
Börja radion med GPIO08 som CE och GPIO25 som CSN-stift.
radio.begin (0, 25)
Ställ in nyttolaststorlek som 32 bitar, kanaladress som 76, datahastighet på 1 Mbps och effektnivåer som minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Öppna rören för att börja skriva data och skriva ut grundinformation om nRF24l01.
radio.openWritingPipe (rör) radio.printDetails ()
Förbered ett meddelande i strängformuläret. Detta meddelande kommer att skickas till Arduino UNO.
sendMessage = lista ("Hej..Arduino UNO") medan len (sendMessage) <32: sendMessage.append (0)
Börja skriva till radion och fortsätt skriva hela strängen tills radion är tillgänglig. Tillsammans med den, anteckna tiden och skriv ut ett felsökningsmeddelande om meddelandeleverans.
medan True: start = time.time () radio.write (sendMessage) print ("Skickat meddelandet: {}". format (sendMessage)) skicka radio.startListening ()
Om strängen är klar och röret är stängt, skriv ut ett felsökningsmeddelande om timeout.
samtidigt inte radio.available (0): time.sleep (1/100) om time.time () - start> 2: print ("gått ut.") # print felmeddelande om radio frånkopplad eller inte fungerar längre bryta
Sluta lyssna på radio och stäng kommunikationen och starta om kommunikationen efter 3 sekunder för att skicka ett nytt meddelande.
radio.stopListening () # nära radiotid. sömn (3) # ger fördröjning på 3 sekunder
Raspberry-programmet är enkelt att förstå om du känner till grunderna för python. Komplett Python-program ges i slutet av handledningen.
Utför Python-programmet i Raspberry Pi:
Att köra programmet är mycket enkelt efter att ha följt stegen nedan:
- Spara Python-program- och biblioteksfilerna i samma mapp.
- Mitt programfilnamn för avsändare är nrfsend.py och alla filer finns i samma mapp
- Gå till Command Terminal of Raspberry Pi. Och leta upp python-programfilen med kommandot “cd”.
- Öppna sedan mappen och skriv kommandot “ sudo python3 your_program.py ” och tryck enter. Du kommer att kunna se de grundläggande detaljerna för nRf24 och radion börjar skicka meddelandena var tredje sekund. Meddelandefelsökningen visas efter att sändningen är klar med alla skickade tecken.
Nu kommer vi att se samma program som mottagare i Arduino UNO.
Programmering av Arduino UNO för att ta emot meddelande med nRF24l01
Programmering av Arduino UNO liknar programmering av Raspberry Pi. Vi kommer att följa liknande metoder men med olika programmeringsspråk och steg. Stegen inkluderar läsdelen av nRF24l01. Biblioteket för nRF24l01 för Arduino kan laddas ner från github-sidan. Börja med att inkludera nödvändiga bibliotek. Vi använder 16x2 LCD med I2C Shield så inkludera Wire.h- biblioteket och nRF24l01 är gränssnitt med SPI så inkludera SPI-bibliotek.
#omfatta
Inkludera RF24- och LCD-bibliotek för åtkomst till RF24- och LCD-funktionerna.
#omfatta
LCD-adressen för I2C är 27 och det är en 16x2 LCD så skriv detta in i funktionen.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 är ansluten med standard SPI-stift tillsammans med CE i stift 9 och CSN i stift 10.
RF24-radio (9, 10);
Starta radion, ställ in effektnivå och ställ in kanal till 76. Ställ också in röradressen samma som Raspberry Pi och öppna röret för att läsa.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Börja I2C-kommunikationen och initialisera LCD-skärmen.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Ready to Receive");
Börja lyssna på radion för inkommande meddelanden och ställ in meddelandelängden till 32 byte.
radio.startListening (); char mottagna meddelande = {0}
Om radio är ansluten börja läsa meddelandet och spara det. Skriv ut meddelandet till seriell bildskärm och skriv ut till displayen tills nästa meddelande kommer. Stoppa radion för att lyssna och försök igen efter ett tag. Här är det 10 mikrosekunder.
if (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("Stänga av radion."); radio.stopListening (); SträngsträngMeddelande (mottagenMeddelande); lcd.clear (); fördröjning (1000); lcd.print (stringMessage); }
Ladda upp den fullständiga koden som ges i slutet till Arduino UNO och vänta på att meddelandet ska tas emot.
Detta avslutar den fullständiga guiden för att skicka ett meddelande med Raspberry Pi & nRf24l01 och ta emot det med Arduino UNO & nRF24l01. Meddelandet kommer att skrivas ut på 16x2 LCD-skärmen. Röradresserna är mycket viktiga i både Arduino UNO och Raspberry Pi. Om du stöter på några problem när du gör detta projekt kan du kommentera nedan eller kontakta forumet för mer detaljerad diskussion.
Kolla även demonstrationsvideon nedan.