Cześć dziś zajmiemy się obsługą modułu nRF24L01.
Możemy go zakupić w sklepie XBOT
nRF24L01 jest modułem radiowym działającym na częstotliwości 2,4 GHz. Posiada on zewnętrzną antenę dzięki czemu zasięg teoretycznie wynosi 1,1 km. Moduł działa na napięciu 3,3V. A jego pobór prądu to 45mA podczas odbioru oraz 115mA przy nadawaniu.
Pasmo pracy modułu podzielone jest na 125 kanałów (osobnych częstotliwości) Dzięki czemu możemy stworzyć aż 125 niezależnych sieci tych urządzeń w jednym miejscu. W tym urządzeniu mamy także mozliwość wyboru prędkości przesyłu danych (250kbps, 1Mbps i 2Mbps).
Moduł nRF24L01 wyposażono w pin IRQ (Interrupt Request), dzięki któremu możemy wybudzać Arduino w momencie odbierania danych. Co daje nam możliwość zmniejszenia zużycia energii. Jest on przydatny na przykład podczas tworzenia stacji pogodowej. Zasilanej baterią.
Jak podłączyć?
Podłączenie tego modułu nie jest zbyt wygodne ponieważ nie mamy możliwości podłączenia go do płytki stykowej ze względu na umieszczenie 2 rzędów pinów
Moduł podłączamy do Magistrali SPI
PIN ARDUINO | PIN NRF24 | PIN NRF24 | PIN ARDUINO |
---|---|---|---|
GND | 1:GND | 2: VCC | 3,3V |
Dowolny (u mnie 9) | 3:CE | 4:CSN | Dowolny (u mnie 10) |
13 | 5: SCK | 6:MOSI | 11 |
12 | 7:MISO | 8: IRQ | Usypianie modułu (nie korzystamy obecnie) |
Drugi moduł podłączamy tak samo.
!Napięcie tego modułu to 3,3 V!
- Pin 7 zwarty do masy: nadawanie (tryb ping-out)
- Pin 7 „wolny”: odbieranie (tryb pong-back)
Programowanie
Biblioteka do tego modułu dostępna jest TUTAJ. Dokumentację do tej biblioteki znajdziemy TUTAJ
Gdy pobierzemy oraz przekopiujemy bibliotekę, przejdźmy do analizu przykładu „pingpair”, który znajdziesz w zakładce examples–>RF24-master–>pingpair. Podstawowa klasa tej biblioteki to RF24(24 linijka przykładu) u nas wygląda ona tak
1 |
RF24 radio(9,10);//Te dwa parametry to pin CE i CSN |
Instrukcja uruchomienia przykładu:
-Podłącz pierwsze Arduino Nadajnik
-Zewrzyj pin 7 do masy
-Wgraj przykład pingpair
-Podłącz drugie Arduino Odbiornik
-wgraj przykład pingpair
W monitorze portu szeregowego nadajnika powinno pojawić się mniej więcej coś takiego:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
ROLE: Ping out STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 RX_ADDR_P0-1 = 0xf0f0f0f0e1 0xf0f0f0f0d2 RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 TX_ADDR = 0xf0f0f0f0e1 RX_PW_P0-6 = 0x08 0x08 0x00 0x00 0x00 0x00 EN_AA = 0x3f EN_RXADDR = 0x03 RF_CH = 0x4c RF_SETUP = 0x07 CONFIG = 0x0f DYNPD/FEATURE = 0x00 0x00 Data Rate = 1MBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_HIGH Now sending 23...ok...Got response 23 round-trip delay: 7 Now sending 1094...ok...Got response 1094, round-trip delay: 4 Now sending 2102...ok...Got response 2102, round-trip delay: 4 Now sending 3103...ok...Got response 3104, round-trip delay: 3 |
Jeżeli pojawiło się coś takiego oznacza to, że wszystko się udało 😀
Uruchomienie tych modułów wcale nie jest aż tak bardzo skomplikowane jak mogło się wydawać 😀 Są one bardzo przydatne w wielu projektach, ponieważ są bardzo tanie. A ich obsługa nie jest jakoś specjalnie skomplikowana.
Teraz przejdźmy do napisania pierwszego programu, który będzie zapalał naszą diodę (podłączoną do układu odbiornika) gdy wciśniemy przycisk.
Podłączenie jest bardzo proste
Nadajnik
Kod do Odbiornika
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" int msg[1]; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int LED1 = 3; void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(1,pipe); radio.startListening(); pinMode(LED1, OUTPUT); } void loop() { if (radio.available()) { bool done = false; while (!done){ done = radio.read(msg, 1); Serial.println(msg[0]); if (msg[0] == 111) { delay(10); digitalWrite(LED1, HIGH); } else {digitalWrite(LED1, LOW); } delay(10);}} else { Serial.println("Radio nie dostępne"); } } |
Kod do Nadajnika
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include <SPI.h> #include "nRF24L01.h" #include "RF24.h" int msg[1]; RF24 radio(9,10); const uint64_t pipe = 0xE8E8F0F0E1LL; int SW1 = 7; void setup() { Serial.begin(9600); radio.begin(); radio.openWritingPipe(pipe); } void loop() { if (digitalRead(SW1) == HIGH) { msg[0] = 111; radio.write(msg, 1); } } |
Teraz już rozumiesz zasadę działania modułu nRF24L01. Mam nadzieję, że dzięki temu wiesz jak stworzyć swoje sterowanie radiowe lub jak bezprzewodowo przesyłać temperaturę.
Problemy z zasilaniem
Wiele użytkowników ma problem z poprawną pracą modułu nRF24L01. Bardzo często problem ten dotyczy zasilania. Zasilanie modułu z Arduino nie ma odpowiedniej wydajności prądowej. Ten problem można rozwiązać na kilka sposobów:
- Podłączenie kondensatora 3.3 uF lub 10 uF do gnd, +3,3V.
- Użycie innej wersji Arduino z wlutowanym kondensatorem na wyjściu. Na przykład Arduino RED.
- Odseparowanie zasilania. Wykorzystanie zewnętrznego zasilacza.
Jest to moim zdaniem najprostsze rozwiązanie tego problemu
Wystarczy zakupić moduł zasilania do płytek stykowych dostępny TUTAJ
I podłączyć moduł nRF24L01 tak samo jak na poprzednim schemacie wyżej jedynie zasilanie podłączyć „z tego modułu”
Wtedy wszystko będzie prawidłowo działać.
Problemy z zasilaniem mogą w występować w Arduino UNO, MEGA, Nano itd. Jest to spowodowane niską wydajnością prądową tych kontrolerów na poziomie 50mA przy 3,3V.
Jeżeli masz jakieś pytania zadaj je w komentarzach 😀
Za jakiś czas postaram dodać się artykuł, w którym sprawdzę „realny” zasięg tego modułu.
Poradnik powstaje dzięki współpracy ze sklepem internetowym XBot.pl – roboty to lubią
[su_button url=”https://roboblog.eu/2016/02/26/arduino-poradnik/” size=”7″]Poprzednia część kursu[/su_button]