- Радиочастотный модуль nRF24L01
- Принципиальная электрическая схема
- Программирование Raspberry Pi для отправки сообщения с помощью nRF24l01
- Программирование Arduino UNO для получения сообщения с использованием nRF24l01
Разработчики используют множество систем беспроводной связи, таких как Bluetooth Low Energy (BLE 4.0), Zigbee, модули Wi-Fi ESP8266, радиочастотные модули 433 МГц, Lora, nRF и т. Д. И выбор среды зависит от типа приложения, в котором она используется. В общем, одним из популярных беспроводных средств связи для локальной сети является nRF24L01. Эти модули работают на частоте 2,4 ГГц (диапазон ISM) со скоростью передачи от 250 Кбит / с до 2 Мбит / с, что является законным во многих странах и может использоваться в промышленных и медицинских приложениях. Также утверждается, что с соответствующими антеннами эти модули могут передавать и принимать сигналы на расстоянии до 100 метров между собой. Ранее мы использовали nRF24L01 с Arduino для управления серводвигателем и создания чата.
Здесь мы будем использовать nRF24L01 - модуль RF-приемопередатчика 2,4 ГГц с Arduino UNO и Raspberry Pi для установления беспроводной связи между ними. Raspberry pi будет действовать как передатчик, а Arduino Uno будет слушать Raspberry Pi и печатать сообщение, отправленное Raspberry Pi, используя nRF24L01 на ЖК-дисплее 16x2. nRF24L01 также имеет встроенные возможности BLE и может обмениваться данными по беспроводной сети с помощью BLE.
Учебное пособие разделено на два раздела. Первый раздел будет включать взаимодействие nRF24L01 с Arduino, чтобы действовать как приемник, а второй раздел будет включать взаимодействие nRF24L01 с Raspberry Pi, чтобы действовать как передатчик. Полный код обоих разделов с рабочим видео будет приложен в конце этого урока.
Радиочастотный модуль nRF24L01
В модулях NRF24L01 являются приемопередающими модулями, то есть каждый модуль может отправлять и получать данные, но так как они Полудуплексные они могут либо передавать или принимать данные одновременно. В модуле используется общая микросхема nRF24L01 от Nordic semi-wirectors, которая отвечает за передачу и прием данных. IC взаимодействует с использованием протокола 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 для доступа к GPIO Raspberry Pi и времени импорта. для доступа к функциям, связанным со временем. Если вы новичок в 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 ("Hi..Arduino UNO"), а len (sendMessage) <32: sendMessage.append (0)
Начните писать на радио и продолжайте писать всю строку, пока радио не станет доступно. Вместе с ним запишите время и распечатайте отладочный отчет о доставке сообщения.
while True: start = time.time () radio.write (sendMessage) print ("Отправлено сообщение: {}". format (sendMessage)) send radio.startListening ()
Если строка завершена и канал закрыт, выведите отладочное сообщение об истечении времени ожидания.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timed out.") # вывести сообщение об ошибке, если радио отключено или больше не работает break
Прекратите слушать радио, закройте связь и перезапустите связь через 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 с использованием I2C Shield, поэтому включите библиотеку Wire.h, а также nRF24l01, подключенный к SPI, поэтому включите библиотеку SPI.
#включают
Включите RF24 и библиотеку LCD для доступа к функциям RF24 и LCD.
#включают
Адрес ЖК-дисплея для I2C - 27, и это ЖК-дисплей 16x2, поэтому запишите это в функцию.
LiquidCrystal_I2C lcd (0x27, 16, 2);
RF24 подключен к стандартным контактам SPI вместе с CE на контакте 9 и CSN на контакте 10.
Радиостанция РФ24 (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 gotMessage = {0}
Если радио подключено, начните читать сообщение и сохраните его. Распечатайте сообщение на серийный монитор, а также распечатайте на дисплее, пока не придет следующее сообщение. Остановите радио, чтобы послушать, и повторите попытку через некоторое время. Здесь это 10 микросекунд.
если (radio.available ()) { radio.read (полученное сообщение, размер (полученное сообщение)); Serial.println (полученное сообщение); Serial.println («Выключение радио.»); radio.stopListening (); Строка stringMessage (полученное сообщение); lcd.clear (); задержка (1000); lcd.print (stringMessage); }
Загрузите полный код, указанный в конце, в Arduino UNO и дождитесь получения сообщения.
На этом заканчивается полное руководство по отправке сообщения с помощью Raspberry Pi & nRf24l01 и его получению с помощью Arduino UNO & nRF24l01. Сообщение будет распечатано на ЖК-дисплее 16x2. Адреса каналов очень важны как в Arduino UNO, так и в Raspberry Pi. Если вы столкнетесь с какими-либо трудностями при выполнении этого проекта, оставьте комментарий ниже или обратитесь на наш форум для более подробного обсуждения.
Также посмотрите демонстрационное видео ниже.