NRF24L01 - Arduino
Радиомодули nRF24L01+ позволяют передавать данные на частоте 2,4ГГц.
Общие характеристики для всех модулей:
Напряжение питания — от 1,9 до 3,6v, рекомендуемое
Входы толерантны к напряжению до 5v, то есть можно подключать к микроконтроллеру, работающему от 5v.
Взаимодействует с микроконтроллером по шине SPI.
Возможные скорости обмена данными — 250kbps, 1Mbps и 2Mbps.
Количество каналов — 126, с шагом 1мгц. Если установлена скорость передачи 2MBPS, то используется ширина двух каналов.
Энергопотребление около 0,9мкА в режиме power-down, до 11,3мА при передаче, и до 13,5мА при приёме.
Стоимость колеблется от 50 до 200р.
Версии модулей
Дальность до 100м на открытом пространстве и до 30м в помещении (дальность указана для минимальной скорости передачи данных — 250kbps).
Размер 29мм на 15мм.
Версия мини. Наследует характеристики предыдущего модуля.
Размер 18мм на 12мм.
С внешней антенной.
Дальность до 200м на открытом пространстве и до 50м в помещении.
С внешней антенной и усилителем.
Дальность до 1000м на открытом пространстве.
Размер 45мм на 16мм.
Для модулей кроме мини, существует «переходник» со стабилизатором на 3.3v.
Так же стоит отметить существование модуля nRF24LE1, способного работать автономно (без ардуины). Однако для работы с этим модулем необходим программатор и соответствующие навыки.
Подключение к ардуине
SCK — D13
MOSI — D11
MISO — D12
CSN — D10
CE/SS — D9
SCK — D52
MOSI — D51
MISO — D50
CSN — D53
CE/SS — D49
Для СЕ и CSN можно использовать любые пины (меняется в скетче RF24 radio(9,10);).
Для улучшения качества связи, рекомендуется припаять конденсатор ~100мкф между плюсом и минусом модуля.
Программирование
Пример №1
Итак, нам понадобится библиотека RF24, две ардуины, два модуля и один светодиод.
Первая ардуина будет по очереди отправлять два числа — 255 и 155:
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10); // можно использовать любые
const uint32_t pipe = 123456789; // адрес
byte massiv[1];
void setup()
{
Serial.begin(57600);
radio.begin();
radio.setDataRate(RF24_250KBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS
radio.openWritingPipe(pipe); // открыть канал на отправку
}
void loop()
{
massiv[0] = 255;
radio.write(massiv, 1);
delay(500);
massiv[0] = 155;
radio.write(massiv, 1);
delay(500);
}
Вторая ардуина будет принимать числа (255 и 155) и включать/выключать светодиод подключенный к D6:
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const uint32_t pipe = 123456789;
byte massiv[4];
void setup()
{
pinMode(6, OUTPUT);
Serial.begin(57600);
radio.begin();
radio.setDataRate(RF24_250KBPS); // RF24_1MBPS или RF24_2MBPS
radio.openReadingPipe(1,pipe); // открыть канал на приём
radio.startListening(); // приём
}
void loop()
{
if(radio.available())
{
radio.read(massiv, 1);
if(massiv[0] == 255)
{
Serial.println(massiv[0]);
digitalWrite(6, HIGH);
}
if(massiv[0] == 155)
{
Serial.println(massiv[0]);
digitalWrite(6, LOW);
}
}
}
Пример №2
Первая ардуина будет посылать значения температуры и влажности второй ардуине. Потребуется библиотека stDHT.
Отправка:
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
#include "stDHT.h"
DHT sens(DHT22);
const uint32_t pipe = 123456789;
byte massiv[2];
void setup()
{
Serial.begin(57600);
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openWritingPipe(pipe);
}
void loop()
{
int t = sens.readTemperature(2); // чтение датчика на пине 2
int h = sens.readHumidity(2);
massiv[0] = t;
massiv[1] = h;
radio.write(massiv, 2);
delay(2000);
}
Приём:
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const uint32_t pipe = 123456789;
byte massiv[2];
void setup()
{
pinMode(6, OUTPUT);
Serial.begin(57600);
radio.begin();
radio.setDataRate(RF24_250KBPS);
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
if(radio.available())
{
radio.read(massiv, 2);
int t = massiv[0];
int h = massiv[1];
Serial.println(t);
Serial.println(h);
}
}
Здесь показаны простые примеры, «чтоб заработало», а вот для вдумчивого изучения рекомендую обратится к примерам из библиотеки.
Купить nRF24L01
Вступайте в Telegram-группу Arduino
- +256
- stD
78898
Поддержать автора
Комментарии (5)
" collect2.exe: error: ld returned 5 exit status
Ошибка компиляции. "
После исправления компилляция без ошибок.