- RF модулът nRF24L01
- Електрическа схема
- Програмиране на Raspberry Pi за изпращане на съобщение с помощта на nRF24l01
- Програмиране на Arduino UNO за получаване на съобщение с помощта на nRF24l01
Дизайнерите използват много безжични комуникационни системи като Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi модули, 433MHz RF модули, Lora, nRF и др. И изборът на носител зависи от вида на приложението, в което се използва. всичко, един популярен безжичен носител за комуникация в локална мрежа е nRF24L01. Тези модули работят на 2.4GHz (ISM лента) със скорост на предаване от 250Kbps до 2Mbps, което е законно в много страни и може да се използва в индустриални и медицински приложения. Твърди се също, че с подходящи антени тези модули могат да предават и приемат сигнали до разстояние от 100 метра между тях. Преди използвахме nRF24L01 с Arduino за управление на сервомотора и създаване на чат стая.
Тук ще използваме nRF24L01 - 2.4GHz RF трансивър модул с Arduino UNO и Raspberry Pi, за да установим безжична комуникация между тях. Raspberry pi ще действа като предавател, а Arduino Uno ще слуша Raspberry Pi и ще отпечатва съобщението, изпратено от Raspberry Pi, използвайки nRF24L01 на 16x2 LCD. nRF24L01 също има вградени BLE възможности и може също така да комуникира безжично, използвайки BLE.
Урокът е разделен на два раздела. Първият раздел ще включва взаимодействието на nRF24L01 с Arduino, за да действа като приемник, а вторият раздел ще включва свързването на nRF24L01 с Raspberry Pi, за да действа като предавател. Пълният код за двата раздела с работещо видео ще бъде приложен в края на този урок.
RF модулът nRF24L01
На модули nRF24L01 са приемо-предавателни модули, което означава всеки модул може да изпрати, така и за получаване на данни, но тъй като те са полу-дуплекс те могат или да изпраща или получава данни в даден момент. Модулът има общ nRF24L01 IC от северни полупроводници, който отговаря за предаването и приемането на данни. IC комуникира с помощта на протокола SPI и следователно може лесно да бъде свързан с всякакви микроконтролери. С Arduino става много по-лесно, тъй като библиотеките са лесно достъпни. На pinouts на стандартния nRF24L01 модул е показано по-долу
Модулът има работно напрежение от 1,9 V до 3,6 V (обикновено 3,3 V) и консумира много по-малко ток от само 12 mA по време на нормална работа, което го прави ефективен от батерията и следователно може да работи на клетки с монети. Въпреки че работното напрежение е 3.3V, повечето щифтове са 5V толерантни и следователно могат да бъдат директно свързани с 5V микроконтролери като Arduino. Друго предимство на използването на тези модули е, че всеки модул има 6 тръбопровода. Значение, всеки модул може да комуникира с 6 други модула за предаване или получаване на данни. Това прави модула подходящ за създаване на звездни или мрежести мрежи в IoT приложения. Също така те имат широк адресен диапазон от 125 уникални идентификатора, следователно в затворена зона можем да използваме 125 от тези модули, без да се намесваме помежду си.
Електрическа схема
nRF24L01 с Arduino:
Схемата за свързване на nRF24L01 с Arduino е лесна и няма много компоненти. В nRF24l01 ще бъде свързан с SPI интерфейс и дисплея на 16x2 е свързан с I2C протокол, който използва само две жици.
nRF24L01 с Raspberry Pi:
Схемата за свързване на nRF24L01 с Raspberry Pi също е много проста и само SPI интерфейсът се използва за свързване на Raspberry Pi и nRF24l01.
Програмиране на Raspberry Pi за изпращане на съобщение с помощта на nRF24l01
Програмирането на Raspberry Pi ще се извършва с помощта на Python3. Можете също да използвате C / C ++ като Arduino. Но вече има налична библиотека за nRF24l01 в python, която може да бъде изтеглена от страницата на github. Имайте предвид, че програмата python и библиотеката трябва да са в една и съща папка, или програмата python няма да може да намери библиотеката. След изтеглянето на библиотеката просто извлечете и направете папка, в която ще се съхраняват всички програми и библиотечни файлове. Когато инсталацията на библиотеката приключи, просто започнете да пишете програмата. Програмата започва с включването на библиотеки, които ще се използват в код като импортиране на GPIO библиотека за достъп до Raspberry Pi GPIO и време за импортиране за достъп до свързаните с времето функции. Ако сте нов в Raspberry Pi, тогава се върнете към началото с Raspberry pi.
импортиране на RPi.GPIO като GPIO време за импортиране импортиране на спидев от lib_nrf24 импортиране NRF24
Задайте режим GPIO в „ Broadcom SOC channel“. Това означава, че препращате към щифтовете от номера на "Broadcom SOC channel", това са номерата след "GPIO" (например GPIO01, GPIO02…). Това не са номерата на дъската.
GPIO.setmode (GPIO.BCM)
След това ще настроим адреса на тръбата. Този адрес е важен за комуникация с приемника на Arduino. Адресът ще бъде в шестнадесетичния код.
тръби =,]
Започнете радиото, като използвате GPIO08 като CE и GPIO25 като CSN щифтове.
radio.begin (0, 25)
Задайте размера на полезния товар като 32 бита, адреса на канала като 76, скоростта на предаване на данни от 1 mbps и нивата на мощност като минимум.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Отворете тръбите, за да започнете да записвате данните и да отпечатате основните детайли на nRF24l01.
radio.openWritingPipe (тръби) radio.printDetails ()
Подгответе съобщение под формата на низ. Това съобщение ще бъде изпратено до Arduino UNO.
sendMessage = list ("Здравей.. Arduino UNO"), докато len (sendMessage) <32: sendMessage.append (0)
Започнете да пишете на радиото и продължете да пишете целия низ, докато радиото е налично. Заедно с това запишете времето и отпечатайте декларация за отстраняване на грешки при доставката на съобщения.
while True: start = time.time () radio.write (sendMessage) print ("Изпратено съобщение: {}". format (sendMessage)) send radio.startListening ()
Ако низът е завършен и тръбата е затворена, отпечатайте съобщение за отстраняване на грешки с изчакване.
докато не radio.available (0): time.sleep (1/100) , ако time.time () - начало> 2: печат ("изтече.") съобщение # печат грешка, ако радио изключен или не функционира вече счупи
Спрете да слушате радио и затворете комуникацията и рестартирайте комуникацията след 3 секунди, за да изпратите друго съобщение.
radio.stopListening () # затваряне на радиото time.sleep (3) # дава забавяне от 3 секунди
Програмата Raspberry е лесна за разбиране, ако знаете основите на python. Пълната програма на Python е дадена в края на урока.
Изпълнение на програмата Python в Raspberry Pi:
Изпълнението на програмата е много лесно, след като изпълните следните стъпки:
- Запазете файловете на програмата и библиотеката на Python в същата папка.
- Името на моя програмен файл за Sender е nrfsend.py и също така всички файлове са в една и съща папка
- Отидете на командния терминал на Raspberry Pi. И намерете програмния файл на python, като използвате командата “cd”.
- След това отворете папката и напишете команда “ sudo python3 your_program.py ” и натиснете enter. Ще можете да видите основните подробности за nRf24 и радиото ще започне да изпраща съобщенията след всеки 3 секунди. Отстраняването на съобщения ще се покаже, след като изпращането приключи с всички изпратени знаци.
Сега ще видим същата програма като приемника в Arduino UNO.
Програмиране на Arduino UNO за получаване на съобщение с помощта на nRF24l01
Програмирането на Arduino UNO е подобно на програмирането на Raspberry Pi. Ще следваме подобни методи, но с различен език за програмиране и стъпки. Стъпките ще включват частта за четене на nRF24l01. Библиотеката за nRF24l01 за Arduino може да бъде изтеглена от страницата на github. Започнете с включването на необходимите библиотеки. Използваме 16x2 LCD, използвайки I2C Shield, така че включете библиотеката Wire.h, а също така nRF24l01 е свързан с SPI, така че включвайте SPI библиотека.
#include
Включете RF24 и LCD библиотека за достъп до функциите RF24 и LCD.
#include
Адресът на LCD за I2C е 27 и е 16x2 LCD, така че запишете това във функцията.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 е свързан със стандартни SPI щифтове заедно с CE в щифт 9 и CSN в щифт 10.
Радио RF24 (9, 10);
Стартирайте радиото, задайте нивото на мощност и задайте канала на 76. Също така задайте адреса на тръбата, същият като Raspberry Pi, и отворете тръбата, за да четете.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t тръба = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, тръба);
Започнете I2C комуникацията и инициализирайте LCD дисплея.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Готов за получаване");
Започнете да слушате радиото за входящи съобщения и задайте дължината на съобщението като 32 байта.
radio.startListening (); char полученMessage = {0}
Ако е прикачено радио, започнете да четете съобщението и го запазете. Отпечатайте съобщението на сериен монитор и отпечатайте на дисплея, докато пристигне следващото съобщение. Спрете радиото, за да слушате и опитайте отново след известно време. Тук е 10 микро секунди.
ако (radio.available ()) { radio.read (получено съобщение, sizeof (получено съобщение)); Serial.println (получено съобщение); Serial.println ("Изключване на радиото."); radio.stopListening (); String stringMessage (полученоMessage); lcd.clear (); забавяне (1000); lcd.print (stringMessage); }
Качете пълния код, даден в края, в Arduino UNO и изчакайте съобщението да бъде получено.
Това завършва пълния урок за изпращане на съобщение с помощта на Raspberry Pi & nRf24l01 и получаването му с помощта на Arduino UNO & nRF24l01. Съобщението ще бъде отпечатано на 16x2 LCD. Адресите на тръбите са много важни както в Arduino UNO, така и в Raspberry Pi. Ако срещнете някакви затруднения, докато правите този проект, моля, коментирайте по-долу или се обърнете към форума за по-подробна дискусия.
Също така проверете демонстрационното видео по-долу.