- RF modul nRF24L01
- Kruhový diagram
- Programování Raspberry Pi pro odesílání zpráv pomocí nRF24l01
- Programování Arduino UNO pro příjem zpráv pomocí nRF24l01
Návrháři používají mnoho bezdrátových komunikačních systémů, jako jsou Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi moduly, 433MHz RF moduly, Lora, nRF atd. A výběr média závisí na typu aplikace, ve které se používá. Mezi jedním z populárních bezdrátových médií pro komunikaci v místní síti je nRF24L01. Tyto moduly fungují na pásmu 2,4 GHz (pásmo ISM) s přenosovou rychlostí od 250 kb / s do 2 Mb / s, což je v mnoha zemích legální a lze je použít v průmyslových a lékařských aplikacích. Rovněž se tvrdí, že se správnými anténami mohou tyto moduly vysílat a přijímat signály až do vzdálenosti 100 metrů mezi nimi. Dříve jsme s Arduino používali nRF24L01 k ovládání servomotoru a vytvoření chatovací místnosti.
Zde použijeme modul nRF24L01 - 2,4 GHz RF Transceiver s Arduino UNO a Raspberry Pi k navázání bezdrátové komunikace mezi nimi. Raspberry pi bude fungovat jako vysílač a Arduino Uno bude poslouchat Raspberry Pi a vytisknout zprávu zaslanou Raspberry Pi pomocí nRF24L01 na 16x2 LCD. nRF24L01 má také vestavěné funkce BLE a může také bezdrátově komunikovat pomocí BLE.
Výukový program je rozdělen do dvou částí. První část bude zahrnovat propojení nRF24L01 s Arduinem jako přijímačem a druhá část bude zahrnovat propojení nRF24L01 s Raspberry Pi jako vysílačem. Kompletní kód pro obě části s pracovním videem bude připojen na konci tohoto kurzu.
RF modul nRF24L01
Tyto moduly nRF24L01 jsou vysílací a přijímací moduly, což znamená, každý modul může jak odesílat a přijímat data, ale protože jsou poloduplexní mohou buď odesílat a přijímat data najednou. Modul má obecný IC nRF24L01 od severských polovodičů, který je zodpovědný za přenos a příjem dat. IC komunikuje pomocí protokolu SPI, a proto jej lze snadno propojit s jakýmikoli mikrokontroléry. S Arduinem je to mnohem snazší, protože knihovny jsou snadno dostupné. Níže jsou uvedeny pinouty standardního modulu nRF24L01
Modul má provozní napětí od 1,9 V do 3,6 V (typicky 3,3 V) a při běžném provozu spotřebovává velmi méně proudu, pouze 12 mA, což z něj činí baterii efektivní, a proto může běžet i na knoflíkové články. I když je provozní napětí 3,3 V, většina kolíků je tolerantní k 5V, a proto je lze přímo propojit s 5V mikrokontroléry, jako je Arduino. Další výhodou použití těchto modulů je, že každý modul má 6 potrubí. To znamená, že každý modul může komunikovat s dalšími 6 moduly pro přenos nebo příjem dat. Díky tomu je modul vhodný pro vytváření hvězdných nebo mesh sítí v aplikacích IoT. Také mají široký rozsah adres 125 jedinečných ID, a proto v uzavřené oblasti můžeme použít 125 těchto modulů bez vzájemného rušení.
Kruhový diagram
nRF24L01 s Arduino:
Schéma zapojení pro připojení nRF24L01 k Arduinu je snadné a nemá mnoho komponent. Jednotka nRF24l01 bude připojena rozhraním SPI a 16x2 LCD je propojen s protokolem I2C, který používá pouze dva vodiče.
nRF24L01 s Raspberry Pi:
Schéma zapojení pro připojení nRF24L01 k Raspberry Pi je také velmi jednoduché a pro připojení Raspberry Pi a nRF24l01 se používá pouze rozhraní SPI.
Programování Raspberry Pi pro odesílání zpráv pomocí nRF24l01
Programování Raspberry Pi bude prováděno pomocí Python3. Jako Arduino můžete také použít C / C ++. Ale již existuje knihovna pro nRF24l01 v pythonu, kterou lze stáhnout ze stránky github. Všimněte si, že program python a knihovna by měly být ve stejné složce nebo program python nebude schopen najít knihovnu. Po stažení knihovny stačí rozbalit a vytvořit složku, kde budou uloženy všechny programy a soubory knihovny. Po dokončení instalace knihovny začněte psát program. Program začíná začleněním knihoven, které budou použity v kódu, jako je import GPIO knihovny pro přístup k GPIO Raspberry Pi a čas importu pro přístup k funkcím souvisejícím s časem. Pokud jste v Raspberry Pi noví, pak se vraťte zpět k zahájení práce s Raspberry Pi.
import RPi.GPIO jako GPIO čas importu import spidev z lib_nrf24 import NRF24
Nastavte režim GPIO na „ Broadcom SOC channel“. To znamená, že odkazujete na piny číslem „Broadcom SOC channel“, jedná se o čísla za „GPIO“ (např. GPIO01, GPIO02…). Toto nejsou čísla tabule.
GPIO.setmode (GPIO.BCM)
Dále nastavíme adresu kanálu. Tato adresa je důležitá pro komunikaci s přijímačem Arduino. Adresa bude v hexadecimálním kódu.
potrubí =,]
Začněte rádio pomocí pinů GPIO08 jako CE a GPIO25 jako kolíků CSN.
radio.begin (0, 25)
Nastavte velikost užitečného zatížení na 32 bitů, adresu kanálu na 76, rychlost přenosu dat 1 Mb / s a úrovně výkonu jako minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Otevřete roury a začněte psát data a vytiskněte základní podrobnosti nRF24l01.
radio.openWritingPipe (potrubí) radio.printDetails ()
Připravte zprávu ve formě řetězce. Tato zpráva bude odeslána do Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") while len (sendMessage) <32: sendMessage.append (0)
Začněte psát do rádia a pokračujte v psaní celého řetězce, dokud nebude rádio k dispozici. Spolu s ním si poznamenejte čas a vytiskněte ladicí prohlášení o doručení zprávy.
while True: start = time.time () radio.write (sendMessage) print ("Odeslal zprávu: {}". format (sendMessage)) send radio.startListening ()
Pokud je řetězec dokončen a potrubí je uzavřeno, vytiskněte debugovací zprávu vypršel.
i když není radio.available (0): time.sleep (1/100) v případě time.time () - Start> 2: print ("Vypršel časový limit.") Chyba # tisková zpráva, pokud rádio odpojen nebo nefunguje už rozbít
Přestaňte poslouchat rádio a ukončete komunikaci a po 3 sekundách komunikaci odešlete a odešlete další zprávu.
radio.stopListening () # zavřít čas rádia. spánek (3) # dát zpoždění 3 sekundy
Program Raspberry je snadno pochopitelný, pokud znáte základy pythonu. Kompletní program Python je uveden na konci tohoto tutoriálu.
Spuštění programu Python v Raspberry Pi:
Spuštění programu je velmi snadné po provedení následujících kroků:
- Uložte soubory programu Python a knihovny do stejné složky.
- Název mého programového souboru pro Sender je nrfsend.py a také všechny soubory jsou ve stejné složce
- Přejděte do příkazového terminálu Raspberry Pi. A vyhledejte programový soubor pythonu pomocí příkazu „cd“.
- Poté otevřete složku a napište příkaz „ sudo python3 your_program.py “ a stiskněte klávesu Enter. Uvidíte základní informace o nRf24 a rádio začne posílat zprávy každé 3 sekundy. Ladění zprávy se zobrazí po dokončení odeslání se všemi odeslanými znaky.
Nyní uvidíme stejný program jako přijímač v Arduino UNO.
Programování Arduino UNO pro příjem zpráv pomocí nRF24l01
Programování Arduino UNO je podobné programování Raspberry Pi. Budeme postupovat podobnými metodami, ale s jiným programovacím jazykem a kroky. Kroky budou zahrnovat čtecí část nRF24l01. Knihovnu pro nRF24l01 pro Arduino lze stáhnout ze stránky github. Začněte včetně nezbytných knihoven. Používáme 16x2 LCD pomocí I2C Shield, takže zahrňte knihovnu Wire.h a také nRF24l01 je propojen s SPI, takže zahrňte SPI knihovnu.
#zahrnout
Zahrňte knihovnu RF24 a LCD pro přístup k funkcím RF24 a LCD.
#zahrnout
Adresa LCD pro I2C je 27 a je to 16x2 LCD, takže to zapište do funkce.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 je spojen se standardními SPI piny spolu s CE na pinu 9 a CSN na pinu 10.
Rádio RF24 (9, 10);
Spusťte rádio, nastavte úroveň výkonu a nastavte kanál na 76. Rovněž nastavte adresu kanálu jako Raspberry Pi a otevřete kanál ke čtení.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, potrubí);
Zahajte komunikaci I2C a inicializujte LCD displej.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print („Připraveno k přijetí“);
Začněte poslouchat rádio pro příchozí zprávy a nastavte délku zprávy na 32 bajtů.
radio.startListening (); char receiveMessage = {0}
Pokud je připojeno rádio, začněte číst zprávu a uložte ji. Vytiskněte zprávu na sériový monitor a také tiskněte na displej, dokud nedorazí další zpráva. Chcete-li poslouchat, zastavte rádio a po určitém intervalu to zkuste znovu. Tady je to 10 mikrosekund.
if (radio.available ()) { radio.read (receiveMessage, sizeof (receiveMessage)); Serial.println (receiveMessage); Serial.println ("Vypnutí rádia."); radio.stopListening (); Řetězec stringMessage (receiveMessage); lcd.clear (); zpoždění (1000); lcd.print (stringMessage); }
Nahrajte kompletní kód zadaný na konci do Arduino UNO a počkejte na přijetí zprávy.
Tím je dokončen kompletní výukový program pro odesílání zpráv pomocí Raspberry Pi & nRf24l01 a příjem pomocí Arduino UNO & nRF24l01. Zpráva se vytiskne na 16x2 LCD. Adresy potrubí jsou velmi důležité jak v Arduino UNO, tak v Raspberry Pi. Pokud se při realizaci tohoto projektu setkáte s jakýmikoli potížemi, komentujte prosím níže nebo se obraťte na diskusní fórum.
Zkontrolujte také ukázkové video níže.