На главную страницу | Новости | FAQ | Ссылки | Для детей | Контакты

ARDUINO ROBOTS
Arduino для начинающих электронщиков. Модули и проекты на базе Arduino. Разработка роботов


Подключение радиомодулей RF24 (nRF24L01) к Ардуине


Описан процесс подключения самых популярных и недорогих радиомодулей (передатчика-приемника) nRF24L01 (сокращенно RF24) к плате Arduino UNO (или NANO) и даны примеры программ для работы с радиомодулями

Почему именно nRF24L01? По моему опыту это один из лучших радиомодулей для Arduino, т.к. обладает относительно невысокой стоимостью ). Но главное, что он прост в использовании, без проблем подключается к Arduino. Одна и та же плата может работать как в режиме приемника, так и в режиме передатчика.

Модуль работает на частоте 2.4 ГГц, что обеспечивает достаточно высокую скорость передачи данных и на большие расстояния. Так, в стандартном варианте (без антены) модуль должен работать на расстоянии 100 м. Существуют варианты с антенной (и встроенным усилителем), что должно увеличивать дальность до 500-1000 м на открытой местности, что позволяет осуществлять связь между ардуинами на расстоянии до киллометра.

Конечно, имеются и более дешевые радиомодули, однако с ними много возьни, и они вряд ли подойдут начинающим.

На рисунке показана распиновка радиомодуля nRF24L01.

распиновка-радиомодуля-nRF24L01
Купить сейчас

Вариант с антенной выглядит так:

nRF24L01-а-антенной
Купить сейчас

Такой антенный модуль потребляет ток порядка 115 мА.

Одна плата объединяет в себе как передатчик, так и приемник. Соответственно для наладки связи нужно как минимум два таких модуля.

Подключение nRF24L01 к Arduino


Существует несколько библиотек Arduino для работы с радиомодулями nRF24L01. От выбранной библиотеки может зависеть способ подключения модуля к Ардуине. Наиболее популярные библиотеки - RF24 и Mirf.

Я предпочитаю RF24 (так как с ней у меня не возникло проблем). Скачать библиотеку можно здесь:

https://github.com/maniacbug/RF24

В этом случае схема подключения следующая (показано на примере Arduino Nano; но для UNO тоже самое)

схема-подключения-радиомодуля-RF24-к-ардуине

* Схема подключения *

п., Модуль, 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, что расположен на плате. Решение следующее: нужно припаять кондесаторы на радиомодуль между контактами GND и 3.3V. Я использую электролитический конденсатор емкостью 2.2 мкФ.

2) Пин 8 IRQ обычно не используется, хотя некоторые библиотеки его используют.

3) Рекомендуется запитывать модуль от 3.3 V (как показано на рисунке), хотя от 5V они тоже работают без проблем (поддерживается совместимость по питанию).

Выводы CE и CSN модуля могут подключаться и к другим выводам ардуины. Это указывается в программе при вызове конструктора класса RF24. В нашем случае будем использовать пины D9 и D10.

Связь двух плат Ардуионо посредством радиомодулей RF24


Для связи двух плат ардуин к обоим из них нужно подключить радиомодуль RF24 по указанной выше схеме. Один радиомодуль нужно настроить в режим приемника (receiver), а второй - в режим передатчика (transmitter). Для этого в соответствующие платы ардуино нужно зашить представленные ниже программы. Таким образом, когда приемник получит данные с отправителя, мы об этом узнаем.

Связь-двух-плат-Ардуионо-посредством-радиомодулей-RF24

Код ПРИЕМНИКА (receiver)


Здесь приведена программа для работы радиомодуля в режиме ПРИЕМНИКА (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)


Здесь программа для работы радиомодуля в режиме ПЕРЕДАТЧИКА (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.

Но вообще передатчик может передавать данные сразу нескольким приемникам, и обратно, приемник может принимать данные от нескольких передатчиков - смотря какие rxAddr мы для них зададим. Таким образом, радиомодули можно объединять в достаточно сложные сети.




Платы ARDUINO по низкой цене

Нажми на изображение, чтобы заказать в интернет-магазине:


arduino NANO купить дешево arduino UNO купить дешево arduino UNO R3 ORIG купить дешево arduino MEGA купить дешево arduino DUE купить дешево



Now 28.11.20 21:55:16, Your IP: 100.24.113.182; arduino.zl3p.com/modules/radio