- RF модуль nRF24L01
- Кругова діаграма
- Програмування Raspberry Pi для надсилання повідомлення за допомогою nRF24l01
- Програмування Arduino UNO на отримання повідомлення за допомогою nRF24l01
Дизайнери використовують багато систем бездротового зв'язку, таких як Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi модулі, 433 МГц RF модулі, Lora, nRF тощо. І вибір середовища залежить від типу програми, в якій він використовується. Серед них все, одним із популярних бездротових носіїв для зв'язку в локальній мережі є nRF24L01. Ці модулі працюють на частоті 2,4 ГГц (діапазон ISM) зі швидкістю передачі від 250 Кбіт / с до 2 Мбіт / с, що дозволено в багатьох країнах і може використовуватися в промислових та медичних цілях. Також стверджується, що за допомогою належних антен ці модулі можуть передавати та приймати сигнали на відстань 100 метрів між ними. Раніше ми використовували nRF24L01 з Arduino для управління сервомотором та створення чату.
Тут ми використовуватимемо модуль RF-трансивера nRF24L01 - 2,4 ГГц з Arduino UNO та Raspberry Pi для встановлення бездротового зв'язку між ними. Raspberry pi буде виконувати функції передавача, а Arduino Uno буде слухати Raspberry Pi і друкувати повідомлення, надіслане Raspberry Pi, використовуючи nRF24L01 на РК-дисплеї розміром 16x2. nRF24L01 також має вбудовані можливості BLE, і він також може здійснювати бездротовий зв'язок за допомогою BLE.
Підручник розділений на два розділи. Перший розділ включатиме взаємодію nRF24L01 з Arduino, щоб він виконував функції приймача, а другий розділ - взаємодію nRF24L01 з Raspberry Pi як передавач. Повний код обох розділів з робочим відео буде доданий в кінці цього посібника.
RF модуль nRF24L01
У модулях NRF24L01 є приймально-передавального модулями, тобто кожен модуль може відправляти і отримувати дані, але так як вони напівдуплексних вони можуть або надсилати та отримувати дані одночасно. Модуль має загальну мікросхему nRF24L01 від північних напівпровідників, яка відповідає за передачу та прийом даних. ІЦ взаємодіє з використанням протоколу SPI, і, отже, може бути легко пов'язаний з будь-якими мікроконтролерами. З Arduino стає набагато простіше, оскільки бібліотеки доступні. У терморегулятори з стандартного модуля NRF24L01 показаний нижче
Модуль має робочу напругу від 1,9 В до 3,6 В (зазвичай 3,3 В) і споживає дуже менше струму лише 12 мА під час нормальної роботи, що робить його батареєю ефективним і, отже, може працювати навіть на монетних комірках. Незважаючи на те, що робоча напруга становить 3,3 В, більшість висновків є толерантними до 5 В, і, отже, вони можуть бути безпосередньо пов'язані з мікроконтролерами 5 В, такими як Arduino. Ще однією перевагою використання цих модулів є те, що кожен модуль має 6 трубопроводів. Це означає, що кожен модуль може спілкуватися з 6 іншими модулями для передачі або отримання даних. Це робить модуль придатним для створення мереж зірок або сіток у додатках IoT. Також вони мають широкий діапазон адрес - 125 унікальних ідентифікаторів, отже, у закритій зоні ми можемо використовувати 125 із цих модулів, не втручаючись один в одного.
Кругова діаграма
nRF24L01 з Arduino:
Схема підключення nRF24L01 до Arduino проста і не має великої кількості компонентів. NRF24L01 буде підключений через інтерфейс SPI і 16x2 ЖК пов'язаний з протоколом I2C, який використовує тільки два дроти.
nRF24L01 з Raspberry Pi:
Схема підключення nRF24L01 до Raspberry Pi також дуже проста, і для підключення Raspberry Pi та nRF24l01 використовується лише інтерфейс SPI.
Програмування 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 час імпорту імпорт spidev з 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 Мбіт / с та рівні потужності як мінімум.
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 в одній папці.
- Моє ім’я файлу програми для відправника - 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, використовуючи I2C Shield, тому включіть бібліотеку Wire.h, а також nRF24l01 взаємодіє з SPI, тому включайте бібліотеку SPI.
#включати
Включіть RF24 та РК-бібліотеку для доступу до функцій RF24 та LCD.
#включати
Адреса РК-дисплея для I2C - 27, а це РК-дисплей 16x2, тому запишіть це у функцію.
Рідкий Кристал_I2C рідкокристалічний (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 pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, труба);
Почніть зв'язок I2C та ініціюйте РК-дисплей.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Готовий до отримання");
Почніть слухати радіо для вхідних повідомлень і встановіть довжину повідомлення як 32 байти.
radio.startListening (); char отримавMessage = {0}
Якщо радіо приєднане, то починайте читати повідомлення та збережіть його. Роздрукуйте повідомлення на послідовному моніторі, а також друкуйте на дисплеї, поки не надійде наступне повідомлення. Зупиніть радіо, щоб прослухати та повторіть спробу через деякий інтервал. Тут це 10 мікросекунд.
if (radio.available ()) { radio.read (receivedMessage, sizeof (полученMessage)); Serial.println (отриманоПовідомлення); Serial.println ("Вимкнення радіо."); radio.stopListening (); Рядок stringMessage (отриманийMessage); lcd.clear (); затримка (1000); lcd.print (stringMessage); }
Завантажте повний код, вказаний наприкінці, в Arduino UNO і дочекайтеся отримання повідомлення.
На цьому закінчено повний підручник з відправки повідомлення за допомогою Raspberry Pi & nRf24l01 та отримання його за допомогою Arduino UNO & nRF24l01. Повідомлення буде надруковано на РК-дисплеї 16x2. Адреси каналів дуже важливі як для Arduino UNO, так і для Raspberry Pi. Якщо у вас виникають труднощі під час виконання цього проекту, будь ласка, коментуйте нижче або зверніться до форуму для більш детального обговорення.
Також перегляньте демонстраційне відео нижче.