- NRF24L01 RF -moduulin tutustuminen
- NRF24L01: n ja Arduinon liitäntä
- Vastaanottimen puoli: Arduino Uno nRF24L01 -moduuliyhteydet
- Lähettimen puoli: Arduino Nano nRF24L01 -moduulin liitännät
- Työskentely langattoman nRF24L01 + -lähetin-vastaanotinmoduulin kanssa
- NRF24L01: n ohjelmointi Arduinolle
- Servomoottorin ohjaaminen langattomasti nRF24L01: n avulla
Vaikka esineiden internet (IoT), teollisuus 4.0, koneiden välinen viestintä jne. Ovat yhä suositumpia, langattoman viestinnän tarve on tullut vakiintuneeksi, ja yhä useampi kone / laite puhuu keskenään pilvessä. Suunnittelijat käyttävät monia langattomia viestintäjärjestelmiä, kuten Bluetooth Low Energy (BLE 4.0), Zigbee, ESP43 Wi-Fi -moduulit, 433MHz RF-moduulit, Lora, nRF jne., Ja median valinta riippuu sovellustyypistä, jota sitä käytetään.
Yksi suosituimmista langattomista lähiverkkoyhteyksistä on nRF24L01. Nämä moduulit toimivat 2,4 GHz: n (ISM-taajuusalueella) tiedonsiirtonopeudella 250 kbps / 2Mbps, mikä on laillista monissa maissa ja jota voidaan käyttää teollisissa ja lääketieteellisissä sovelluksissa. Väitetään myös, että asianmukaisilla antenneilla nämä moduulit voivat lähettää ja vastaanottaa jopa 100 metrin etäisyyttä niiden välillä. Mielenkiintoista oikein! Joten tässä opetusohjelmassa opimme lisää näistä nRF24l01-moduuleista ja kuinka liittää se mikrokontrolleri-alustaan, kuten Arduino. Jaamme myös joitain ratkaisuja yleisesti kohtaamiin ongelmiin tämän moduulin käytön aikana.
NRF24L01 RF -moduulin tutustuminen
NRF24L01 moduulit ovat lähetinvastaanotinyksikön, tarkoittaa, että jokainen moduuli voi sekä lähettää ja vastaanottaa dataa, mutta koska ne ovat puoli-duplex ne voivat joko lähettää tai vastaanottaa dataa kerrallaan. Moduulissa on pohjoismaisten puolijohteiden yleinen nRF24L01 IC, joka vastaa tiedonsiirrosta ja vastaanottamisesta. IC kommunikoi SPI-protokollan avulla, ja siten se voidaan helposti liittää minkä tahansa mikro-ohjaimen kanssa. Arduinon kanssa se on paljon helpompaa, koska kirjastot ovat helposti saatavilla. Pinouts standardin nRF24L01 moduuli on esitetty alla
Moduulin käyttöjännite on 1,9 V - 3,6 V (tyypillisesti 3,3 V), ja se kuluttaa normaalin toiminnan aikana hyvin vähän vain 12 mA: n virtaa, mikä tekee siitä paristotehokkaan ja voi siten toimia jopa kolikennoilla. Vaikka käyttöjännite on 3,3 V, suurin osa nastoista on 5 V: n suvaitsevaisia, joten ne voidaan liittää suoraan 5 V: n mikro-ohjaimiin, kuten Arduino. Toinen etu näiden moduulien käytöstä on, että jokaisessa moduulissa on 6 putkilinjaa. Jokainen moduuli voi kommunikoida 6 muun moduulin kanssa datan lähettämiseksi tai vastaanottamiseksi. Tämä tekee moduulista sopivan tähti- tai mesh-verkkojen luomiseen IoT-sovelluksissa. Lisäksi niillä on laaja osoitealue, 125 yksilöllistä tunnusta, joten suljetussa tilassa voimme käyttää 125 näistä moduuleista häiritsemättä toisiaan.
NRF24L01: n ja Arduinon liitäntä
Tässä opetusohjelmassa opitaan, miten nRF24L01 voidaan liittää Arduinoon ohjaamalla yhteen Arduinoon liitettyä servomoottoria vaihtelemalla toisen Arduinon potentiometriä. Yksinkertaisuuden vuoksi olemme käyttäneet yhtä nRF24L01-moduulia lähettimenä ja toista vastaanottimena, mutta kukin moduuli voidaan ohjelmoida lähettämään ja vastaanottamaan dataa erikseen.
Piirikaavio nRF24L01-moduulin liittämiseksi Arduinoon on esitetty alla. Vaihtelevuuden vuoksi olen käyttänyt UNO: ta vastaanottimen puolella ja Nanoa lähettimen puolella. Mutta yhteyden logiikka pysyy samana myös muilla Arduino-levyillä, kuten mini, mega.
Vastaanottimen puoli: Arduino Uno nRF24L01 -moduuliyhteydet
Kuten aiemmin mainittiin, nRF24L01 kommunikoi SPI-protokollan avulla. Arduino nanossa ja UNO: ssa nastoja 11, 12 ja 13 käytetään SPI-viestintään. Siksi yhdistämme MOSI-, MISO- ja SCK-nastat nRF: stä vastaavasti nastoihin 11, 12 ja 13. Nastat CE ja CS ovat käyttäjän konfiguroitavissa, olen käyttänyt tappi 7 ja 8 täällä, mutta voit käyttää mitä tahansa nastaa muuttamalla ohjelmaa. NRF-moduuli saa virtansa Arduinon 3,3 V: n nastasta, joka toimii useimmissa tapauksissa. Jos ei, voidaan kokeilla erillistä virtalähdettä. Sen lisäksi, että olen liittänyt nRF: n, olen myös liittänyt servomoottorin nastaan 7 ja syöttänyt sen Arduinon 5 V: n nastan läpi. Vastaavasti lähetinpiiri on esitetty alla.
Lähettimen puoli: Arduino Nano nRF24L01 -moduulin liitännät
Lähettimen liitännät ovat myös samat, lisäksi olen käyttänyt potentiometriä, joka on kytketty Arduinon 5 V: n maadoitustapin yli. Analogialähtöjännite, joka vaihtelee välillä 0-5V, on kytketty Nanon A7-napaan. Molemmat kortit saavat virtansa USB-portin kautta.
Työskentely langattoman nRF24L01 + -lähetin-vastaanotinmoduulin kanssa
Jotta nRF24L01 toimisi moitteettomasti, kannattaa kuitenkin harkita seuraavia asioita. Olen työskennellyt tämän nRF24L01 +: n parissa pitkään ja oppinut seuraavat seikat, jotka voivat auttaa sinua lyömään seinälle. Voit kokeilla näitä, kun moduulit eivät toimineet normaalisti.
1. Suurin osa markkinoilla olevista nRF24L01 + -moduuleista on väärennettyjä. Halvimmat, joita voimme löytää Ebayssa ja Amazonissa, ovat pahin (älä huoli, muutamalla muutoksella voimme saada heidät toimimaan)
2. Suurin ongelma on virtalähde, ei koodisi. Suurin osa online-koodeista toimii oikein, minulla itselläni on toimiva koodi, jonka olen testannut henkilökohtaisesti. Kerro minulle, jos tarvitset niitä.
3. Kiinnitä huomiota, koska moduulit, jotka on painettu nimellä NRF24L01 +, ovat itse asiassa Si24Ri (kyllä kiinalainen tuote).
4. Klooni ja väärennetyt moduulit kuluttavat enemmän virtaa, joten älä kehitä virtapiiriäsi nRF24L01 + -taulukon perusteella, koska Si24Ri: n virrankulutus on noin 250 mA.
5. Varo jännitteen aaltoiluja ja virtapiikkejä, nämä moduulit ovat erittäin herkkiä ja saattavat helposti palaa. (;-(paistanut 2 moduulia toistaiseksi)
6. Parin kondensaattorin (10uF ja 0.1uF) lisääminen moduulin Vcc: n ja Gnd: n yli auttaa tekemään puhtaasta toimituksestasi ja tämä toimii suurimmalle osalle moduuleista.
Silti, jos sinulla on ongelmia, ilmoita kommenttiosasta tai lue tämä läpi tai kysy kysymyksiä foorumillamme.
Tarkista myös perushanke, joka koskee chat-huoneen luomista käyttämällä nRF24L01.
NRF24L01: n ohjelmointi Arduinolle
Näiden moduulien käyttö on ollut erittäin helppoa Arduinon kanssa, johtuen helposti saatavilla olevasta kirjastosta, jonka maniacbug loi GitHubiin. Napsauta linkkiä ladataksesi kirjaston ZIP-kansioksi ja lisääksesi sen Arduino IDE -ohjelmaasi Sketch -> Include Library -> Add.ZIP -kirjasto -vaihtoehdolla. Kun olet lisännyt kirjaston, voimme aloittaa projektin ohjelmoinnin. Meidän on kirjoitettava kaksi ohjelmaa, toinen lähetinpuolelle ja toinen vastaanottopuolelle. Kuten aiemmin sanoin, kukin moduuli voi toimia sekä lähettimenä että vastaanottimena. Molemmat ohjelmat ovat tämän sivun lopussa, lähetinkoodissa vastaanotinvaihtoehto kommentoidaan ja vastaanotinohjelmassa lähetinkoodi kommentoidaan. Voit käyttää sitä, jos yrität projektia, jossa moduulin on toimittava molempina. Ohjelman toiminta selitetään alla.
Kuten kaikki ohjelmat, aloitamme sisällyttämällä otsikkotiedostot. Koska nRF käyttää SPI-protokollaa, olemme sisällyttäneet SPI-otsikon ja myös juuri lataamamme kirjaston. Servokirjastoa käytetään servomoottorin ohjaamiseen.
#sisältää
Seuraava rivi on tärkeä rivi, jossa opastamme kirjastolle CE- ja CS-nastoja. Piirikaaviossamme olemme liittäneet CE nastaan 7 ja CS nastaan 8, joten asetamme linjan
RF24 myRadio (7, 8);
Kaikki RF-kirjastoon liittyvät muuttujat on ilmoitettava yhdistelmämuuttujarakenteina. Tässä ohjelmassa muuttujaa msg käytetään lähettämään ja vastaanottamaan dataa RF-moduulista.
struct-paketti { int msg; }; typedef struct -paketti; Pakettidata;
Jokaisella RF-moduulilla on yksilöllinen osoite, jolla se voi lähettää dataa kyseiseen laitteeseen. Koska meillä on täällä vain yksi pari, asetamme osoitteen nollaksi sekä lähettimessä että vastaanottimessa, mutta jos sinulla on useita moduuleja, voit asettaa tunnuksen mihin tahansa ainutlaatuiseen 6-numeroiseen merkkijonoon.
tavuosoitteet = {"0"};
Seuraava sisällä void setup toiminto me alustaa RF-moduuli ja asetettu työn 115 nauha, joka on vapaa melua ja myös asettaa moduuli työtä vähintään virrankulutuksen tilaan pienellä nopeudella 250Kbps.
void setup () { Sarja.alku (9600); myRadio.begin (); myRadio.setChannel (115); // 115 kaistaa WIFI-signaalien yläpuolella myRadio.setPALevel (RF24_PA_MIN); // MIN teho matala raivo myRadio.setDataRate (RF24_250KBPS); // Miniminopeus myservo.attach (6); Serial.print ("Setup Initialized"); viive (500); }
void WriteData () -funktio kirjoittaa sille välitetyt tiedot. Kuten aiemmin kerrottiin, nRF: llä on 6 erilaista putkea, joille voimme lukea tai kirjoittaa dataa, tässä olemme käyttäneet 0xF0F0F0F066 osoitetta tietojen kirjoittamiseen. Vastaanottopuolella meidän on käytettävä samaa osoitetta ReadData () -toiminnossa kirjoitettujen tietojen vastaanottamiseksi.
void WriteData () { myRadio.stopListening (); // Lopeta vastaanottaminen ja aloita myRadio.openWritingPipe (0xF0F0F0F066) -hallinta; // Lähettää tietoja tältä 40-bittiseltä osoitteelta myRadio.write (& data, sizeof (data)); viive (300); }
void WriteData () -funktio lukee tiedot ja laittaa ne muuttujaan. Jälleen kuudesta eri putkesta, joiden avulla voimme lukea tai kirjoittaa tietoja tähän, olemme käyttäneet 0xF0F0F0F0AA osoitteena tietojen lukemiseen. Tämä tarkoittaa, että toisen moduulin lähetin on kirjoittanut jotain tähän osoitteeseen, ja siksi luemme sen samasta.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Mikä putki on luettava, 40-bittinen Osoite myRadio.startListening (); // Lopeta tiedonsiirto ja aloita uudelleenhinnoittelu, jos (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Näiden rivien lisäksi ohjelman muita rivejä käytetään POT: n lukemiseen ja muuntamiseen 0: sta 180: een karttatoiminnon avulla ja lähettämään se Vastaanotin-moduuliin, jossa ohjaamme servoa vastaavasti. En ole selittänyt heitä rivi riviltä, koska olemme jo oppineet sen Servo Interfacing -oppaassa.
Servomoottorin ohjaaminen langattomasti nRF24L01: n avulla
Kun olet valmis ohjelman kanssa, lähetä lähetin ja vastaanotinkoodi (alla) vastaaville Arduino-levyille ja käynnistä ne USB-portilla. Voit myös käynnistää molempien levyjen sarjavalvonnan tarkistaaksesi, mikä arvo lähetetään ja mitä vastaanotetaan. Jos kaikki toimii odotetusti, kun käännät lähettimen puolella olevaa POT-nuppia, myös toisella puolella olevan servon tulisi kääntyä vastaavasti.
Projektin täydellinen toiminta on esitetty alla olevassa videossa. On aivan normaalia, että näitä moduuleja ei saada toimimaan ensimmäisellä kerralla. Jos sinulla on ongelmia, tarkista koodi ja johdot uudelleen ja kokeile yllä annettuja vianetsintäohjeita. Jos mikään ei toimi, lähetä ongelmasi foorumeille tai kommenttiosioon ja yritän ratkaista ne.