- NRF24L01 RF Modülü
- Devre şeması
- Raspberry Pi'yi nRF24l01 kullanarak Mesaj Göndermek için Programlama
- NRF24l01 kullanarak Arduino UNO'nun Mesaj Alması için Programlama
Tasarımcılar Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modülleri, 433MHz RF Modülleri, Lora, nRF vb. Gibi birçok kablosuz iletişim sistemini kullanır. Ortam seçimi, kullanıldığı uygulamanın türüne bağlıdır. hepsi, yerel ağ iletişimi için popüler bir kablosuz ortam nRF24L01'dir. Bu modüller, birçok ülkede yasal olan ve endüstriyel ve tıbbi uygulamalarda kullanılabilen 250Kbps'den 2Mbps'ye kadar olan baud hızıyla 2.4GHz (ISM bandı) üzerinde çalışır. Ayrıca, uygun antenler ile bu modüllerin aralarında 100 metre mesafeye kadar sinyaller gönderip alabildiği iddia edilmektedir. Daha önce servo motoru kontrol etmek ve bir Sohbet Odası oluşturmak için Arduino ile nRF24L01'i kullandık.
Burada Arduino UNO ve Raspberry Pi ile aralarında kablosuz iletişim kurmak için nRF24L01 - 2.4GHz RF Alıcı-Verici modülünü kullanacağız. Raspberry pi bir verici görevi görecek ve Arduino Uno, Raspberry Pi'yi dinleyecek ve Raspberry Pi tarafından gönderilen mesajı 16x2 LCD'de nRF24L01 kullanarak yazdıracaktır. nRF24L01 ayrıca dahili BLE özelliklerine sahiptir ve ayrıca BLE kullanarak kablosuz olarak iletişim kurabilir.
Eğitim iki bölüme ayrılmıştır. İlk bölüm, Alıcı olarak hareket etmek için nRF24L01'in Arduino ile arayüzünü içerecek ve ikinci bölüm, Verici olarak görev yapmak için Raspberry Pi ile nRF24L01'in arayüzünü içerecektir. Çalışma videosunun bulunduğu her iki bölüm için eksiksiz kod bu eğitimin sonuna eklenecektir.
NRF24L01 RF Modülü
NRF24L01 modülleri olan alıcı-verici modülleri her modül anlamına can send ve her iki veri almak ama çünkü onlar da göndermek veya bir defada veri alabilir yarı dubleks. Modül, verilerin iletilmesinden ve alınmasından sorumlu olan Nordic yarı iletkenlerinden jenerik nRF24L01 IC'ye sahiptir. IC, SPI protokolünü kullanarak iletişim kurar ve bu nedenle herhangi bir mikro denetleyici ile kolayca arayüzlenebilir. Kitaplıklar hazır olduğu için Arduino ile çok daha kolay hale geliyor. Standart bir NRF24L01 modülünün pinouts aşağıda gösterilmiştir
Modül, 1.9V ila 3.6V (tipik olarak 3.3V) arasında çalışma voltajına sahiptir ve normal çalışma sırasında yalnızca 12mA'lık çok daha az akım tüketir, bu da pilin verimli olmasını sağlar ve bu nedenle madeni para pillerinde bile çalışabilir. Çalışma voltajı 3,3V olsa da pinlerin çoğu 5V toleranslıdır ve bu nedenle Arduino gibi 5V mikrodenetleyicilerle doğrudan arayüzlenebilir. Bu modülleri kullanmanın bir diğer avantajı, her modülün 6 Pipeline sahip olmasıdır. Yani, her modül veri iletmek veya almak için diğer 6 modülle iletişim kurabilir. Bu, modülü IoT uygulamalarında yıldız veya örgü ağlar oluşturmak için uygun hale getirir. Ayrıca 125 benzersiz ID'den oluşan geniş bir adres aralığına sahiptirler, bu nedenle kapalı bir alanda bu modüllerden 125'ini birbirine karışmadan kullanabiliriz.
Devre şeması
nRF24L01 Arduino ile:
NRF24L01'i Arduino ile bağlamak için devre şeması kolaydır ve fazla bileşeni yoktur. NRF24L01 SPI arayüzü ile bağlanacaktır ve 16x2 LCD sadece iki tel kullanan I2C protokolüne arabirim.
Raspberry Pi ile nRF24L01:
NRF24L01'i Raspberry Pi ile bağlamak için devre şeması da çok basittir ve Raspberry Pi ve nRF24l01'i bağlamak için sadece SPI arayüzü kullanılır.
Raspberry Pi'yi nRF24l01 kullanarak Mesaj Göndermek için Programlama
Raspberry Pi'nin programlanması Python3 kullanılarak yapılacaktır. Arduino olarak da C / C ++ kullanabilirsiniz. Ancak python'da nRF24l01 için github sayfasından indirilebilen bir kitaplık zaten var. Python programı ve kitaplığın aynı klasörde olması gerektiğini veya python programının kitaplığı bulamayacağını unutmayın. Kitaplığı indirdikten sonra, tüm programların ve kitaplık dosyalarının saklanacağı bir klasör oluşturun. Kütüphane kurulumu tamamlandığında, programı yazmaya başlayın. Program, Raspberry Pi GPIO'lara erişmek ve içe aktarma zamanı için GPIO kütüphanesini içe aktarma gibi kodda kullanılacak kütüphanelerin dahil edilmesiyle başlar. zamanla ilgili işlevlere erişmek için. Raspberry Pi'de yeniyseniz, Raspberry pi'yi kullanmaya başlamaya geri dönün.
RPi.GPIO'yu GPIO olarak içe aktarın , lib_nrf24'ten içe aktarma süresi içe aktarma NRF24'ü içe aktarma
GPIO modunu " Broadcom SOC kanalı" nda ayarlayın. Bu, pinlere "Broadcom SOC kanalı" numarasıyla atıfta bulunduğunuz anlamına gelir, bunlar "GPIO" dan sonraki numaralardır (örneğin GPIO01, GPIO02…). Bunlar Pano Numaraları değildir.
GPIO.setmode (GPIO.BCM)
Daha sonra boru adresini ayarlayacağız. Bu adres, Arduino alıcısı ile iletişim kurmak için önemlidir. Adres onaltılık kodda olacaktır.
borular =,]
Radyoyu CE olarak GPIO08 ve CSN pinleri olarak GPIO25 kullanarak başlatın.
radio.begin (0, 25)
Yük boyutunu 32 bit, kanal adresini 76, veri hızını 1 mbps ve güç seviyelerini minimum olarak ayarlayın.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Verileri yazmaya başlamak ve nRF24l01'in temel ayrıntılarını yazdırmak için boruları açın.
radio.openWritingPipe (borular) radio.printDetails ()
Dize biçiminde bir mesaj hazırlayın. Bu mesaj Arduino UNO'ya gönderilecektir.
sendMessage = list ("Hi..Arduino UNO") len (sendMessage) <32: sendMessage.append (0)
Radyoya yazmaya başlayın ve radyo hazır olana kadar dizinin tamamını yazmaya devam edin. Bununla birlikte, zamanı not edin ve mesaj teslimi için bir hata ayıklama bildirimi yazdırın.
True iken: start = time.time () radio.write (sendMessage) print ("Mesajı gönderildi: {}". format (sendMessage)) radio.startListening () gönder
Dize tamamlanırsa ve boru kapatılırsa, zaman aşımına uğrayan bir hata ayıklama mesajı yazdırın.
iken radio.available değil (0): time.sleep (1/100) time.time () - eğer başlangıç> 2: print ("zaman aşımı oluştu.") # baskı hata mesajı radyo bağlantısı veya artık çalışmıyor eğer kırmak
Radyo dinlemeyi bırakın ve iletişimi kapatın ve başka bir mesaj göndermek için 3 saniye sonra iletişimi yeniden başlatın.
radio.stopListening () # kapat radyo süresi.sleep ( 3) # 3 saniyelik gecikme verir
Ahududu programı python'un temellerini biliyorsanız, anlaşılması kolaydır. Eğitimin sonunda eksiksiz bir Python programı verilmiştir.
Raspberry Pi'de Python Programını Çalıştırmak:
Aşağıdaki adımları uyguladıktan sonra programı çalıştırmak çok kolaydır:
- Python Programı ve Kitaplık dosyalarını aynı klasöre kaydedin.
- Gönderen için program dosyamın adı nrfsend.py ve ayrıca her dosya aynı klasörde
- Raspberry Pi Komut Terminaline gidin. Ve "cd" komutunu kullanarak python program dosyasını bulun.
- Ardından klasörü açın ve “ sudo python3 your_program.py ” komutunu yazın ve enter tuşuna basın. NRf24'ün temel ayrıntılarını görebileceksiniz ve telsiz her 3 saniyede bir mesaj göndermeye başlayacaktır. Mesaj hata ayıklama, gönderilen tüm karakterlerle gönderim tamamlandıktan sonra görüntülenecektir.
Şimdi Arduino UNO'da alıcı ile aynı programı göreceğiz.
NRF24l01 kullanarak Arduino UNO'nun Mesaj Alması için Programlama
Arduino UNO'yu programlamak, Raspberry Pi'yi programlamaya benzer. Benzer yöntemler, ancak farklı programlama dili ve adımları ile takip edeceğiz. Adımlar, nRF24l01'in okuma kısmını içerecektir. Arduino için nRF24l01 kütüphanesi github sayfasından indirilebilir. Gerekli kitaplıkları dahil ederek başlayın. I2C Shield kullanarak 16x2 LCD kullanıyoruz, bu nedenle Wire.h kitaplığını dahil edin ve ayrıca nRF24l01 SPI ile arabirimlidir, bu nedenle SPI kitaplığını dahil edin.
#Dahil etmek
RF24 ve LCD işlevlerine erişmek için RF24 ve LCD kitaplığını dahil edin.
#Dahil etmek
I2C için LCD adresi 27'dir ve 16x2 LCD'dir, bu yüzden bunu işleve yazın.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24, pim 9'da CE ve pim 10'da CSN ile birlikte standart SPI pimleri ile bağlanır.
RF24 radyo (9, 10);
Radyoyu başlatın, güç seviyesini ayarlayın ve kanalı 76'ya ayarlayın. Ayrıca boru adresini Raspberry Pi ile aynı ayarlayın ve okumak için boruyu açın.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t boru = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, boru);
I2C iletişimini başlatın ve LCD ekranı başlatın.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Almaya Hazır");
Gelen mesajlar için radyo dinlemeye başlayın ve mesaj uzunluğunu 32 bayt olarak ayarlayın.
radio.startListening (); karakter alındıMesaj = {0}
Radyo bağlıysa, mesajı okumaya başlayın ve kaydedin. Mesajı seri monitöre yazdırın ve ayrıca bir sonraki mesaj gelene kadar ekranda yazdırın. Bir süre sonra dinlemek ve yeniden denemek için radyoyu durdurun. İşte 10 mikro saniye.
eğer (radio.available ()) { radio.read (ReceivedMessage, sizeof (ReceivedMessage)); Serial.println (ReceivedMessage); Serial.println ("Radyoyu kapatma."); radio.stopListening (); String stringMessage (ReceivedMessage); lcd.clear (); gecikme (1000); lcd.print (stringMessage); }
Sonunda verilen kodun tamamını Arduino UNO'ya yükleyin ve mesajın alınmasını bekleyin.
Bu, Raspberry Pi & nRf24l01 kullanarak mesaj gönderme ve Arduino UNO & nRF24l01 kullanarak mesaj alma hakkındaki tüm öğreticiyi bitirir. Mesaj 16x2 LCD ekrana yazdırılacaktır. Boru adresleri hem Arduino UNO'da hem de Raspberry Pi'de çok önemlidir. Bu projeyi yaparken herhangi bir zorlukla karşılaşırsanız, lütfen aşağıya yorum yapın veya daha ayrıntılı tartışma için foruma ulaşın.
Ayrıca aşağıdaki tanıtım videosunu da kontrol edin.