Witaj przyjaciele.
Mam nadzieję, że wszystko u was w porządku i macie się z czego cieszyć. Pracuję ostatnio nad projektem i jedna część mojego obecnego projektu zawiera Interfejs NRF24L01 z Arduino. Pomyślałem więc, dlaczego nie podzielić się tą wiedzą z wami. Mam nadzieję, że dowiecie się czegoś nowego i dość interesującego. Jeśli nie wiesz zbyt wiele na ten temat, to powinieneś rzucić okiem na wprowadzenie do NRF24L01.
Kilka dni temu, zamieściłem na stronie również poradnik Interfejs XBee z Arduino, w którym zobaczyliśmy jak stworzyć bezprzewodową komunikację pomiędzy dwoma modułami XBee, które są również modułami RF. Tak więc, teraz przyjrzymy się jak ustawić bezprzewodową komunikację pomiędzy dwoma modułami NRF24L01. Mam nadzieję, że będziesz zadowolony z połączenia NRF24L01 z Arduino.
Podstawy NRF24L01
Zanim zaczniemy się zajmować interfejsem Arduino z 24L01, pozwólmy sobie na krótkie wprowadzenie do modułu NRF24L01. NRF24L01 jest w rzeczywistości modułem radiowym i pracuje na częstotliwości 2,4 GHz. Moduł ten jest domyślnie pół-dupleksowy i ma zdolność do wysyłania i odbierania danych jednocześnie. Jest to bardzo tani i niewielki moduł, ale jego możliwości są zdumiewające. Na przykład, moduł ten jest w stanie wysłać od 1 do 25 bajtów surowych danych jednocześnie i szybkość transmisji danych sięga jednego megabajta na sekundę. Jeśli podsumujemy wszystkie cechy tego małego, ale duże wydajnego modułu, następnie możemy powiedzieć, że:
- Za pomocą tego modułu NRF24L01 możemy wysłać wiadomość do konkretnego odbiorcy.
- Możemy odebrać wiadomość od jakiegoś konkretnego nadawcy (pamiętaj, że jak mówiłem wcześniej, możemy wykonać oba kroki jednocześnie).
- Podczas wysyłania wiadomości za pomocą tego modułu, będziemy musieli podać adres nadawcy i odbiorcy wiadomości.
- Będziemy musieli również określić rozmiar konkretnej wiadomości, którą będziemy przesyłać za pośrednictwem tego modułu.
- W niektórych szczególnych zastosowaniach musimy również wykonywać przełączanie pomiędzy stanem odbioru i nadawania. Na przykład, jeśli otrzymasz konkretną wiadomość, to najpierw zatrzymamy komunikację i przeczytamy ją, a następnie wyślemy. Więc w takich sytuacjach, musimy wykonać przełączanie podczas wysyłania lub odbierania danych przez ten moduł.
Powyżej omówione było krótkie wprowadzenie do modułu NRF24L01. Przejdźmy teraz do głównego tematu naszego projektu, którym jest Interfejs Arduino z modułem NRF24l01.
Interfejs NRF24L01 z Arduino
Arduino jest bardzo potężną i wszechstronną płytką z mikrokontrolerem i daje nam łatwość korzystania z wielozadaniowości. NRF24L01 posiada łącznie osiem pinów. Konfiguracja pinów i funkcja każdego z nich jest opisana poniżej.
Pierwszy pin to GND i poprzez pin 1 tego modułu, jest podłączana do niego masa.
Pin 2 tego modułu ma za zadanie zapewnić zasilanie. Pin ten jest oznaczony jako VCC. Moduł ten do pracy potrzebuje z reguły napięcia od 1,9 do 3,6 V. I w większości przypadków będziemy przykładać do niego 3 V.
Pin 3 oznaczony jest jako CE i służy do wyboru trybu pracy układu. Albo używasz tego modułu do wysyłania danych, albo do ich odbierania.
Pin 4 jest oznaczony jako CSN i służy do włączania układu SPI, wbudowany w moduł.
Pin 5 służy do zapewnienia modułowi zegara SPI. Gdy ten pin jest HIGH, zegar jest włączony, a gdy jest LOW, zegar modułu jest wyłączony.
Pin 6 oznaczony jest jako MOSI i służy do transmisji danych z modułu do układu zewnętrznego.
Pin 7 jest oznaczony jako MISO i jeśli chcemy odbierać dane przez ten moduł z dowolnego zewnętrznego źródła to pin ten jest włączony.
Pin 8 jest ostatnim pinem tego modułu i jest oznaczony jako pin IRQ.
Do wykonania komunikacji Arduino z NRF24L01 potrzebne będą dwie płytki Arduino oraz dwa moduły NRF24L01. Zakładam, że masz te cztery przedmioty w ręce. Tak więc, najpierw zajmijmy się stroną nadawczą interfejsu NRF24L01 Arduino.
NRF24L01 jako nadajnik
Podłącz NRF24L01 do Arduino jak pokazano na poniższej ilustracji:
Łącznie siedem pinów układu NRF24L01 będzie podłączonych, natomiast ósmy pin IRQ podłączony być nie musi.
Następną rzeczą jaką musisz zrobić jest pobranie biblioteki RF24 dla Arduino i umieszczenie jej w folderze libraries twojego oprogramowania Arduino, tak abyśmy mogli skompilować nasz kod dla NRF24L01 Arduino Example.
Nie zaprojektowaliśmy tej biblioteki, udostępniamy ją tylko inżynierom, aby mogli ją wykorzystać w swoich projektach.
Teraz załaduj poniższy szkic do swojego Arduino, które ma pełnić rolę nadajnika.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
unsigned long Command = 1;
void setup()
{
Serial.begin(57600);
radio.begin();
radio.setRetries(15,15);
radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.printDetails();
radio.openWritingPipe(pipes[0]);
radio.openReadingPipe(1,pipes[1]);
radio.stopListening();
}
void loop(void)
{
radio.stopListening();
radio.write( &Command, sizeof(unsigned long) );
radio.startListening();
delay(1000);
}
W tym kodzie zaznaczyłem zmienną Command. Jest to zmienna, którą wysyłam przez NRF24L01. Obecnie jej wartość to 1, ale możesz ją zmienić.
Jeśli więc chcesz wysłać 3, możesz zmienić jej wartość na 3.
Teraz zaprojektujmy stronę odbiornika.
NRF24L01 jako odbiornik
Ponownie połącz swoje Arduino z NRF24L01 jak pokazano na poniższej ilustracji. To samo zrobiliśmy dla strony nadajnika.
Teraz załaduj poniższy kod do odbiornika, a zaczniesz otrzymywać wartości pochodzące z nadajnika.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL };
typedef enum { role_ping_out = 1, role_pong_back } role_e;
const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"};
role_e role = role_pong_back;
void setup(void)
{
Serial.begin(57600);
radio.begin();
radio.setRetries(15,15);
radio.openReadingPipe(1,pipes[1]);
radio.startListening();
radio.printDetails();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1,pipes[0]);
radio.startListening();
}
void loop(void)
{
if ( radio.available() )
{
unsigned long data = 0;
radio.read( &data, sizeof(unsigned long) );
Serial.println(data);
delay(20);
}
}
Teraz otwórz swój Monitor Szeregowy po stronie odbiornika i zobaczysz, że otrzymujesz "1" w polu Monitora Szeregowego Arduino, co jest wartością zmiennej Command, którą ustawiliśmy po stronie nadajnika, jak pokazano na poniższym zrzucie ekranu:
Jest to dość proste i mam nadzieję, że uda ci się to zrobić za pierwszym podejściem. Ale jeśli nadal masz problem to pytaj w komentarzach.
Wkrótce podzielę się większą liczbą projektów Arduino dotyczących tego modułu RF.
Tak więc, to wszystko na dzisiaj i mam nadzieję, że teraz możecie łatwo łączyć Arduino z NRF24L01 oraz ustawić komunikację RF. Jeśli macie jakiś problem z tym połączeniem Arduino z NRF24L01 to pytajcie, a ja postaram się jak najlepiej go rozwiązać.
Trzymajcie się!