INHALT
Der Anschluss des Funkmoduls nRF24L01+ 2.4 GHz an den Arduino ermöglicht eine drahtlose Kommunikation zwischen den Mikrocontrollern über eine Entfernung von bis zu 30 Metern. Das Wireless Funk Modul nRF24L01+ ist eines der beliebtesten Funkmodule für das Internet der Dinge. Schauen wir uns an, wie man zwei Arduino-Boards über Funk verbindet, um Daten von einem analogen Bodenfeuchtesensor zu übertragen.
Bestandteile:
- Arduino Uno / Arduino Nano / Arduino Mega
- Funkmoduls nRF24L01+ 2.4 GHz
- 1602 LCD-Display mit I2C
- Feuchtigkeitssensor FC-28 (YL-69)
- Dupont-Kabel
- Bibliothek LiquidCrystal_I2C.h
Die Module sind preiswert, aber sie können verwendet werden, um eine sichere Mehrkanal-Kommunikation zwischen Arduino-Controllern und Geräten zu organisieren. Ein einzelnes nRF24L01+ Modul kann mit bis zu sechs Empfängern oder Sendern kommunizieren, d.h. sieben Geräte können an ein gemeinsames 2,4 GHz Funknetz angeschlossen werden. Die Reichweite des Moduls ist vergleichbar mit dem Bluetooth-Modul HC-05 / HC-06.
Arduino nRF24L01+PA+LNA / nRF24L01+ pinout, datasheet
Merkmale des Funkmodul nRF24L01+ (pinbelegung, datasheet)
- Versorgungsspannung: 3,3 V
- Stromverbrauch: Senden – 11,3 mA, Empfangen – 13,5 mA
- Frequenz: 2,4 GHz
- Geschwindigkeit: 250 kbps, 1 Mbps oder 2 Mbps
- Sender: +7 dB
- Empfänger: -90 dB
- Reichweite: bis zu 100 Meter auf freiem Feld
Das nRF24L01 Board hat einen eingebauten Demodulator, Frequenzsynthesizer und Signalverstärker. Die Reichweite des nRF24L01+ Arduino-Moduls beträgt bis zu 30 Meter, in der verstärkten Version bis zu 1000 Meter bei Sichtverbindung. Das Modul kann 127 Kommunikationskanäle mit Signalfrequenzen von 2,4 GHz bis 2,483 GHz nutzen. Die Verbindungsgeschwindigkeit kann auf 250kbps, 1Mbps oder 2Mbps eingestellt werden.
Wie man einen Funkmodul nRF24L01+ Arduino anschließt
Abgesehen von der Schwierigkeit, das nrf24l01 an den Arduino anzuschließen, ist die Platine sehr stromhungrig. Daher ist es notwendig, einen Kondensator bis zu 10μF an die Stromanschlüsse (GND und VCC) zu löten – dies wird die Störungen reduzieren. Vor der Datenübertragung per Funk ist es am besten, jedes Modul mit einem Scan-Sketch zu testen, um sicherzustellen, dass die nrf24l01-Module ordnungsgemäß funktionieren.
Programm für scannen von Funkfrequenzen mit nRF24L01+
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" RF24 radio(9,10); // für MEGA2560 radio(9,53); const uint8_t num_channels = 128; uint8_t values[num_channels]; int serial_putc( char c, FILE * ) { Serial.write( c ); return c; } void printf_begin(void) { fdevopen( &serial_putc, 0 ); } void setup(void) { Serial.begin(9600); printf_begin(); radio.begin(); radio.setAutoAck(false); radio.startListening(); radio.printDetails(); delay(10000); radio.stopListening(); int i = 0; while ( i < num_channels ) { printf("%x",i>>4); ++i; } printf("\n\r"); i = 0; while ( i < num_channels ) { printf("%x",i&0xf); ++i; } printf("\n\r"); } const int num_reps = 100; void loop(void) { memset(values, 0, sizeof(values)); int rep_counter = num_reps; while (rep_counter--) { int i = num_channels; while (i--) { radio.setChannel(i); radio.startListening(); delayMicroseconds(128); radio.stopListening(); if ( radio.testCarrier() ) ++values[i]; } } int i = 0; while ( i < num_channels ) { printf("%x", min(0xf, values[i] & 0xf)); ++i; } printf("\n\r"); }
- Das Programm sendet Informationen über das Modul nRF24L01+pa+lna / Modul nRF24L01+ über die serielle Schnittstelle;
- Wenn Sie den Anschluss des Moduls überprüft und den Sketch geladen haben, das Modul aber nicht funktioniert, liegt es an der Stromversorgung.
Datenübertragung per Funksignal zwischen Arduino
Wenn der Sketch erfolgreich geladen wurde, Sie aber keine Informationen auf dem Portmonitor sehen, überprüfen Sie erneut die Verbindung des Moduls mit dem Arduino. Nach 10 Sekunden des Empfangs der nRF24L01+-Kenndaten erhalten Sie Informationen über die auf allen 127 Kanälen festgestellten Störungen. Die ersten beiden Zeilen sind Kanalnamen, die aus zwei Zeichen bestehen – „00“, „01“, „02“ usw.
Programm für Datenübertragung über das nRF24L01+PA+LNA
#include "SPI.h" #include "nRF24L01.h" #include "RF24.h" const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(9,10); // für MEGA2560 radio(9,53); void setup() { pinMode(A1, INPUT); Serial.begin(9600); radio.begin(); radio.setChannel(0); // den Radiokanal auswählen (0 bis 127) // Geschwindigkeit: RF24_250KBPS, RF24_1MBPS order RF24_2MBPS radio.setDataRate(RF24_1MBPS); // Macht: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); radio.stopListening(); } void loop() { int data = analogRead(A1); radio.write(&data, sizeof(data)); Serial.print("data: "); Serial.println(data); delay(1000); }
- Die Ports 9 und 10 für den Anschluss des nRF24L01 können ebenso wie der Kommunikationskanal geändert werden;
- Daten vom analogen Port A1 werden einmal pro Sekunde an den seriellen Hardware-Port und vom Sender über den Funkkanal gesendet.
Programm für Datenempfang über das Modul nRF24L01+PA+LNA
LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
SDA | A4 | A4 | 20 |
SCL | A5 | A5 | 21 |
#include "Wire.h" #include "LiquidCrystal_I2C.h" LiquidCrystal_I2C LCD(0x27, 16, 2); #include "SPI.h" #include "nRF24L01.h" #include "RF24.h" const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(9,10); // für MEGA2560 radio(9,53); void setup() { LCD.init(); LCD.backlight(); Serial.begin(9600); radio.begin(); radio.setChannel(0); // den Radiokanal auswählen (0 bis 127) // Geschwindigkeit: RF24_250KBPS, RF24_1MBPS order RF24_2MBPS radio.setDataRate(RF24_1MBPS); // Macht: RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1, pipe); radio.startListening(); } void loop() { int data; if (radio.available()) { radio.read(&data, sizeof(data)); Serial.print("data: "); Serial.println(data); LCD.setCursor(0, 0); LCD.print("data: "); LCD.print(data); } }
- Wenn auf dem Portmonitor (auf dem Display) keine Daten des Empfängers angezeigt werden, sollten Sie als Erstes überprüfen, ob der Sender richtig angeschlossen ist.
Schlussfolgerung. Das Funkmodul nRF24L01+PA+LNA und nRF24L01+ arbeitet mit der SPI-Schnittstelle (Serial Peripheral Interface), also schließen Sie das nRF24L01-Modul an bestimmte Ports des Mikrocontrollers an (vergessen Sie nicht, dass der Arduino Mega SPI an anderen Ports hat). Ein Arduino-Board muss als Signalempfänger (receiver) und der andere Arduino-Mikrocontroller als Sender (transmitter) konfiguriert werden.
Schreibe einen Kommentar