- NRF24L01 RF-moduuli
- Piirikaavio
- Raspberry Pi: n ohjelmointi lähettämään viesti käyttämällä nRF24l01
- Arduino UNO: n ohjelmointi vastaanottamaan viesti käyttämällä nRF24l01
Suunnittelijat käyttävät monia langattomia viestintäjärjestelmiä, kuten Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi-moduulit, 433 MHz RF-moduulit, Lora, nRF jne. Ja median valinta riippuu sovellustyypistä, jota sitä käytetään. Kaiken kaikkiaan yksi suosituista 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 signaaleja jopa 100 metrin etäisyydelle niiden välillä. Aikaisemmin käytimme nRF24L01: tä Arduinon kanssa servomoottorin ohjaamiseen ja chat-huoneen luomiseen.
Tässä käytämme nRF24L01 - 2,4 GHz: n RF-lähetin-vastaanotinmoduulia Arduino UNO: n ja Raspberry Pi: n kanssa langattoman yhteyden luomiseksi niiden välille. Raspberry pi toimii lähettimenä ja Arduino Uno kuuntelee Raspberry Pi: tä ja tulostaa Raspberry Pi: n lähettämän viestin nRF24L01: n avulla 16x2 LCD: lle. nRF24L01: ssä on myös sisäänrakennetut BLE-ominaisuudet ja se voi myös kommunikoida langattomasti BLE: n avulla.
Opetusohjelma on jaettu kahteen osaan. Ensimmäinen osa sisältää nRF24L01: n rajapinnan Arduinon kanssa toimimaan vastaanottimena ja toinen osa sisältää nRF24L01: n rajapinnan Raspberry Pi: n kanssa lähettimenä. Molempien osien täydellinen koodi ja toimiva video liitetään tämän opetusohjelman loppuun.
NRF24L01 RF-moduuli
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 käytön 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.
Piirikaavio
nRF24L01 Arduinon kanssa:
Piirikaavio nRF24L01: n liittämiseksi Arduinoon on helppoa eikä siinä ole paljon komponentteja. NRF24L01 on yhdistetty SPI-liitäntä ja 16x2 LCD on liitettynä I2C protokolla, joka käyttää vain kaksi johdinta.
nRF24L01 Vadelma Pi:
Piirikaavio nRF24L01: n yhdistämiseksi Raspberry Pi: n kanssa on myös hyvin yksinkertainen ja vain SPI-liitäntää käytetään Raspberry Pi: n ja nRF24l01: n liittämiseen.
Raspberry Pi: n ohjelmointi lähettämään viesti käyttämällä nRF24l01
Raspberry Pi -ohjelmointi ohjelmoidaan Python3: lla. Voit myös käyttää C / C ++: ta Arduinona. Mutta pythonissa on jo käytettävissä nRF24l01-kirjasto, joka voidaan ladata github-sivulta. Huomaa, että python-ohjelman ja kirjaston tulisi olla samassa kansiossa, muuten python-ohjelma ei löydä kirjastoa. Kun olet ladannut kirjaston, pura vain ja tee kansio, johon kaikki ohjelmat ja kirjastotiedostot tallennetaan. Kun kirjaston asennus on valmis, aloita ohjelman kirjoittaminen. Ohjelman alku sisällyttämällä kirjastojen, joita käytetään koodia tuonti GPIO kirjaston saatavuuden Vadelma Pi GPIOs ja tuonti aika ajankäyttöön liittyvien toimintojen käyttämistä varten. Jos olet uusi Raspberry Pi: ssä, palaa sitten aloittamaan Raspberry pi.
tuonti RPi.GPIO kuin GPIO tuonti ajan tuonti spidev alkaen lib_nrf24 tuonti NRF24
Aseta GPIO-tila kohdassa " Broadcom SOC channel". Tämä tarkoittaa, että viittaat nastoihin "Broadcom SOC channel" -numerolla, nämä ovat numeroita "GPIO": n jälkeen (esim. GPIO01, GPIO02…). Nämä eivät ole hallituksen numeroita.
GPIO.setmode (GPIO.BCM)
Seuraavaksi asetamme sen putken osoitteen. Tämä osoite on tärkeä kommunikoida Arduino-vastaanottimen kanssa. Osoite on hex-koodi.
putket =,]
Aloita radio käyttämällä GPIO08: ta CE: nä ja GPIO25: ää CSN-nastoina.
radio.begin (0, 25)
Aseta hyötykuorman kooksi 32 bittiä, kanavaosoitteeksi 76, tiedonsiirtonopeudeksi 1 Mbps ja tehotasoksi vähintään.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Aloita tietojen kirjoittaminen avaamalla putket ja tulosta nRF24l01: n perustiedot.
radio.openWritingPipe (pipe) radio.printDetails ()
Valmista viesti merkkijonomuodossa. Tämä viesti lähetetään Arduino UNO: lle.
sendMessage = list ("Hi..Arduino UNO"), kun taas len (sendMessage) <32: sendMessage.append (0)
Aloita kirjoittaminen radiolle ja jatka kirjoittamista koko merkkijonolle, kunnes radio on käytettävissä. Yhdistä sen kanssa muistiin aika ja tulosta virheenkorjauslausunto viestin toimituksesta.
kun taas True: start = time.time () radio.write (sendMessage) print ("Lähetetty viesti: {}". format (sendMessage)) lähetä radio.startListening ()
Jos merkkijono on valmis ja putki on suljettu, tulosta aikakatkaisun virheenkorjausviesti.
mutta ei radio.available (0): time.sleep (1/100) jos time.time () - start> 2: print ("aikakatkaistiin.") # tulostusvirheviestin jos radiossa irti tai se ei toimi enää riko
Lopeta radion kuuntelu, sulje yhteys ja käynnistä yhteys uudelleen 3 sekunnin kuluttua uuden viestin lähettämiseksi.
radio.stopKuuntelu () # sulje radioaika. lepotila (3) # antaa 3 sekunnin viiveen
Vadelma-ohjelma on helppo ymmärtää, jos tiedät pythonin perusteet. Täydellinen Python-ohjelma annetaan opetusohjelman lopussa.
Python-ohjelman suorittaminen Raspberry Pi: ssä:
Ohjelman suorittaminen on erittäin helppoa seuraavien vaiheiden jälkeen:
- Tallenna Python-ohjelma- ja kirjastotiedostot samaan kansioon.
- Lähettäjän ohjelmatiedostonimi on nrfsend.py ja kaikki tiedostot ovat samassa kansiossa
- Siirry Vadelma Pi: n komentoterminaaliin. Ja etsi python-ohjelmatiedosto käyttämällä "cd" -komentoa.
- Avaa sitten kansio ja kirjoita komento " sudo python3 your_program.py " ja paina Enter. Näet nRf24: n perustiedot ja radio alkaa lähettää viestejä 3 sekunnin välein. Viestien virheenkorjaus näkyy, kun lähetys on tehty ja kaikki merkit lähetetty.
Nyt näemme saman ohjelman kuin vastaanotin Arduino UNO: ssa.
Arduino UNO: n ohjelmointi vastaanottamaan viesti käyttämällä nRF24l01
Arduino UNO -ohjelmointi on samanlainen kuin Vadelma Pi. Seuraamme samanlaisia menetelmiä, mutta eri ohjelmointikielellä ja vaiheilla. Vaiheet sisältävät nRF24101: n lukuosan. Arduinon nRF24l01-kirjasto voidaan ladata github-sivulta. Aloita sisällyttämällä tarvittavat kirjastot. Käytämme 16x2 LCD -näyttöä I2C Shield -sovelluksella, joten sisällytä Wire.h- kirjasto ja myös nRF24l01 on liitetty SPI: hen, joten sisällytä SPI-kirjasto.
#sisältää
Mukana RF24 ja LCD-kirjasto, jotta pääset käsiksi RF24- ja LCD-toimintoihin.
#sisältää
I2C: n LCD-osoite on 27 ja se on 16x2 LCD, joten kirjoita tämä toimintoon.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 on kytketty tavallisilla SPI-nastoilla yhdessä CE-nastan 9 ja CSN-napan 10 kanssa.
RF24-radio (9, 10);
Käynnistä radio, aseta tehotaso ja aseta kanavaksi 76. Aseta myös putken osoite sama kuin Raspberry Pi ja avaa putki luettavaksi.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t -putki = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, putki);
Aloita I2C-tiedonsiirto ja alusta LCD-näyttö.
Wire.begin (); lcd.begin (); lcd.koti (); lcd.print ("Valmis vastaanottamaan");
Aloita saapuvien viestien radion kuuntelu ja aseta viestin pituudeksi 32 tavua.
radio.startKuuntelu (); merkki vastaanotettuMessage = {0}
Jos radio on liitetty, aloita viestin lukeminen ja tallenna se. Tulosta viesti sarjamonitorille ja tulosta myös näytölle, kunnes seuraava viesti saapuu. Pysäytä radio kuuntelemaan ja yritä uudelleen jonkin ajan kuluttua. Tässä se on 10 mikrosekuntia.
if (radio.available ()) { radio.read (vastaanotettuMessage, sizeof (vastaanotettuMessage)); Serial.println (vastaanotettuMessage); Serial.println ("Radion sammuttaminen."); radio.stopKuuntelu (); Merkkijono stringMessage (vastaanotettuMessage); lcd.clear (); viive (1000); lcd.print (stringMessage); }
Lataa lopussa annettu täydellinen koodi Arduino UNO: hon ja odota, että viesti vastaanotetaan.
Tämä viimeistelee koko opetusohjelman viestin lähettämisestä Raspberry Pi & nRf24l01 -palvelun avulla ja sen vastaanottamisen Arduino UNO & nRF24l01 -palvelulla. Viesti tulostetaan 16x2 nestekidenäyttöön. Putkiosoitteet ovat erittäin tärkeitä sekä Arduino UNO: ssa että Raspberry Pi: ssä. Jos kohtaat vaikeuksia tämän projektin tekemisessä, kommentoi alla tai pyydä foorumia tarkempaa keskustelua varten.
Katso myös alla oleva esittelyvideo.