- Ang nRF24L01 RF Module
- Diagram ng Circuit
- Pagprograma ng Raspberry Pi upang Magpadala ng Mensahe gamit ang nRF24l01
- Programming Arduino UNO upang Makatanggap ng Mensahe gamit ang nRF24l01
Gumagamit ang mga taga-disenyo ng maraming mga wireless system ng komunikasyon tulad ng Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF atbp. At ang pagpili ng daluyan ay nakasalalay sa uri ng aplikasyon na ginagamit nito. Kabilang sa lahat, isang tanyag na wireless medium para sa komunikasyon sa lokal na network ay ang nRF24L01. Ang mga modyul na ito ay nagpapatakbo sa 2.4GHz (ISM band) na may baud rate mula 250Kbps hanggang 2Mbps na ligal sa maraming mga bansa at maaaring magamit sa mga pang-industriya at medikal na aplikasyon. Inaangkin din na sa tamang mga antena ang mga modyul na ito ay maaaring magpadala at makatanggap ng mga signal hanggang sa distansya na 100 metro sa pagitan nila. Ginamit namin dati ang nRF24L01 kasama ang Arduino upang makontrol ang servo motor at lumikha ng isang Chat Room.
Dito ay gagamitin namin ang nRF24L01 - 2.4GHz RF Transceiver module na may Arduino UNO at Raspberry Pi upang maitaguyod ang isang wireless na komunikasyon sa pagitan nila. Ang Raspberry pi ay kikilos bilang isang transmitter at ang Arduino Uno ay makikinig sa Raspberry Pi at i-print ang mensahe na ipinadala ni Raspberry Pi gamit ang nRF24L01 sa isang 16x2 LCD. Ang nRF24L01 ay mayroon ding inbuilt na mga kakayahan ng BLE at maaari din itong makipag-usap nang wireless gamit ang BLE.
Ang tutorial ay nahahati sa dalawang seksyon. Ang unang seksyon ay isasama ang interfacing ng nRF24L01 kasama ang Arduino upang kumilos bilang Tagatanggap at ang pangalawang seksyon ay isasama ang interfacing ng nRF24L01 sa Raspberry Pi upang kumilos bilang Transmitter. Ang kumpletong code para sa pareho ng seksyon na may gumaganang video ay ikakabit sa pagtatapos ng tutorial na ito.
Ang nRF24L01 RF Module
Ang nRF24L01 modules ay radyo at pagsasahipapawid module, ibig sabihin ang bawat module ay maaaring parehong magpadala at tumanggap ng data ngunit dahil ang mga ito ay half-duplex maaari silang alinman sa magpadala o tumanggap ng data sa isang pagkakataon. Ang modyul ay mayroong pangkaraniwang nRF24L01 IC mula sa Nordic semi-conductors na responsable para sa paghahatid at pagtanggap ng data. Ang IC ay nakikipag-usap gamit ang SPI protocol at samakatuwid ay madaling ma-interfaced sa anumang mga microcontroller. Napakadali nito sa Arduino dahil ang mga aklatan ay madaling magagamit. Ang mga pinout ng isang karaniwang module ng nRF24L01 ay ipinapakita sa ibaba
Ang module ay nasa operating boltahe mula sa 1.9V hanggang 3.6V (karaniwang 3.3V) at kumakain ng mas kaunting kasalukuyang 12mA lamang sa panahon ng normal na operasyon na ginagawang mabisa ang baterya at kaya't maaari itong tumakbo sa mga cell ng barya. Kahit na ang operating boltahe ay 3.3V ang karamihan sa mga pin ay 5V mapagparaya at samakatuwid ay maaaring direktang interfaced sa 5V microcontrollers tulad ng Arduino. Ang isa pang kalamangan sa paggamit ng mga modyul na ito ay, ang bawat module ay mayroong 6 Pipelines. Ibig sabihin, ang bawat modyul ay maaaring makipag-usap sa 6 iba pang mga module upang makapagpadala o tumanggap ng data. Ginagawa nitong angkop ang module para sa paglikha ng mga network ng star o mesh sa mga aplikasyon ng IoT. Gayundin mayroon silang malawak na saklaw ng address na 125 natatanging mga ID, samakatuwid sa isang saradong lugar maaari naming gamitin ang 125 ng mga modyul na ito nang hindi makagambala sa bawat isa.
Diagram ng Circuit
nRF24L01 kasama ang Arduino:
Ang circuit diagram para sa pagkonekta ng nRF24L01 sa Arduino ay madali at walang maraming mga bahagi. Ang nRF24l01 ay konektado sa pamamagitan ng interface ng SPI at ang 16x2 LCD ay interfaced sa I2C protocol na gumagamit lamang ng dalawang wires.
nRF24L01 kasama ang Raspberry Pi:
Ang circuit diagram para sa pagkonekta ng nRF24L01 sa Raspberry Pi ay napaka-simple din at ang interface na SPI lamang ang ginagamit upang ikonekta ang Raspberry Pi at nRF24l01.
Pagprograma ng Raspberry Pi upang Magpadala ng Mensahe gamit ang nRF24l01
Ang pag-program ng Raspberry Pi ay gagawin gamit ang Python3. Maaari mo ring gamitin ang C / C ++ bilang Arduino. Ngunit mayroon nang magagamit na silid-aklatan para sa nRF24l01 sa sawa na maaaring ma-download mula sa pahina ng github. Tandaan na ang programa ng sawa at ang aklatan ay dapat na nasa parehong folder o ang programang python ay hindi mahanap ang library. Pagkatapos i-download ang library kumuha lamang at gumawa ng isang folder kung saan ang lahat ng mga programa at mga file ng library ay magiging tindahan. Kapag tapos na ang pag-install ng library, simulan lamang ang pagsusulat ng programa. Nagsisimula ang programa sa pagsasama ng mga aklatan na gagamitin sa code tulad ng pag-import ng GPIO library para sa pag-access sa mga Raspberry Pi GPIO at pag- import ng oras para sa pag-access sa mga pagpapaandar na nauugnay sa oras. Kung bago ka sa Raspberry Pi pagkatapos ay bumalik sa pagsisimula sa Raspberry pi.
i-import ang RPi.GPIO bilang GPIO import time import spidev mula sa lib_nrf24 import NRF24
Itakda ang GPIO mode sa " Broadcom SOC channel". Nangangahulugan ito na tumutukoy ka sa mga pin ng numero ng "Broadcom SOC channel", ito ang mga numero pagkatapos ng "GPIO" (para sa hal. GPIO01, GPIO02…). Hindi ito ang Mga Numero ng Lupon.
GPIO.setmode (GPIO.BCM)
Susunod ay i- set up namin ito sa address ng tubo. Ang address na ito ay mahalaga upang makipag-usap sa Arduino na tatanggap. Ang address ay nasa hex code.
mga tubo =,]
Simulan ang radyo gamit ang GPIO08 bilang CE at GPIO25 bilang mga pin ng CSN.
radio.begin (0, 25)
Itakda ang laki ng payload bilang 32 bit, channel address bilang 76, rate ng data ng 1 mbps at antas ng kuryente bilang minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Buksan ang mga tubo upang simulang isulat ang data at mai-print ang pangunahing mga detalye ng nRF24l01.
radio.openWritingPipe (pipes) radio.printDetails ()
Maghanda ng isang mensahe sa form ng string. Ipapadala ang mensaheng ito sa Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") habang si len (sendMessage) <32: sendMessage.append (0)
Simulang magsulat sa radyo at patuloy na isulat ang kumpletong string hanggang sa magagamit ang radyo. Kasabay nito, itala ang oras at mag-print ng isang pahayag ng pag-debug ng paghahatid ng mensahe.
habang True: start = time.time () radio.write (sendMessage) print ("Ipinadala ang mensahe: {}". format (sendMessage)) magpadala ng radio.startListening ()
Kung ang string ay nakumpleto at ang tubo ay sarado pagkatapos ay i-print ang isang mensahe ng pag-debug ng nag-time out.
habang hindi radio.available (0): time.sleep (1/100) kung time.time () - start> 2: print ("Nag-time out.") message # print error kung radio disconnect o hindi gumagana anymore masira
Itigil ang pakikinig sa radyo at isara ang komunikasyon at i-restart ang komunikasyon pagkalipas ng 3 segundo upang magpadala ng isa pang mensahe.
radio.stopListening () # isara ang oras ng radyo. pagtulog (3) # bigyan ng pagkaantala ng 3 segundo
Ang programa ng Raspberry ay simpleng maunawaan kung alam mo ang mga pangunahing kaalaman ng sawa. Ang kumpletong programa ng Python ay ibinibigay sa pagtatapos ng tutorial.
Pagpapatupad ng Python Program sa Raspberry Pi:
Ang pagpapatupad ng programa ay napakadali pagkatapos sundin ang mga hakbang sa ibaba:
- I-save ang Python Program at Library file sa parehong folder.
- Ang pangalan ng file ng aking programa para sa Nagpapadala ay nrfsend.py at bawat file ay nasa parehong folder
- Pumunta sa Command Terminal ng Raspberry Pi. At hanapin ang file ng python program sa pamamagitan ng paggamit ng "cd" na utos.
- Pagkatapos buksan ang folder at isulat ang utos na " sudo python3 your_program.py " at pindutin ang enter. Makikita mo ang pangunahing mga detalye ng nRf24 at magsisimulang ipadala ng radyo ang mga mensahe pagkatapos ng bawat 3 segundo. Ipapakita ang pag-debug ng mensahe pagkatapos ng pagpapadala ay tapos na sa lahat ng mga character na ipinadala.
Ngayon makikita namin ang parehong programa bilang tatanggap sa Arduino UNO.
Programming Arduino UNO upang Makatanggap ng Mensahe gamit ang nRF24l01
Ang pagprograma ng Arduino UNO ay katulad ng pagprograma sa Raspberry Pi. Susundan namin ang mga katulad na pamamaraan ngunit may iba't ibang wika at mga hakbang sa pag-program. Isasama sa mga hakbang ang bahagi ng pagbabasa ng nRF24l01. Ang silid-aklatan para sa nRF24l01 para sa Arduino ay maaaring ma-download mula sa pahina ng github. Magsimula sa pagsasama ng mga kinakailangang aklatan. Gumagamit kami ng 16x2 LCD gamit ang I2C Shield kaya isama ang Wire.h library at ang nRF24l01 ay naka-interfaced sa SPI kaya isama ang SPI library.
# isama
Isama ang RF24 at LCD library para sa pag-access sa mga pagpapaandar ng RF24 at LCD.
# isama
Ang LCD address para sa I2C ay 27 at ito ay isang 16x2 LCD kaya isulat ito sa pagpapaandar.
LiquidCrystal_I2C lcd (0x27, 16, 2);
Ang RF24 ay konektado sa karaniwang mga SPI pin kasama ang CE sa pin 9 at CSN sa pin 10.
Radyo RF24 (9, 10);
Simulan ang radyo, itakda ang antas ng kuryente at itakda ang channel sa 76. Itakda din ang address ng tubo na katulad ng Raspberry Pi at buksan ang tubo upang mabasa.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); Const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, tubo);
Simulan ang komunikasyon ng I2C at ipasimula ang LCD display.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Handa na Makatanggap");
Simulang makinig sa radyo para sa mga papasok na mensahe at itakda ang haba ng mensahe bilang 32 bytes.
radyo.startListening (); natanggap ang charMessage = {0}
Kung ang radio ay nakakabit pagkatapos simulang basahin ang mensahe at i-save ito. I-print ang mensahe sa serial monitor at i-print din sa display hanggang sa dumating ang susunod na mensahe. Itigil ang radyo upang makinig at subukang muli pagkalipas ng ilang agwat. Narito ito ay 10 micro segundo.
kung (radio.available ()) { radio.read (acceptMessage, sizeof (receivedMessage)); Serial.println (natanggapMessage); Serial.println ("Patayin ang radyo."); radio.stopListening (); String stringMessage (natanggapMessage); lcd.clear (); pagkaantala (1000); lcd.print (stringMessage); }
I-upload ang kumpletong code na ibinigay sa dulo sa Arduino UNO at hintaying matanggap ang mensahe.
Tinatapos nito ang kumpletong tutorial sa pagpapadala ng isang mensahe gamit ang Raspberry Pi & nRf24l01 at matanggap ito gamit ang Arduino UNO & nRF24l01. Ang mensahe ay mai-print sa 16x2 LCD. Napakahalaga ng mga address ng tubo sa parehong Arduino UNO at Raspberry Pi. Kung nahaharap ka sa anumang kahirapan habang ginagawa ang proyektong ito pagkatapos mangyaring magkomento sa ibaba o maabot ang forum para sa mas detalyadong talakayan.
Suriin din ang video ng demonstrasyon sa ibaba.