На главную страницу | Новости | FAQ | Ссылки | Для детей | Контакты
Описан процесс подключения самых популярных и недорогих радиомодулей (передатчика-приемника) nRF24L01 (сокращенно RF24) к плате Arduino UNO (или NANO) и даны примеры программ для работы с радиомодулями
Почему именно nRF24L01? По моему опыту это один из лучших радиомодулей для Arduino, т.к. обладает относительно невысокой стоимостью ). Но главное, что он прост в использовании, без проблем подключается к Arduino. Одна и та же плата может работать как в режиме приемника, так и в режиме передатчика.
Модуль работает на частоте
Конечно, имеются и более дешевые радиомодули, однако с ними много возьни, и они вряд ли подойдут начинающим.
На рисунке показана
Вариант с антенной выглядит так:
Такой антенный модуль потребляет ток порядка 115 мА.
Одна плата объединяет в себе как передатчик, так и приемник. Соответственно для наладки связи нужно как минимум два таких модуля.
Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуине. Наиболее популярные библиотеки - RF24 и Mirf.
Я предпочитаю RF24 (так как с ней у меня не возникло проблем). Скачать библиотеку можно здесь:
https://github.com/maniacbug/RF24
В этом случае схема подключения следующая (показано на примере Arduino Nano; но для UNO тоже самое)
* Схема подключения *
п., Модуль, Arduino, Цвет провода
____________________________
1, GND, GND, черный
2, VCC, 3.3V, красный
3, CE, D9, зеленый
4, CSN, D10, серый
5, SCK, D13, желтый
6, MOSI, D11, синий
7, MISO, D12, фиолет.
8, IRQ, нет, --
* Замечания. Возможные проблемы *
1) Большинство проблем происходит из-за шума на источнике 3.3V, что расположен на плате. Решение следующее: нужно припаять
2) Пин 8 IRQ обычно не используется, хотя некоторые библиотеки его используют.
3) Рекомендуется запитывать модуль от
Выводы
Для связи двух плат ардуин к обоим из них нужно подключить радиомодуль RF24 по указанной выше схеме. Один радиомодуль нужно настроить в режим приемника (receiver), а второй - в режим передатчика (transmitter). Для этого в соответствующие платы ардуино нужно зашить представленные ниже программы. Таким образом, когда приемник получит данные с отправителя, мы об этом узнаем.
Здесь приведена программа для работы радиомодуля в режиме ПРИЕМНИКА (receiver). То есть эту программу надо загрузить в ардуино, к который подсоединен радиомодуль. Кроме того, к данной ардуине я подключил стандратный дисплей LCD1602 для вывода информации. Если такого дисплея нет, то можно посылать сообщения на последовательный порт (для отображения на компьютере, например).
#include < SPI.h >
#include < nRF24L01.h >
#include < RF24.h >
#include < Wire.h >
#include < LiquidCrystal_I2C.h > // LCD+I2C
RF24 radio(9, 10); // указать номера пинов, куда подключаются CE и CSN
const byte rxAddr[6] = "00001"; // адрес
int count = 0;
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init(); // Инициализация lcd
lcd.backlight(); // Включаем подсветку
lcd.clear();
//lcd.setBacklight(LOW);
lcd.setCursor(0,0);
lcd.print("Arduino");
lcd.setCursor(0,1);
lcd.print("started");
delay(500);
radio.begin();
radio.openReadingPipe(0, rxAddr);
radio.startListening();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("listening...");
delay(500);
}
void loop()
{
if (radio.available())
{
char text[32] = {0};
radio.read(&text, sizeof(text));
//Serial.println(text);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(text);
lcd.setCursor(0,1);
lcd.print("count ");
lcd.print(count++);
}
delay(20);
}
Здесь программа для работы радиомодуля в режиме ПЕРЕДАТЧИКА (transmitter). Код программы значительно проще. Мы просто отравляем с передатчика сообщение "Hello World" каждые 2 секунды.
#include < SPI.h >
#include < nRF24L01.h >
#include < RF24.h >
RF24 radio(9, 10); // CE and CSN
const byte rxAddr[6] = "00001"; // адрес
void setup()
{
delay(500);
radio.begin();
radio.setRetries(15, 15);
radio.openWritingPipe(rxAddr);
radio.stopListening();
}
void loop()
{
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
delay(2000);
}
Заметим, что для связи между собой только двух радиомодулей мы должны указать для них один и тот же адрес
Но вообще передатчик может передавать данные сразу нескольким приемникам, и обратно, приемник может принимать данные от нескольких передатчиков - смотря какие rxAddr мы для них зададим. Таким образом, радиомодули можно объединять в достаточно сложные сети.
Now 21.11.24 12:51:42, Your IP: 3.137.176.213; arduino.zl3p.com/modules/radio
ePN