- Moduł RF nRF24L01
- Schemat obwodu
- Programowanie Raspberry Pi do wysyłania wiadomości przy użyciu nRF24l01
- Programowanie Arduino UNO do odbierania wiadomości przy użyciu nRF24l01
Projektanci używają wielu systemów komunikacji bezprzewodowej, takich jak Bluetooth Low Energy (BLE 4.0), Zigbee, moduły Wi-Fi ESP8266, moduły RF 433MHz, Lora, nRF itp. Wybór medium zależy od typu aplikacji, w której jest używany. W sumie jednym popularnym medium bezprzewodowym do komunikacji w sieci lokalnej jest nRF24L01. Moduły te działają w paśmie 2,4 GHz (ISM) z szybkością transmisji od 250 Kb / s do 2 Mb / s, co jest legalne w wielu krajach i może być używane w zastosowaniach przemysłowych i medycznych. Twierdzi się również, że przy odpowiednich antenach moduły te mogą przesyłać i odbierać sygnały na odległość do 100 metrów między nimi. Wcześniej używaliśmy nRF24L01 z Arduino do sterowania serwomotorem i tworzenia pokoju rozmów.
Tutaj użyjemy modułu nRF24L01 - 2,4GHz RF Transceiver z Arduino UNO i Raspberry Pi do ustanowienia komunikacji bezprzewodowej między nimi. Raspberry pi będzie działać jako nadajnik, a Arduino Uno nasłuchuje Raspberry Pi i drukuje wiadomość wysłaną przez Raspberry Pi za pomocą nRF24L01 na wyświetlaczu LCD 16x2. nRF24L01 ma również wbudowane funkcje BLE i może również komunikować się bezprzewodowo za pomocą BLE.
Samouczek jest podzielony na dwie części. Pierwsza sekcja będzie zawierała interfejs nRF24L01 z Arduino, aby działał jako odbiornik, a druga sekcja będzie zawierała interfejs nRF24L01 z Raspberry Pi, aby działać jako nadajnik. Pełny kod dla obu sekcji z działającym filmem zostanie dołączony na końcu tego samouczka.
Moduł RF nRF24L01
Te moduły nRF24L01 są transceiver moduły, co oznacza zarówno Każdy moduł może wysyłać i odbierać dane, ale ponieważ są one half-duplex mogą też wysyłać i odbierać dane w czasie. Moduł posiada generyczny układ scalony nRF24L01 z nordyckich półprzewodników, który odpowiada za transmisję i odbiór danych. Układ scalony komunikuje się za pomocą protokołu SPI, dzięki czemu można go łatwo połączyć z dowolnym mikrokontrolerem. Z Arduino jest to o wiele łatwiejsze, ponieważ biblioteki są łatwo dostępne. W pinoutem standardowego modułu nRF24L01 przedstawiono poniżej
Moduł ma napięcie robocze od 1,9 V do 3,6 V (typowo 3,3 V) i pobiera bardzo mniej prądu, tylko 12 mA podczas normalnej pracy, dzięki czemu jest wydajny z baterii, a tym samym może pracować nawet na ogniwach pastylkowych. Mimo że napięcie robocze wynosi 3,3 V, większość pinów ma tolerancję 5 V i dlatego można je bezpośrednio łączyć z mikrokontrolerami 5 V, takimi jak Arduino. Kolejną zaletą korzystania z tych modułów jest to, że każdy moduł ma 6 rurociągów. Oznacza to, że każdy moduł może komunikować się z 6 innymi modułami w celu przesyłania lub odbierania danych. Dzięki temu moduł nadaje się do tworzenia sieci typu gwiazda lub mesh w aplikacjach IoT. Mają też szeroki zakres adresów 125 unikalnych identyfikatorów, stąd w zamkniętym obszarze możemy używać 125 takich modułów bez ingerencji w siebie.
Schemat obwodu
nRF24L01 z Arduino:
Schemat obwodu połączenia nRF24L01 z Arduino jest łatwy i nie zawiera zbyt wielu komponentów. NRF24l01 połączone za pomocą magistrali SPI i 16x2 LCD jest połączony z protokołem I2C który wykorzystuje tylko dwa przewody.
nRF24L01 z Raspberry Pi:
Schemat obwodu połączenia nRF24L01 z Raspberry Pi jest również bardzo prosty i do połączenia Raspberry Pi z nRF24l01 służy tylko interfejs SPI.
Programowanie Raspberry Pi do wysyłania wiadomości przy użyciu nRF24l01
Programowanie Raspberry Pi będzie odbywać się za pomocą Python3. Możesz również użyć C / C ++ jako Arduino. Ale jest już dostępna biblioteka dla nRF24l01 w Pythonie, którą można pobrać ze strony github. Zwróć uwagę, że program w języku Python i biblioteka powinny znajdować się w tym samym folderze, w przeciwnym razie program w języku Python nie będzie mógł znaleźć biblioteki. Po pobraniu biblioteki po prostu wypakuj i utwórz folder, w którym będą przechowywane wszystkie programy i pliki bibliotek. Po zakończeniu instalacji biblioteki po prostu zacznij pisać program. Program rozpoczyna się od włączenia bibliotek, które będą używane w kodzie, takim jak import biblioteki GPIO w celu uzyskania dostępu do GPIO Raspberry Pi i czasu importu dostęp do funkcji związanych z czasem. Jeśli jesteś nowy w Raspberry Pi, wróć do rozpoczynania pracy z Raspberry pi.
import RPi.GPIO jako GPIO import czas import spidev z lib_nrf24 import NRF24
Ustaw tryb GPIO w „ Broadcom SOC channel”. Oznacza to, że odnosisz się do pinów przez numer „Broadcom SOC channel”, są to numery po „GPIO” (np. GPIO01, GPIO02…). To nie są numery tablicy.
GPIO.setmode (GPIO.BCM)
Następnie ustawimy adres potoku. Ten adres jest ważny do komunikacji z odbiornikiem Arduino. Adres będzie w kodzie szesnastkowym.
rury =,]
Rozpocznij radio używając GPIO08 jako CE i GPIO25 jako pinów CSN.
radio.begin (0, 25)
Ustaw rozmiar ładunku na 32 bity, adres kanału na 76, szybkość transmisji danych 1 Mb / si poziomy mocy jako minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Otwórz rury, aby rozpocząć zapisywanie danych i wydrukuj podstawowe szczegóły nRF24l01.
radio.openWritingPipe (rury) radio.printDetails ()
Przygotuj wiadomość w postaci ciągu. Ta wiadomość zostanie wysłana do Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") podczas gdy len (sendMessage) <32: sendMessage.append (0)
Zacznij pisać do radia i kontynuuj zapisywanie całego ciągu, aż radio będzie dostępne. Wraz z nim zanotuj czas i wydrukuj oświadczenie debugowania o dostarczeniu wiadomości.
while True: start = time.time () radio.write (sendMessage) print ("Wysłano wiadomość: {}". format (sendMessage)) send radio.startListening ()
Jeśli łańcuch jest zakończony, a potok jest zamknięty, wypisz komunikat debugowania o przekroczeniu limitu czasu.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timed out.") # wyświetla komunikat o błędzie, jeśli radio jest odłączone lub nie działa już przerwa
Przerwij słuchanie radia i zamknij komunikację, a po 3 sekundach uruchom ją ponownie, aby wysłać kolejną wiadomość.
radio.stopListening () # close radio time.sleep (3) # daje opóźnienie o 3 sekundy
Program Raspberry jest łatwy do zrozumienia, jeśli znasz podstawy języka Python. Kompletny program w Pythonie znajduje się na końcu samouczka.
Wykonywanie programu Python w Raspberry Pi:
Uruchomienie programu jest bardzo łatwe po wykonaniu poniższych czynności:
- Zapisz pliki programu i biblioteki języka Python w tym samym folderze.
- Nazwa mojego pliku programu Sender to nrfsend.py i wszystkie pliki znajdują się w tym samym folderze
- Idź do Command Terminal Raspberry Pi. Zlokalizuj plik programu w języku Python za pomocą polecenia „cd”.
- Następnie otwórz folder i wpisz polecenie „ sudo python3 your_program.py ” i naciśnij Enter. Będziesz mógł zobaczyć podstawowe szczegóły nRf24, a radio zacznie wysyłać wiadomości co 3 sekundy. Komunikat debugowania zostanie wyświetlony po wysłaniu wszystkich wysłanych znaków.
Teraz zobaczymy ten sam program co odbiornik w Arduino UNO.
Programowanie Arduino UNO do odbierania wiadomości przy użyciu nRF24l01
Programowanie Arduino UNO jest podobne do programowania Raspberry Pi. Będziemy postępować zgodnie z podobnymi metodami, ale z innym językiem programowania i krokami. Kroki będą obejmować część do czytania nRF24l01. Bibliotekę dla nRF24l01 dla Arduino można pobrać ze strony github. Zacznij od dołączenia niezbędnych bibliotek. Używamy 16x2 LCD z I2C Shield, więc dołącz bibliotekę Wire.h, a także nRF24l01 jest połączony z SPI, więc dołącz bibliotekę SPI.
#zawierać
Zawiera bibliotekę RF24 i LCD umożliwiającą dostęp do funkcji RF24 i LCD.
#zawierać
Adres LCD dla I2C to 27 i jest to LCD 16x2, więc zapisz to w funkcji.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 jest podłączony za pomocą standardowych pinów SPI wraz z CE na pinie 9 i CSN na pinie 10.
Radio RF24 (9, 10);
Uruchom radio, ustaw poziom mocy i ustaw kanał na 76. Ustaw również adres potoku taki sam jak Raspberry Pi i otwórz potok do odczytu.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, potok);
Rozpocznij komunikację I2C i zainicjalizuj wyświetlacz LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Gotowy do odbioru");
Zacznij słuchać radia w poszukiwaniu wiadomości przychodzących i ustaw długość wiadomości na 32 bajty.
radio.startListening (); char receivedMessage = {0}
Jeśli radio jest dołączone, zacznij czytać wiadomość i zapisz ją. Wydrukuj komunikat na monitorze szeregowym, a także wydrukuj na wyświetlaczu, aż do nadejścia następnego komunikatu. Zatrzymaj radio, aby słuchać i spróbuj ponownie po pewnym czasie. Tutaj jest 10 mikro sekund.
if (radio.available ()) { radio.read (receivedMessage, sizeof (receivedMessage)); Serial.println (receivedMessage); Serial.println ("Wyłączanie radia."); radio.stopListening (); String stringMessage (receivedMessage); lcd.clear (); opóźnienie (1000); lcd.print (stringMessage); }
Prześlij cały kod podany na końcu do Arduino UNO i poczekaj na otrzymanie wiadomości.
To kończy pełny samouczek dotyczący wysyłania wiadomości za pomocą Raspberry Pi i nRf24l01 i odbierania jej za pomocą Arduino UNO i nRF24l01. Komunikat zostanie wydrukowany na wyświetlaczu LCD 16x2. Adresy rur są bardzo ważne zarówno w Arduino UNO, jak i Raspberry Pi. Jeśli napotkasz jakiekolwiek trudności podczas wykonywania tego projektu, skomentuj poniżej lub przejdź do naszego forum, aby uzyskać bardziej szczegółową dyskusję.
Sprawdź również film demonstracyjny poniżej.