Lekcja 19: Komunikacja radiowa
Tematem lekcji jest komunikacja między dwoma urządzeniami za pomocą fal radiowych. Do tego celu
wykorzystamy dwa moduły radiowe 2,4GHz nRF24L01 - jeden do nadawania, drugi do odbioru wiadomości.
Wciskanie przycisków w układzie nadawczym będzie skutkowało zapalaniem się odpowiednich diod w układzie odbiorczym.
Części potrzebne do projektu:
- Moduł radiowy nRF24L01+ PA LNA 2,4GHz - transceiver THT - 2 szt.,
- Arduino Uno - 2 szt.,
- 3 diody led,
- 3 przyciski,
- przewody.
Specyfikacja modułu radiowego nRF24L01:
|
Układ radiowy łączymy z Arduino Uno wg tabeli:
Moduł RF24L01 | Arduino UNO |
---|---|
GND | GND |
CE | Pin 9 |
SCK | 13 |
MISO | 12 |
VCC | 3,3V !!!! |
CSN | 10 |
MOSI | 11 |
KOD 1 - Piszemy kod w arduino IDE dla układu nadawczego:
#include < SPI.h> #include < nRF24L01.h> #include < RF24.h> RF24 radio(7, 8); const byte rxAddr[6] = "00001"; int buttonPin0 = 2, buttonPin1 = 3, buttonPin2 = 4; void setup() { radio.begin(); radio.setRetries(15, 15); radio.openWritingPipe(rxAddr); pinMode(buttonPin0, INPUT); digitalWrite(buttonPin0, HIGH); pinMode(buttonPin1, INPUT); digitalWrite(buttonPin1, HIGH); pinMode(buttonPin2, INPUT); digitalWrite(buttonPin2, HIGH); radio.stopListening(); } void loop() { char dane[3]={ (char)(digitalRead(buttonPin0)+48), (char)(digitalRead(buttonPin1)+48), (char)(digitalRead(buttonPin2)+48) }; radio.write(&dane,sizeof(dane)); delay(200); }
KOD 2 - Piszemy kod w arduino IDE dla układu odbiorczego:
#include#include #include RF24 radio(7, 8); const byte rxAddr[6] = "00001"; void setup() { while (!Serial); Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, rxAddr); pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); radio.startListening(); } void loop() { if (radio.available()) { char text[3] = {""}; radio.read(&text, sizeof(text)); digitalWrite(3,(text[0]=='0')?HIGH:LOW); digitalWrite(4,(text[1]=='0')?HIGH:LOW); digitalWrite(5,(text[2]=='0')?HIGH:LOW); } delay(200); }
Opis kodu 1:
- W liniach 1-3 - deklarujemy niezbędne biblioteki SPI, nRF24L01 oraz RF24.
- Linia 5 - z biblioteki RF24 tworzymy obiekt radio na pinach 7 i 8.
- Linia 6 - deklarujemy adres odbiornika radiowego.
- Linia 7 - ustawiamy piny dla trzech przycisków.
- Linia 8 - początek funkcji setup().
- Linia 10 - ustawianie modemu do współpracy z programem
- Linia 11 - metoda .setRetries() ustala co jaki czas i ile razy nadajnik ma ponawiać wysyłanie danych.
- Linia 12 - metoda .openWritingPipes() ustawia adres odbiornika, do którego wysyłamy dane.
- W liniach 13-18 - ustawiamy tryby obsługi portów cyfrowych dla przycisków, w tym przypadku ustawiamy do odczytu oraz ustawiamy stan napięcia na HIGH.
- Linia 19 - metoda .stopListening() kończy nasłuchiwanie modemu automatycznie przełączając go na tryb nadawania.
- Linia 21 - początek funkcji loop()
- Linia 23 - tworzymy wektor z 3 elementami zawierającymi obecne stany napięć portów cyfrowych, do których podłączone są przyciski.
- Linia 28 - metodą .write() nadajemy wcześniej odczytane przez nas dane, drugim argumentem jest ilość bajtów jaką radio ma pobrać ze zmiennej do wysłania.
- Linia 29 - ustawiamy opóźnienie na 200ms.
Opis kodu 2:
- W liniach 1-3 - deklarujemy potrzebne biblioteki SPI, nRF24L01 oraz RF24.
- Linia 5 - z biblioteki RF24 tworzymy obiekt radio na pinach 7 i 8.
- Linia 6 - deklarujemy adres nadajnika radiowego.
- Linia 7 - początek funkcji setup().
- Linia 9 - oczekiwanie aż port USB w Arduino przełączy się w tryb portu szeregowego COM.
- Linia 10 - rozpoczęcie komunikacji z komputerem.
- Linia 11 - ustawianie modemu do współpracy z programem.
- Linia 12 - deklaracja adresu nadajnika.
- W liniach 13-15 - ustawienie trybu działania portów cyfrowych, do których podłączone są diody.
- Linia 16 - metodą .startListening() rozpoczynamy nasłuchiwanie.
- Linia 18 - początek funkcji loop().
- Linia 20 - sprawdzanie metodą .available() czy modem odebrał dane.
- Linia 22 - przygotowywanie nowego wektora do zapisania odebranych danych.
- Linia 23 - metodą .read() zapisujemy odebrane dane do wektora „text”.
- W liniach 25-27 - interpretacja odebranych danych i ustawianie stanu napięcia diód.
- Linia 29 - ustawienie opóźnienia na 200ms.
Powrót do spisu materiałów