- Modul RF nRF24L01
- Rajah Litar
- Memprogramkan Raspberry Pi untuk Menghantar Mesej menggunakan nRF24l01
- Memprogram Arduino UNO untuk Menerima Mesej menggunakan nRF24l01
Pereka menggunakan banyak sistem komunikasi tanpa wayar seperti Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF dll. Dan pemilihan medium bergantung pada jenis aplikasi yang digunakan. Antaranya semua, satu medium wayarles yang popular untuk komunikasi rangkaian tempatan ialah nRF24L01. Modul ini beroperasi pada 2.4GHz (jalur ISM) dengan kecepatan baud dari 250Kbps hingga 2Mbps yang sah di banyak negara dan dapat digunakan dalam aplikasi industri dan perubatan. Ia juga mendakwa bahawa dengan antena yang tepat modul ini dapat menghantar dan menerima isyarat sehingga jarak 100 meter di antara mereka. Kami sebelum ini menggunakan nRF24L01 dengan Arduino untuk mengawal motor servo dan membuat Ruang Sembang.
Di sini kita akan menggunakan modul RF Transceiver nRF24L01 - 2.4GHz dengan Arduino UNO dan Raspberry Pi untuk mewujudkan komunikasi tanpa wayar di antara mereka. Raspberry pi akan bertindak sebagai pemancar dan Arduino Uno akan mendengar Raspberry Pi dan mencetak mesej yang dihantar oleh Raspberry Pi menggunakan nRF24L01 pada LCD 16x2. nRF24L01 juga mempunyai keupayaan BLE yang terpadu dan ia juga dapat berkomunikasi tanpa wayar menggunakan BLE.
Tutorial terbahagi kepada dua bahagian. Bahagian pertama akan merangkumi antara muka nRF24L01 dengan Arduino untuk bertindak sebagai Penerima dan bahagian kedua akan merangkumi antara muka nRF24L01 dengan Raspberry Pi untuk bertindak sebagai Pemancar. Kod lengkap untuk kedua-dua bahagian dengan video yang berfungsi akan dilampirkan pada akhir tutorial ini.
Modul RF nRF24L01
The modul nRF24L01 adalah transceiver modul, bermakna setiap modul boleh kedua-dua menghantar dan menerima data tetapi kerana mereka adalah separuh dupleks mereka sama ada boleh menghantar atau menerima data pada satu masa. Modul ini mempunyai IC nRF24L01 generik dari separa konduktor Nordik yang bertanggungjawab untuk penghantaran dan penerimaan data. IC berkomunikasi menggunakan protokol SPI dan dengan itu dapat dihubungkan dengan mudah dengan mikrokontroler mana pun. Ia menjadi lebih mudah dengan Arduino kerana perpustakaan sudah tersedia. The pinouts modul nRF24L01 standard ditunjukkan di bawah
Modul ini mempunyai voltan operasi dari 1.9V hingga 3.6V (biasanya 3.3V) dan menggunakan arus yang sangat kurang hanya 12mA semasa operasi biasa yang menjadikannya bateri cekap dan oleh itu bahkan boleh berjalan pada sel duit syiling. Walaupun voltan operasi 3.3V kebanyakan pin bertoleransi 5V dan oleh itu dapat dihubungkan secara langsung dengan mikrokontroler 5V seperti Arduino. Kelebihan lain menggunakan modul ini ialah, setiap modul mempunyai 6 Pipeline. Maksudnya, setiap modul dapat berkomunikasi dengan 6 modul lain untuk menghantar atau menerima data. Ini menjadikan modul sesuai untuk membuat rangkaian bintang atau jaringan dalam aplikasi IoT. Juga mereka mempunyai rangkaian alamat 125 ID yang unik, oleh itu di kawasan tertutup kita dapat menggunakan 125 modul ini tanpa mengganggu satu sama lain.
Rajah Litar
nRF24L01 dengan Arduino:
Gambarajah litar untuk menghubungkan nRF24L01 dengan Arduino adalah mudah dan tidak mempunyai banyak komponen. The nRF24l01 akan dihubungkan oleh antara muka SPI dan LCD 16x2 itu muka dengan protokol I2C yang hanya menggunakan dua wayar.
nRF24L01 dengan Raspberry Pi:
Gambarajah litar untuk menghubungkan nRF24L01 dengan Raspberry Pi juga sangat mudah dan hanya antara muka SPI yang digunakan untuk menyambungkan Raspberry Pi dan nRF24l01.
Memprogramkan Raspberry Pi untuk Menghantar Mesej menggunakan nRF24l01
Pengaturcaraan Raspberry Pi akan dilakukan menggunakan Python3. Anda juga boleh menggunakan C / C ++ sebagai Arduino. Tetapi sudah ada perpustakaan yang tersedia untuk nRF24l01 di python yang boleh dimuat turun dari halaman github. Perhatikan bahawa program python dan perpustakaan harus berada di folder yang sama atau program python tidak dapat mencari perpustakaan. Setelah memuat turun perpustakaan, hanya ekstrak dan buat folder di mana semua program dan fail perpustakaan akan disimpan. Apabila pemasangan perpustakaan selesai, mulailah menulis program. Program ini dimulakan dengan memasukkan perpustakaan yang akan digunakan dalam kod seperti perpustakaan GPIO import untuk mengakses GPIO Raspberry Pi dan masa import untuk mengakses fungsi yang berkaitan dengan masa. Sekiranya anda baru menggunakan Raspberry Pi, mulailah kembali dengan Raspberry pi.
import RPi.GPIO sebagai GPIO import time spidev dari lib_nrf24 import NRF24
Tetapkan mod GPIO di " Saluran Broadcom SOC". Ini bermaksud bahawa anda merujuk pada pin dengan nombor "Broadcom SOC channel", ini adalah nombor selepas "GPIO" (misalnya GPIO01, GPIO02…). Ini bukan Nombor Papan.
GPIO.setmode (GPIO.BCM)
Selanjutnya kita akan menetapkannya alamat paip. Alamat ini penting untuk berkomunikasi dengan penerima Arduino. Alamatnya akan berada dalam kod hex.
paip =,]
Mulakan radio menggunakan GPIO08 sebagai CE dan GPIO25 sebagai pin CSN.
radio.begin (0, 25)
Tetapkan ukuran muatan sebagai 32 bit, alamat saluran 76, kadar data 1 mbps dan tahap kuasa minimum.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Buka paip untuk mula menulis data dan mencetak butiran asas nRF24l01.
radio.openWritingPipe (paip) radio.printDetail ()
Sediakan mesej dalam bentuk rentetan. Mesej ini akan dihantar ke Arduino UNO.
sendMessage = senarai ("Hai..Arduino UNO") sementara len (sendMessage) <32: sendMessage.append (0)
Mula menulis ke radio dan terus menulis rentetan lengkap sehingga radio tersedia. Bersamaan dengan itu, perhatikan waktu dan cetak penyataan debug penyampaian mesej.
sementara True: start = time.time () radio.write (sendMessage) mencetak ("Menghantar mesej: {}". format (sendMessage)) hantar radio.startListening ()
Sekiranya tali selesai dan paip ditutup maka cetaklah mesej debug yang telah habis.
sementara tidak radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timeed out.") # mesej ralat cetak jika radio terputus atau tidak berfungsi lagi putus
Berhenti mendengar radio dan tutup komunikasi dan mulakan semula komunikasi selepas 3 saat untuk menghantar mesej lain.
radio.stopListening () # tutup waktu radio. tidur (3) # berikan kelewatan selama 3 saat
Program Raspberry mudah difahami jika anda mengetahui asas-asas python. Program Python lengkap diberikan pada akhir tutorial.
Menjalankan Program Python di Raspberry Pi:
Menjalankan program sangat mudah setelah mengikuti langkah-langkah berikut:
- Simpan fail Program dan Perpustakaan Python dalam folder yang sama.
- Nama fail program saya untuk Sender adalah nrfsend.py dan juga setiap fail berada dalam folder yang sama
- Pergi ke Terminal Perintah Raspberry Pi. Dan cari fail program python dengan menggunakan perintah "cd".
- Kemudian buka folder dan tulis perintah " sudo python3 your_program.py " dan tekan enter. Anda akan dapat melihat perincian asas nRf24 dan radio akan mula menghantar mesej selepas setiap 3 saat. Debug mesej akan dipaparkan setelah pengiriman selesai dengan semua watak dihantar.
Sekarang kita akan melihat program yang sama dengan penerima di Arduino UNO.
Memprogram Arduino UNO untuk Menerima Mesej menggunakan nRF24l01
Memprogram Arduino UNO adalah serupa dengan memprogram Raspberry Pi. Kami akan mengikuti kaedah yang serupa tetapi dengan bahasa dan langkah pengaturcaraan yang berbeza. Langkah-langkahnya akan merangkumi bahagian bacaan nRF24l01. Perpustakaan untuk nRF24l01 untuk Arduino boleh dimuat turun dari halaman github. Mulakan dengan memasukkan perpustakaan yang diperlukan. Kami menggunakan 16x2 LCD menggunakan I2C Shield jadi sertakan perpustakaan Wire.h dan juga nRF24l01 dihubungkan dengan SPI jadi sertakan perpustakaan SPI.
#sertakan
Sertakan pustaka RF24 dan LCD untuk mengakses fungsi RF24 dan LCD.
#sertakan
Alamat LCD untuk I2C adalah 27 dan ia adalah LCD 16x2 jadi tuliskan ini ke dalam fungsi.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 dihubungkan dengan pin SPI standard bersama dengan CE di pin 9 dan CSN di pin 10.
Radio RF24 (9, 10);
Mulakan radio, tetapkan tahap kuasa dan tetapkan saluran ke 76. Tetapkan juga alamat paip yang sama dengan Raspberry Pi dan buka paip untuk dibaca.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t paip = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, paip);
Mulakan komunikasi I2C dan mulakan paparan LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Sedia Menerima");
Mula mendengar radio untuk mesej masuk dan tetapkan panjang mesej sebagai 32 bait.
radio.startListening (); char diterimaMessage = {0}
Sekiranya radio terpasang, mulailah membaca mesej dan simpannya. Cetak mesej ke monitor bersiri dan juga cetak ke paparan sehingga mesej seterusnya tiba. Hentikan radio untuk mendengar dan mencuba semula selepas beberapa waktu. Inilah 10 mikro saat.
jika (radio.available ()) { radio.read (diterimaMessage, sizeof (diterimaMessage)); Serial.println (diterimaMessage); Serial.println ("Mematikan radio."); radio.stopListening (); String stringMessage (diterimaMessage); lcd.clear (); kelewatan (1000); lcd.print (stringMessage); }
Muat naik kod lengkap yang diberikan pada akhir Arduino UNO dan tunggu sehingga mesej diterima.
Ini menyelesaikan tutorial lengkap untuk menghantar mesej menggunakan Raspberry Pi & nRf24l01 dan menerimanya menggunakan Arduino UNO & nRF24l01. Mesej akan dicetak ke LCD 16x2. Alamat paip sangat penting dalam Arduino UNO dan Raspberry Pi. Sekiranya anda menghadapi kesukaran semasa melakukan projek ini, sila beri komen di bawah ini atau hubungi forum untuk perbincangan yang lebih terperinci.
Lihat juga video demonstrasi di bawah.