Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Transmisja radiowa Arduino & nRF24L01P

Podobne prezentacje


Prezentacja na temat: "Transmisja radiowa Arduino & nRF24L01P"— Zapis prezentacji:

1 Transmisja radiowa Arduino & nRF24L01P
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

2 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst W tym trybie ramka ma prostą strukturę: Zakończona jest opcjonalnym polem kontrolnym, które obsługiwane jest sprzętowo wewnątrz układu RF Programista wybiera adres 3-5 bajtów Wysłanie preambuły i realizacja synchronizacji bitowej i bajtowej realizowane jest przez układ RF Taka organizacja ramki pozwala na wykorzystanie układu nRF24L01 do pracy w bardzo różnych protokołach transmisji Pole ładunku może być wypełnione różną treścią, wymaganą przez dany protokół. Zygmunt Kubiak

3 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Można wykorzystać specyficzną cechę układu RF, dostępną w trybie RX a polegającą na użyciu do 6 kanałów logicznych (adresów) w ramach danego kanału radiowego Zygmunt Kubiak

4 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Można wykorzystać specyficzną cechę układu RF, dostępną w trybie RX a polegającą na użyciu do 6 kanałów logicznych (adresów) w ramach danego kanału radiowego (MultiCeiver) Zygmunt Kubiak

5 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Przykładowe adresowanie w MultiCeiver Zygmunt Kubiak

6 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

7 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

8 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

9 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

10 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

11 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak

12 Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Zygmunt Kubiak

13 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino //*************************************************** // Transmisja typu N->O #include <SPI.h> #include „nRF24L01.h” #include „RF24.h” #include „printf.h” #define TXBUF_SIZE 0x20 #define RXBUF_SIZE 0x20 unsigned char [TXBUF_SIZE] = {„xxxxxxImie Nazwisko”}; unsigned char[RXBUF_SIZE] = {}; Zygmunt Kubiak

14 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Konfiguracja const int Btn = 5; const int Led = 13; // Połączenie sygnałów CE i CSN układu nRF24L01+ z Arduino // CE -> 9; CSN -> 10 // Pozostałe sygnały SPI zgodne z Arduino // MOSI -> 11; MISO -> 12; SCK -> 13 RF24 radio(9,10); Zygmunt Kubiak

15 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Ustalenie roli węzła. Połączenie „role_pin” do GND – nadajnik // Bez połączenia – odbiornik const int role_pin = 7; // Tryby pracy węzła typedef enum {nadajnik = 1, odbiornik} rola_e; // Nazwy ról const char* stan_wezla[] = {„Niedostepny”, „Nadajnik”, „Odbiornik”}; // Zmienna określająca bieżącą rolę węzła rola_e rola; unsigned char frcnt = 0; // licznik ramek węzła Zygmunt Kubiak

16 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Topologia // Adresy do komunikacji dwukierunkowej const uint64_t pipes[2] = {0xE2E2E2E231LL, 0xE2E2E2E253LL}; Zygmunt Kubiak

17 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino void setup() { pinMode(Led, OUTPUT); pinMode(Btn, INPUT_PULLUP); // Konfiguracja pinu roli węzła (wejście) pinMode(role_pin, INPUT_PULLUP); digitalWrite(role_pin,HIGH); delay(20); // Wymagane opóźnienie // Oczyt roli węzła if (!digitalRead(role_pin)) rola = nadajnik; else rola = odbiornik; Zygmunt Kubiak

18 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Informacja startowa Serial.begin(19200); printf_begin(); printf(„\n\ nRF24L01+ transmisja N -> O/\n\r”); printf(„Rola wezla: %s\n\r”, stan_wezla[rola]); Zygmunt Kubiak

19 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Konfiguracja układu RF radio.begin(); // radio.disableCRC(); // bez CRC radio.setCRCLength(RF24_CRC_16); // sprzętowe CRC radio.setChannel(33); // 2433 MHz // Wybór trybu Shock Burst radio.setPayloadSize(TXBUF_SIZE); // l. bajtów 1-32 radio.setAutoAck(false); // blokada potwierdzeń radio.setDataRate(RF24_1MBPS); // lub RF_250KBPS radio.setRetries(0,0); // zerowa liczba powtórzeń Zygmunt Kubiak

20 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Otwarcie kanałów logicznych dla komunikacji // Przydział adresów dla nadawania i odbioru if (rola == nadajnik) // tu tylko pipes[0] { radio.openWritingPipe(pipes[0]); // radio.openWritingPipe(1, pipes[1]); } else // radio.openWritingPipe(pipes[1]); radio.openWritingPipe(1, pipes[0]); Zygmunt Kubiak

21 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Start nasłuchu radio.startListening(); // Wydruk konfiguracji wybranych rejestrów radio.printDetails(); } // Koniec funkcji setup() Zygmunt Kubiak

22 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() void loop() { // Rola nadajnika if (rola == nadajnik) // Zatrzymanie nasłuchu radio.stopListening(); Zygmunt Kubiak

23 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() /* Wysłać ramkę z następującym ładunkiem TxBuf[0] - rozmiar pola ładunku TxBuf[1] - stan przycisku Btn TxBuf[2] - nr sekwencyjny ramki (frcnt) TxBuf[3] - stały bajt 0xFF Pozostała część bufora od i=6 – tekst ASCII Wydruk zawartości wysłanej ramki */ radio.startListening(); delay(1000); } // koniec nadawania Zygmunt Kubiak

24 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() // Rola nadajnika – skorzystać z funkcji radio.write() Zygmunt Kubiak

25 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() // Rola odbiornika if (rola == odbiornik) { // Jeśli są dane do odczytu if (radio.available()) /* Odczyt danych do bufora RxBuf Wydruk: dane (Rxbuf[0] – RxBuf[3]), tekst od RxBuf[6] */ } } // koniec odbioru Zygmunt Kubiak

26 Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() // Rola odbiornika – skorzystać z funkcji radio.read() Zygmunt Kubiak

27 Dziękuję Zygmunt Kubiak


Pobierz ppt "Transmisja radiowa Arduino & nRF24L01P"

Podobne prezentacje


Reklamy Google