- De nRF24L01 RF-module
- Schakelschema
- Raspberry Pi programmeren om bericht te verzenden met nRF24l01
- Arduino UNO programmeren om berichten te ontvangen met nRF24l01
Ontwerpers gebruiken veel draadloze communicatiesystemen zoals Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi-modules, 433 MHz RF-modules, Lora, nRF enz. En de keuze van het medium hangt af van het type toepassing waarin het wordt gebruikt. Een populair draadloos medium voor lokale netwerkcommunicatie is de nRF24L01. Deze modules werken op 2,4 GHz (ISM-band) met een baudrate van 250 Kbps tot 2 Mbps, wat in veel landen legaal is en kan worden gebruikt in industriële en medische toepassingen. Er wordt ook beweerd dat deze modules met de juiste antennes signalen kunnen verzenden en ontvangen tot een afstand van 100 meter tussen hen in. We gebruikten eerder nRF24L01 met Arduino om de servomotor aan te sturen en een chatroom te creëren.
Hier zullen we de nRF24L01 - 2,4 GHz RF Transceiver-module gebruiken met Arduino UNO en Raspberry Pi om een draadloze communicatie tussen hen tot stand te brengen. De Raspberry Pi zal fungeren als een zender en Arduino Uno zal naar Raspberry Pi luisteren en het bericht dat door Raspberry Pi is verzonden met nRF24L01 op een 16x2 LCD-scherm afdrukken. nRF24L01 heeft ook ingebouwde BLE-mogelijkheden en kan ook draadloos communiceren met behulp van BLE.
De tutorial is verdeeld in twee secties. De eerste sectie bevat de koppeling van nRF24L01 met Arduino om als ontvanger te fungeren en de tweede sectie bevat de koppeling van nRF24L01 met Raspberry Pi om als zender te fungeren. De volledige code voor beide secties met werkvideo wordt aan het einde van deze tutorial bijgevoegd.
De nRF24L01 RF-module
De nRF24L01-modules zijn transceivermodules, wat betekent dat elke module zowel gegevens kan verzenden als ontvangen, maar omdat ze half-duplex zijn, kunnen ze gegevens tegelijk verzenden of ontvangen. De module heeft de generieke nRF24L01 IC van Noordse halfgeleiders die verantwoordelijk is voor de verzending en ontvangst van gegevens. De IC communiceert met behulp van het SPI-protocol en kan daarom gemakkelijk worden gekoppeld aan microcontrollers. Het wordt een stuk eenvoudiger met Arduino, omdat de bibliotheken direct beschikbaar zijn. De pinouts van een standaard nRF24L01-module worden hieronder weergegeven
De module heeft een bedrijfsspanning van 1,9 V tot 3,6 V (typisch 3,3 V) en verbruikt heel weinig stroom van slechts 12 mA tijdens normaal gebruik, waardoor hij batterij-efficiënt is en dus zelfs op knoopcellen kan werken. Hoewel de bedrijfsspanning 3,3V is, zijn de meeste pinnen 5V-tolerant en kunnen ze daarom rechtstreeks worden gekoppeld aan 5V-microcontrollers zoals Arduino. Een ander voordeel van het gebruik van deze modules is dat elke module 6 Pipelines heeft. Dit betekent dat elke module kan communiceren met 6 andere modules om gegevens te verzenden of te ontvangen. Dit maakt de module geschikt voor het creëren van ster- of mesh-netwerken in IoT-toepassingen. Ze hebben ook een breed adresbereik van 125 unieke ID's, dus in een afgesloten gebied kunnen we 125 van deze modules gebruiken zonder elkaar te storen.
Schakelschema
nRF24L01 met Arduino:
Het schakelschema voor het verbinden van nRF24L01 met Arduino is eenvoudig en heeft niet veel componenten. De nRF24l01 wordt verbonden via een SPI-interface en het 16x2 LCD-scherm is gekoppeld aan het I2C-protocol dat slechts twee draden gebruikt.
nRF24L01 met Raspberry Pi:
Het schakelschema voor het verbinden van nRF24L01 met Raspberry Pi is ook heel eenvoudig en alleen de SPI-interface wordt gebruikt om Raspberry Pi en nRF24l01 aan te sluiten.
Raspberry Pi programmeren om bericht te verzenden met nRF24l01
Het programmeren van de Raspberry Pi zal gebeuren met Python3. Je kunt ook C / C ++ als Arduino gebruiken. Maar er is al een bibliotheek beschikbaar voor nRF24l01 in python die kan worden gedownload vanaf de github-pagina. Merk op dat het python-programma en de bibliotheek zich in dezelfde map moeten bevinden, anders kan het python-programma de bibliotheek niet vinden. Na het downloaden van de bibliotheek, hoeft u alleen maar een map uit te pakken en een map te maken waarin alle programma's en bibliotheekbestanden worden opgeslagen. Wanneer de bibliotheekinstallatie is voltooid, begint u gewoon met het schrijven van het programma. Het programma start met het opnemen van bibliotheken die zullen worden gebruikt in code, zoals het importeren van GPIO-bibliotheek voor toegang tot de Raspberry Pi GPIO's en het importeren van tijd voor toegang tot de tijdgerelateerde functies. Als Raspberry Pi nieuw voor je is, ga dan terug naar Raspberry Pi.
importeer RPi.GPIO als GPIO importeer tijd importeer spidev uit lib_nrf24 importeer NRF24
Stel de GPIO-modus in " Broadcom SOC-kanaal" in. Dit betekent dat u naar de pinnen verwijst met het "Broadcom SOC-kanaal" -nummer, dit zijn de nummers achter "GPIO" (voor bijvoorbeeld GPIO01, GPIO02…). Dit zijn niet de bordnummers.
GPIO.setmodus (GPIO.BCM)
Vervolgens zullen we het pijpadres instellen. Dit adres is belangrijk om te communiceren met de Arduino-ontvanger. Het adres staat in de hex-code.
pijpen =,]
Start de radio met GPIO08 als CE en GPIO25 als CSN-pinnen.
radio.begin (0, 25)
Stel de payload-grootte in op 32 bit, kanaaladres op 76, datasnelheid van 1 Mbps en vermogensniveaus als minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Open de leidingen om de gegevens te schrijven en de basisgegevens van nRF24l01 af te drukken.
radio.openWritingPipe (pijpen) radio.printDetails ()
Bereid een bericht voor in de tekenreeksvorm. Dit bericht wordt naar Arduino UNO gestuurd.
sendMessage = list ("Hi..Arduino UNO") while len (sendMessage) <32: sendMessage.append (0)
Begin met schrijven naar de radio en blijf de hele reeks schrijven tot de radio beschikbaar is. Noteer daarnaast de tijd en druk een foutopsporingsverklaring af voor de bezorging van berichten.
while True: start = time.time () radio.write (sendMessage) print ("Verstuur het bericht: {}". format (sendMessage)) send radio.startListening ()
Als de string is voltooid en de pipe is gesloten, drukt u een foutopsporingsbericht met time-out af.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timeed out.") # print foutmelding als de radio is losgekoppeld of niet meer werkt break
Stop met luisteren naar de radio en sluit de communicatie en herstart de communicatie na 3 seconden om nog een bericht te verzenden.
radio.stopListening () # close radio time.sleep (3) # geef een vertraging van 3 seconden
Het Raspberry-programma is eenvoudig te begrijpen als je de basis van python kent. Het volledige Python-programma wordt aan het einde van de tutorial gegeven.
Het Python-programma uitvoeren in Raspberry Pi:
Het uitvoeren van het programma is heel eenvoudig na het volgen van de onderstaande stappen:
- Sla het Python-programma en de bibliotheekbestanden op in dezelfde map.
- Mijn programmabestandsnaam voor Sender is nrfsend.py en ook staan alle bestanden in dezelfde map
- Ga naar Command Terminal van Raspberry Pi. En zoek het python-programmabestand met de opdracht "cd".
- Open vervolgens de map en schrijf het commando " sudo python3 your_program.py " en druk op enter. U kunt de basisgegevens van nRf24 zien en de radio begint de berichten na elke 3 seconden te verzenden. Het foutopsporingsbericht wordt weergegeven nadat het verzenden is voltooid met alle verzonden tekens.
Nu zien we hetzelfde programma als de ontvanger in de Arduino UNO.
Arduino UNO programmeren om berichten te ontvangen met nRF24l01
Het programmeren van de Arduino UNO is vergelijkbaar met het programmeren van de Raspberry Pi. We zullen vergelijkbare methoden volgen, maar met verschillende programmeertalen en stappen. De stappen omvatten het leesgedeelte van nRF24l01. De bibliotheek voor nRF24l01 voor Arduino kan worden gedownload vanaf de github-pagina. Begin met het opnemen van de nodige bibliotheken. We gebruiken 16x2 LCD met I2C Shield, dus neem de Wire.h- bibliotheek op en ook de nRF24l01 is gekoppeld aan SPI, dus neem de SPI-bibliotheek op.
# omvatten
Inclusief RF24- en LCD-bibliotheek voor toegang tot de RF24- en LCD-functies.
# omvatten
Het LCD-adres voor I2C is 27 en het is een 16x2 LCD, dus schrijf dit in de functie.
LiquidCrystal_I2C lcd (0x27, 16, 2);
De RF24 is verbonden met standaard SPI-pinnen, samen met CE op pin 9 en CSN op pin 10.
RF24-radio (9, 10);
Start de radio, stel het vermogensniveau in en stel kanaal in op 76. Stel ook het buisadres in als Raspberry Pi en open de buis om te lezen.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pijp);
Start de I2C-communicatie en initialiseer het LCD-scherm.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Klaar om te ontvangen");
Begin met luisteren naar de radio voor inkomende berichten en stel de berichtlengte in op 32 bytes.
radio.startListening (); char ontvangenMessage = {0}
Als de radio is aangesloten, lees dan het bericht en sla het op. Druk het bericht af op de seriële monitor en druk het ook af op het display totdat het volgende bericht arriveert. Stop de radio om te luisteren en probeer het na een tijdje opnieuw. Hier is het 10 microseconden.
if (radio.available ()) { radio.read (ontvangen bericht, grootte van (ontvangen bericht)); Serial.println (ontvangen bericht); Serial.println ("De radio uitschakelen."); radio.stopListening (); String stringMessage (ontvangenMessage); lcd.clear (); vertraging (1000); lcd.print (stringMessage); }
Upload de volledige code die aan het einde wordt gegeven naar de Arduino UNO en wacht tot het bericht is ontvangen.
Hiermee is de volledige tutorial voltooid over het verzenden van een bericht met Raspberry Pi & nRf24l01 en ontvangen met Arduino UNO & nRF24l01. Het bericht wordt afgedrukt op het 16x2 LCD-scherm. De pipe-adressen zijn erg belangrijk in zowel Arduino UNO als Raspberry Pi. Als je problemen ondervindt bij het uitvoeren van dit project, geef dan hieronder een reactie of neem contact op met ons forum voor een meer gedetailleerde discussie.
Bekijk ook onderstaande demonstratievideo.