- Az nRF24L01 RF modul megismerése
- Az nRF24L01 összekapcsolása az Arduino-val
- Vevőoldal: Arduino Uno nRF24L01 modulcsatlakozások
- Adóoldal: Arduino Nano nRF24L01 modul Csatlakozások
- Az nRF24L01 + vezeték nélküli adó-vevő modul használata
- Az nRF24L01 programozása az Arduino számára
- A szervomotor vezérlése az nRF24L01 segítségével vezeték nélkül
Míg a tárgyak internete (IoT), az Ipar 4.0, a gép közötti kommunikáció stb. Egyre népszerűbbé válik, a vezeték nélküli kommunikáció igénye egyre inkább felmerül, és egyre több gép / eszköz beszél egymással a felhőben. 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 ESP43 Wi-Fi modulok, a 433MHz RF modulok, a Lora, az nRF stb., És a médium kiválasztása attól függ, hogy milyen típusú alkalmazásban használják.
Az egyik legnépszerűbb 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 akár 100 méteres távolságot is képesek továbbítani és fogadni közöttük. Érdekes igaz !! Tehát ebben az oktatóanyagban többet megtudhatunk ezekről az nRF24l01 modulokról, és arról, hogyan lehet összekapcsolni egy mikrokontroller platformmal, például az Arduino-val. Ezen modul használata során megosztunk néhány megoldást a gyakran előforduló problémákra.
Az nRF24L01 RF modul megismerése
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.
Az nRF24L01 összekapcsolása az Arduino-val
Ebben az oktatóanyagban megtanuljuk, hogyan kell összekapcsolni az nRF24L01-t az Arduino- val az egyik Arduino-hoz kapcsolt szervomotor vezérlésével a másik Arduino potenciométerének változtatásával. Az egyszerűség kedvéért az egyik nRF24L01 modult használtuk adóként, a másikat pedig vevőként, de mindegyik modul külön programozható adatok küldésére és fogadására.
Az nRF24L01 modul és az Arduino összekapcsolására szolgáló kapcsolási rajz az alábbiakban látható. A változatosság kedvéért az UNO-t használtam a vevő oldalon, a Nano-t pedig az adó oldalán. De a kapcsolat logikája ugyanaz marad más Arduino táblák esetében, mint a mini, a mega is.
Vevőoldal: Arduino Uno nRF24L01 modulcsatlakozások
Mint korábban említettük, az nRF24L01 az SPI protokoll segítségével kommunikál. Az Arduino Nano és az UNO-n a 11, 12 és 13 érintkezőket használják az SPI kommunikációhoz. Ezért összekapcsoljuk a MOSI, a MISO és az SCK érintkezőket az nRF-ből a 11, 12 és 13 csapokkal. A CE és CS csapok a felhasználó által konfigurálhatók, itt a 7-es és a 8-as csapokat használtam, de a program megváltoztatásával bármelyik PIN-kód használható. Az nRF modult az Arduino 3,3 V-os tűje táplálja, amely a legtöbb esetben működni fog. Ha nem, akkor külön tápegységet lehet kipróbálni. Az nRF összekapcsolása mellett egy szervomotort is csatlakoztattam a 7-es tűhöz, és az Arduino 5 V-os tűjén keresztül tápláltam. Hasonlóképpen az adó áramköre az alábbiakban látható.
Adóoldal: Arduino Nano nRF24L01 modul Csatlakozások
Az adó csatlakozásai is megegyeznek, emellett egy potenciométert használtam, amely az Arduino 5 V-os földelő tűjére volt csatlakoztatva. A kimeneti analóg feszültség, amely 0 és 5 V között változik, a Nano A7 tűjéhez csatlakozik. Mindkét kártyát az USB porton keresztül táplálják.
Az nRF24L01 + vezeték nélküli adó-vevő modul használata
Annak érdekében azonban, hogy az nRF24L01 zajmentesen működjön, érdemes a következő dolgokat figyelembe venni. Sokáig dolgoztam ezen az nRF24L01 + -on, és megtanultam a következő pontokat, amelyek segíthetnek abban, hogy a falnak ütközzön. Ezeket akkor lehet kipróbálni, amikor a modulok nem a szokásos módon működtek.
1. A legtöbb nRF24L01 + modul hamis. Az Ebay-en és az Amazon-on található legolcsóbbak a legrosszabbak (Ne aggódj, kevés módosítással működtethetjük őket)
2. A fő probléma az áramellátás, nem pedig a kódja. Az online kódok többsége megfelelően fog működni, nekem is van egy működő kódom, amelyet személyesen teszteltem. Mondja meg, ha szüksége van rájuk.
3. Figyeljen, mert az NRF24L01 + néven nyomtatott modulok valójában Si24Ri (igen, kínai termékek).
4. A klón és a hamis modulok több energiát fognak fogyasztani, ezért ne az nRF24L01 + adatlap alapján fejlessze a főáramkört, mert a Si24Ri nagy áramfogyasztással rendelkezik, körülbelül 250 mA-vel.
5. Óvakodjon a feszültség hullámaitól és az áramfeszültségektől, ezek a modulok nagyon érzékenyek és könnyen kiéghetnek. (;-(eddig 2 modult sütött fel)
6. Néhány kondenzátor (10uF és 0,1uF) hozzáadása a modul Vcc-jéhez és Gnd-jéhez segít abban, hogy az ellátás tiszta legyen, és ez a legtöbb modul esetében működik.
Mégis, ha problémái vannak, jelentse a megjegyzéseket, vagy olvassa el ezt, vagy tegye fel kérdéseit a fórumon.
Ellenőrizze a csevegőszoba létrehozásának átfogó projektjét is az nRF24L01 segítségével.
Az nRF24L01 programozása az Arduino számára
Nagyon egyszerű volt használni ezeket a modulokat az Arduino-val, köszönhetően a könnyen elérhető könyvtárnak, amelyet a maniacbug készített a GitHubon. Kattintson a linkre a könyvtár ZIP mappaként való letöltéséhez, és adja hozzá az Arduino IDE-hez a Vázlat -> Könyvtár belefoglalása ->.ZIP könyvtár hozzáadása opcióval. A könyvtár hozzáadása után elkezdhetjük a projekt programozását. Két programot kell írnunk, az egyik az adó oldalra, a másik pedig a vevő oldalra. Azonban, amint azt korábban elmondtam, minden modul működhet mind adóként, mind vevőként. Mindkét program az oldal végén található, az adó kódban a vevő opciót kommentálják, a vevő programban pedig az adó kódot. Akkor használhatja, ha olyan projektet próbál, amelyben a modulnak mindkettőként kell működnie. A program működését az alábbiakban ismertetjük.
Mint minden program, úgy a fejlécfájlokat is kezdjük. Mivel az nRF SPI protokollt használ, belefoglaltuk az SPI fejlécet és a könyvtárat, amelyet éppen letöltöttünk. A szervo könyvtár a szervomotor vezérlésére szolgál.
#include
A következő sor az a fontos sor, ahol a CE és CS csapokról oktatjuk a könyvtárat. Kapcsolási rajzunkban a CE-t a 7-es és a CS-t a 8-as csaphoz csatlakoztattuk, így a vonalat úgy állítottuk be
RF24 myRadio (7, 8);
Az RF könyvtárhoz társított összes változót összetett változó szerkezetként kell deklarálni. Ebben a programban az msg változó használható adatok küldésére és fogadására az RF modulból.
struct csomag { int msg; }; typedef struct csomag Csomag; Csomagadatok;
Minden RF modulnak egyedi címe van, amely segítségével adatokat küldhet a megfelelő eszközre. Mivel itt csak egy párunk van, a címet nullára állítjuk mind az adóban, mind a vevőben, de ha több modulja van, akkor az egyedi 6 számjegyű karakterláncra állíthatja be az azonosítót.
bájtcímek = {"0"};
Ezután a void beállítási funkción belül inicializáljuk az RF modult, és beállítjuk, hogy működjön a zajmentes 115 sávval, és beállítjuk a modult úgy is, hogy minimális energiafogyasztási üzemmódban működjön, minimum 250 Kbps sebességgel.
void setup () { Soros.kezdés (9600); myRadio.begin (); myRadio.setChannel (115); // 115 sáv feletti WIFI jelek myRadio.setPALevel (RF24_PA_MIN); // MIN teljesítmény alacsony düh myRadio.setDataRate (RF24_250KBPS); // Minimális sebesség myservo.attach (6); Serial.print ("Beállítás inicializálva"); késés (500); }
void WriteData () függvény írja a neki átadott adatokat. Mint korábban elmondtuk, az nRF-nek 6 különböző csöve van, amelyekre adatokat olvashatunk vagy írhatunk, itt az adatok írásához 0xF0F0F0F066-ot használtunk címként. A vevő oldalon ugyanazt a címet kell használnunk a ReadData () függvényben a beírt adatok fogadásához.
void WriteData () { myRadio.stopListening (); // Állítsa le a vételt, és indítsa el a myRadio.openWritingPipe (0xF0F0F0F066) átvitelt; // Adatokat küld a 40 bites címre myRadio.write (& data, sizeof (data)); késés (300); }
void WriteData () függvény beolvassa az adatokat és egy változóba helyezi. Ismét 6 különböző csőből, amelyek segítségével itt adatokat olvashatunk vagy írhatunk, a 0xF0F0F0F0AA-t használtuk címként az adatok olvasásához. Ez azt jelenti, hogy a másik modul adója írt valamit erre a címre, ezért ugyanarról olvasjuk.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Melyik pipát kell olvasni, 40 bites cím myRadio.startListening (); // Állítsa le az átírást és indítsa el a Reveicing if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Soros.println (adat.szöveg); } }
Ezektől a soroktól eltekintve a program többi sora a POT beolvasására és a térképfunkcióval 0-ról 180-ra konvertálására szolgál, és elküldi a vevő modulnak, ahol ennek megfelelően vezéreljük a szervót. Nem magyaráztam el őket soronként, mivel ezt már a Servo Interfacing oktatóanyagunkban megtudtuk.
A szervomotor vezérlése az nRF24L01 segítségével vezeték nélkül
Miután elkészült a programmal, töltse fel az adó és vevő kódot (lásd alább) a megfelelő Arduino táblákra, és töltse fel őket USB porttal. Elindíthatja mindkét tábla soros monitorját, hogy ellenőrizze, milyen értéket továbbítanak és mit fogadnak. Ha minden a várt módon működik, amikor elfordítja a POT gombot az adó oldalán, akkor a másik oldalon lévő szervónak is ennek megfelelően kell fordulnia.
A projekt teljes működését az alábbi videó szemlélteti. Teljesen normális, hogy ezek a modulok nem működnek az első próbálkozáskor. Ha bármilyen problémába ütközött, ellenőrizze újra a kódot és a vezetékeket, és próbálja ki a fenti hibaelhárítási irányelveket. Ha semmi sem működik, tedd fel a problémádat a fórumokon vagy a megjegyzés részben, és megpróbálom megoldani őket.