Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
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 Biblioteka RF24 Zygmunt Kubiak
13
Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak
14
Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 Zygmunt Kubiak
15
Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst Biblioteka RF24 !!! Uwaga Biblioteki ze stron oraz Wykazują pewne różnicę – w szczególności należy zwrócić uwagę na funkcje radio.read() Zygmunt Kubiak
16
Transmisja radiowa - Arduino & nRF24L01P
nRF24L01 – transmisja w trybie Shockburst // 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 Zygmunt Kubiak
17
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
18
Transmisja radiowa - Arduino & nRF24L01P
Ćwiczenie laboratoryjne – Radio1 Transmisja jednokierunkowa N --> O Tryb Shock Burst (wyłączone potwierdzanie i powtórzenia transmisji) Stała długość pola ładunku (danych) – 32 bajty Kanał MHz Adres (pole pipe) - 0xE2E2E2E231 Sprzętowe CRC16 Prędkość 2 Mb/s Zygmunt Kubiak
19
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
20
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
21
Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Topologia // Adresy do komunikacji dwukierunkowej const uint64_t pipes[2] = {0xE2E2E2E231LL, 0xE2E2E2E253LL}; Zygmunt Kubiak
22
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
23
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
24
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
25
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.openReadingPipe(1, pipes[1]); } else // radio.openWritingPipe(pipes[1]); radio.openReadingPipe(1, pipes[0]); Zygmunt Kubiak
26
Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino // Start nasłuchu radio.startListening(); // Wydruk konfiguracji wybranych rejestrów radio.printDetails(); } // Koniec funkcji setup() Zygmunt Kubiak
27
Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() void loop() { // Rola nadajnika if (rola == nadajnik) // Zatrzymanie nasłuchu radio.stopListening(); Zygmunt Kubiak
28
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
29
Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() // Rola nadajnika – skorzystać z funkcji radio.write() Zygmunt Kubiak
30
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
31
Transmisja radiowa - Arduino & nRF24L01P
Szkic Arduino - funkcja loop() // Rola odbiornika – skorzystać z funkcji radio.read() Zygmunt Kubiak
32
Transmisja radiowa - Arduino & nRF24L01P
Projekty – Radio2 Transmisja zgodnie z przydzielonym protokołem Tryb Shock Burst (wyłączone potwierdzanie i powtórzenia transmisji) Sprzętowe CRC – wyłączone (radio.disableCRC()) Programowe CRC8 – zgodnie z wcześniejszymi ćwiczeniami (opcja – ostatni bajt ładunku) Uwaga – pole adresu pipe, pełni w tej realizacji rolę słowa synchronizacyjnego Zygmunt Kubiak
33
Dziękuję Zygmunt Kubiak
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.