- Az nRF24L01 RF modul
- Kördiagramm
- A Raspberry Pi programozása üzenetküldésre az nRF24l01 használatával
- Arduino UNO programozása üzenet fogadására az nRF24l01 használatával
A tervezők számos vezeték nélküli kommunikációs rendszert használnak, mint például a Bluetooth Low Energy (BLE 4.0), a Zigbee, az ESP8266 Wi-Fi modulok, a 433MHz RF modulok, a Lora, az nRF stb. Mindegyik egy népszerű vezeték nélküli közeg a helyi hálózati kommunikációhoz az nRF24L01. Ezek a modulok 2,4 GHz-en (ISM sávon) működnek, az átviteli sebesség 250 Kbps-tól 2Mbps-ig terjed, ami sok országban legális, és ipari és orvosi alkalmazásokhoz használható. Azt is állítják, hogy megfelelő antennákkal ezek a modulok képesek jeleket továbbítani és fogadni közöttük 100 méteres távolságig. Korábban az nRF24L01-t használtuk Arduino-val a szervomotor vezérléséhez és egy Csevegőszoba létrehozásához.
Itt nRF24L01 - 2,4 GHz-es RF adó-vevő modult fogunk használni az Arduino UNO-val és a Raspberry Pi-vel, hogy vezeték nélküli kommunikációt hozzunk létre közöttük. A Raspberry pi adóként működik, az Arduino Uno pedig hallgatja a Raspberry Pi-t, és kinyomtatja a Raspberry Pi által az nRF24L01 segítségével küldött üzenetet egy 16x2-es LCD-re. Az nRF24L01 beépített BLE képességekkel is rendelkezik, és vezeték nélkül is képes kommunikálni a BLE használatával.
Az oktatóanyag két szakaszra oszlik. Az első szakasz tartalmazza az nRF24L01 és az Arduino interfészét, hogy vevőként működjön, a második szakasz pedig az nRF24L01 interfészét a Raspberry Pi-vel, hogy adóként működjön. A bemutató végén csatoljuk a működő videóval ellátott szakaszok teljes kódját.
Az nRF24L01 RF modul
A nRF24L01 modulok vannak adóvevő modulok, vagyis minden modul egyaránt küldhet és fogadhat adatokat, de mivel fél-duplex akkor sem adatok küldésére vagy fogadására egy időben. A modul rendelkezik a skandináv félvezetők általános nRF24L01 IC-jével, amely felelős az adatok továbbításáért és fogadásáért. Az IC az SPI protokoll használatával kommunikál, és így könnyen összekapcsolható bármely mikrovezérlővel. Sokkal könnyebb lesz az Arduino használatával, mivel a könyvtárak könnyen elérhetőek. Az alábbiakban egy szabványos nRF24L01 modul csatlakozóit láthatjuk
A modul üzemi feszültsége 1,9 V és 3,6 V (általában 3,3 V) között van, és normál üzem közben nagyon kevesebb, csupán 12 mA áramot fogyaszt, ami akkumulátor-hatékonyságot eredményez, és így érmecellákon is futtatható. Annak ellenére, hogy az üzemi feszültség 3,3 V, a csapok többsége 5 V-tűrő, ezért közvetlenül összekapcsolható az 5 V-os mikrovezérlőkkel, például az Arduino-val. A modulok használatának további előnye, hogy mindegyik modul 6 csővezetékkel rendelkezik. Ez azt jelenti, hogy minden modul 6 másik modullal képes kommunikálni adatok továbbítására vagy fogadására. Ez alkalmassá teszi a modult csillag vagy háló hálózatok létrehozására az IoT alkalmazásokban. Széles 125 egyedi azonosítójú címtartományuk van, ezért zárt területen 125 ilyen modult használhatunk anélkül, hogy interferálnánk egymással.
Kördiagramm
nRF24L01 az Arduinóval:
Az nRF24L01 és az Arduino összekapcsolásának kapcsolási rajza egyszerű és nem sok elemet tartalmaz. Az nRF24l01-et SPI interfész fogja csatlakoztatni, és a 16x2 LCD-t az I2C protokollhoz kapcsolják, amely csak két vezetéket használ.
nRF24L01 Raspberry Pi-vel:
Az nRF24L01 és a Raspberry Pi összekapcsolásának kapcsolási rajza szintén nagyon egyszerű, és csak az SPI interfészt használják a Raspberry Pi és az nRF24l01 összekapcsolására.
A Raspberry Pi programozása üzenetküldésre az nRF24l01 használatával
A Raspberry Pi programozása a Python3 segítségével történik. Használhatja a C / C ++ -t Arduino néven is. De már van egy könyvtár az nRF24l01 számára a pythonban, amely letölthető a github oldalról. Vegye figyelembe, hogy a python programnak és a könyvtárnak ugyanabban a mappában kell lennie, különben a python program nem fogja megtalálni a könyvtárat. A könyvtár letöltését követően csak bontsa ki és hozzon létre egy mappát, ahol az összes program és könyvtárfájl tárolásra kerül. Ha a könyvtár telepítése megtörtént, kezdje el írni a programot. A program olyan könyvtárak bevonásával indul, amelyeket olyan kódokban fognak használni, mint például az importált GPIO könyvtár a Raspberry Pi GPIO eléréséhez és az importálás idejéhez az idővel kapcsolatos funkciók eléréséhez. Ha még nem ismeri a Raspberry Pi-t, akkor térjen vissza a Raspberry pi használatához.
import RPi.GPIO GPIO-ként importálási idő import spidev from lib_nrf24 import NRF24
Állítsa be a GPIO módot a " Broadcom SOC channel" menüben. Ez azt jelenti, hogy a "Broadcom SOC channel" számra hivatkozik a csapokra, ezek a számok a "GPIO" után (pl. GPIO01, GPIO02…). Ezek nem az igazgatósági számok.
GPIO.setmode (GPIO.BCM)
Ezután beállítjuk a cső címét. Ez a cím fontos az Arduino vevővel való kommunikációhoz. A cím hexakódban lesz.
csövek =,]
Indítsa el a rádiót a GPIO08 CE-ként és a GPIO25 CSN-csapokként.
radio.begin (0, 25)
Állítsa be a hasznos terhelés méretét 32 bitesre, a csatorna címét 76-ra, az adatátviteli sebességet 1 mbps-nek és a teljesítményszintet minimumra.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Nyissa ki a csöveket az adatok írásának megkezdéséhez, és nyomtassa ki az nRF24l01 alapvető adatait.
radio.openWritingPipe (pipe) radio.printDetails ()
Készítsen elő egy üzenetet a karakterlánc formában. Ezt az üzenetet elküldjük az Arduino UNO-nak.
sendMessage = list ("Hi..Arduino UNO"), míg len (sendMessage) <32: sendMessage.append (0)
Kezdje el írni a rádiónak, és addig írja a teljes karakterláncot, amíg a rádió rendelkezésre áll. Ezzel együtt jegyezze fel az időt és nyomtassa ki az üzenet kézbesítésének hibakeresési nyilatkozatát.
míg True: start = time.time () radio.write (sendMessage) print ("Az üzenet elküldve: {}". format ( sendMessage)) küldjön radio.startListening ()
Ha a karakterlánc elkészült és a cső zárva van, nyomtassa ki az időtúllépés hibakereső üzenetét.
miközben nem radio.available (0): time.sleep (1/100) ha time.time () - Start> 2: print ("Időtúllépés.") # nyomtatási hibaüzenetet, ha a rádió kikapcsolt vagy nem működik többé megtörni
Állítsa le a rádió hallgatását, zárja le a kommunikációt, és 3 másodperc múlva indítsa újra a kommunikációt, hogy újabb üzenetet küldjön.
radio.stopListening () # zárja be a rádióidőt.alszik (3) # 3 másodperces késleltetést ad
A Raspberry programot egyszerűen megérteni, ha ismeri a python alapjait. A teljes Python program az oktatóanyag végén található.
A Python program futtatása a Raspberry Pi alkalmazásban:
A program futtatása az alábbi lépések végrehajtása után nagyon egyszerű:
- Mentse a Python Program és Library fájlokat ugyanabba a mappába.
- A Sender programfájlom neve nrfsend.py, és minden fájl ugyanabban a mappában található
- Lépjen a Raspberry Pi parancssori termináljához. És keresse meg a python programfájlt a „cd” paranccsal.
- Ezután nyissa meg a mappát, írja be a „ sudo python3 your_program.py ” parancsot, és nyomja meg az Enter billentyűt . Láthatja az nRf24 alapvető részleteit, és a rádió 3 másodpercenként elkezdi küldeni az üzeneteket. Az üzenet hibakeresése megjelenik, miután a küldés befejeződött az összes elküldött karakterrel.
Most ugyanazt a programot fogjuk látni, mint a vevő az Arduino UNO-ban.
Arduino UNO programozása üzenet fogadására az nRF24l01 használatával
Az Arduino UNO programozása hasonló a Raspberry Pi programozásához. Hasonló módszereket fogunk követni, de eltérő programozási nyelvvel és lépésekkel. A lépések tartalmazzák az nRF24l01 olvasási részét. Az nRF24l01 for Arduino könyvtár letölthető a github oldalról. Kezdje a szükséges könyvtárak felvételével. 16x2 LCD-t használunk I2C Shield használatával, így tartalmazza a Wire.h könyvtárat, és az nRF24l01 is kapcsolódik az SPI-hez, így tartalmazza az SPI könyvtárat.
#include
Tartalmazza az RF24 és az LCD könyvtárat az RF24 és az LCD funkciók eléréséhez.
#include
Az I2C LCD címe 27, ez pedig 16x2 LCD, ezért írja be ezt a funkcióba.
LiquidCrystal_I2C lcd (0x27, 16, 2);
Az RF24 szabvány SPI csapokkal van összekötve, a 9. érintkező CE-vel és a 10. tű CSN-jével együtt.
RF24 rádió (9, 10);
Indítsa el a rádiót, állítsa be az energiaszintet és állítsa a csatornát 76-ra. Állítsa be a cső címét is, mint a Raspberry Pi, és nyissa ki a csövet az olvasáshoz.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t cső = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, cső);
Kezdje meg az I2C kommunikációt és inicializálja az LCD kijelzőt.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Fogadásra kész");
Kezdje el hallgatni a bejövő üzenetek rádióját, és állítsa be az üzenet hosszát 32 bájtnak.
radio.startListening (); char kapottMessage = {0}
Ha rádió van csatlakoztatva, kezdje el olvasni az üzenetet, és mentse el. Nyomtassa ki az üzenetet soros monitorra, és nyomtassa ki a kijelzőre is, amíg a következő üzenet meg nem érkezik. Állítsa le a rádiót a hallgatáshoz, és bizonyos időközönként próbálja meg újra. Itt 10 mikro másodperc.
if (radio.available ()) { radio.read (kapottMessage, sizeof (vastuvõzettMessage)); Soros.println (kapottMessage); Serial.println ("A rádió kikapcsolása."); rádió.stopListening (); String stringMessage (kapottMessage); lcd.clear (); késés (1000); lcd.print (stringMessage); }
Töltse fel a végén megadott teljes kódot az Arduino UNO-ra, és várja meg az üzenet fogadását.
Ez befejezi a teljes oktatóanyagot egy üzenet küldéséről a Raspberry Pi & nRf24l01 használatával és az Arduino UNO & nRF24l01 használatával történő fogadásáról. Az üzenet kinyomtatásra kerül a 16x2 LCD-re. A pipacímek nagyon fontosak mind az Arduino UNO-ban, mind a Raspberry Pi-ben. Ha bármilyen nehézségbe ütközik a projekt végrehajtása során, kérjük, tegye meg észrevételeit alább, vagy keresse fel a fórumot a részletesebb megbeszéléshez.
Ellenőrizze az alábbi bemutató videót is.