Универсальный приемопередатчик работающий в ISM диапазоне (Industrial, Scientific, Medical), предназначен для построения радиочастотных систем передачи данных в нелицензированных частотных диапазонах. Приемопередатчики устойчивы к помехам, высокочувствительны, превосходная стабильность частоты, имеют низкое энергопотребление. Применяются для: Удаленного управления, телеметрии, создания беспроводных сетей, систем контроля доступа, систем мониторинга, промышленных систем сбора данных, для беспроводных меток, идентификации, беспроводных радиочастотных смарт-карт, беспроводные терминалы данных, системы безопасности, системы пожарной безопасности, гидрологический и метеорологический мониторинг, управление роботами, цифровая аудио- и видеопередача.
Пример 1 (Передатчик): В примере иллюстрируется отправка абстрактных данных (счетчик) на аналогичный модуль связи, а также попытка приема данных, если они есть и вывод данных в монитор Serial порта. (Пример тестировался на контроллере Smart UNO)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Беспроводной приемопередатчик NRF905 | 1 |
Провода папа-мама | 11 |
Провода папа-папа | 7 |
Резисторы 4,7 кОм | 6 |
Резисторы 220 Ом | 6 |
Скетч для загрузки:
#include <nRF905.h>
#include <SPI.h>
#define RXADDR {0xFE, 0x4C, 0xA6, 0xE5} // Адрес этого устройства (4 байта)
#define TXADDR {0x58, 0x6F, 0x2E, 0x10} // Адрес устройства, которому будем отправлять (4 байта)
#define TIMEOUT 1000 // 1 секунда для перерыва между соединениями
void setup()
{
// Инициализация модуля
nRF905_init();
// Уставновка адреса (идентификатора) этого устройства
byte addr[] = RXADDR;
nRF905_setRXAddress(addr);
// Перевод в режим получения данных
nRF905_receive();
//Связь с компьютером (для отладки)
Serial.begin(9600);
//Вывод сообщения
Serial.println(F("Client started"));
}
void loop()
{
// Переменная counter - счетчик
// Квалификатор static означает что переменная сохраняет значение между вызовами функции
static byte counter;
// Создание данных для передачи
char data[NRF905_MAX_PAYLOAD] = {0};
sprintf(data, "test %hhu", counter);
// Инкремент счетчика
counter++;
// Запомнить текущее "время"
unsigned long startTime = millis();
// Установка адреса для передачи
byte addr[] = TXADDR;
nRF905_setTXAddress(addr);
// Установка данных
nRF905_setData(data, sizeof(data));
// Отправить данные (отправить сбой, если происходит другая передача данных,
// продалжать попытки пока не появится удачная отправка)
while(!nRF905_send());
// Перевести в режим получения данных
nRF905_receive();
// Создание буфера для ответа
byte buffer[NRF905_MAX_PAYLOAD];
bool success;
// Дождаться ответа с задержкой между соединениями
unsigned long sendStartTime = millis();
while(1)
{
success = nRF905_getData(buffer, sizeof(buffer));
if(success)// Получены данные
break;
// Задержка
if(millis() - sendStartTime > TIMEOUT)
break;
}
// Если данные успешно получены, вывести на дисплей (в терминал)
if(success)
{
unsigned int totalTime = millis() - startTime;
Serial.print(F("Ping time: "));
Serial.print(totalTime);
Serial.println(F("ms"));
// Вывод содержимого соединения
Serial.print(F("Data from server: "));
Serial.write(buffer, sizeof(buffer));
Serial.println();
}
else
Serial.println(F("Ping timed out"));
delay(1000);
}
Пример 2 (Приемник): В примере иллюстрируется прием данных от передатчика, и отправка полученных данных как ответ об успешном получении данных. (Пример тестировался на контроллере Smart UNO)
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Беспроводной приемопередатчик NRF905 | 1 |
Провода папа-мама | 11 |
Провода папа-папа | 7 |
Резисторы 4,7 кОм | 6 |
Резисторы 220 Ом | 6 |
Скетч для загрузки:
Приемник:
#include <nRF905.h>
#include <SPI.h>
#define RXADDR {0x58, 0x6F, 0x2E, 0x10} // Адрес этого устройства (4 байта)
#define TXADDR {0xFE, 0x4C, 0xA6, 0xE5} // Адрес устройства, которому будем отправлять (4 байта)
void setup()
{
// Инициализация модуля
nRF905_init();
// Уставновка адреса (идентификатора) этого устройства
byte addr[] = RXADDR;
nRF905_setRXAddress(addr);
// Перевод в режим получения данных
nRF905_receive();
//Связь с компьютером (для отладки)
Serial.begin(9600);
//Вывод сообщения
Serial.println(F("Server started"));
}
void loop()
{
Serial.println(F("Waiting for ping..."));
// Создание буфера для данных
byte buffer[NRF905_MAX_PAYLOAD];
// Ожидание данных
while(!nRF905_getData(buffer, sizeof(buffer)));
//Произведено соединение
Serial.println(F("Got ping"));
// Установка адреса для передачи
byte addr[] = TXADDR;
nRF905_setTXAddress(addr);
// Установить основные данные (ответ с полученными данными)
nRF905_setData(buffer, sizeof(buffer));
//Сообщение об отправке ответа
Serial.println(F("Sending reply..."));
// Отправить данные (отправить сбой, если происходит другая передача данных,
// продолжать попытки пока не появится удачная отправка)
while(!nRF905_send());
// Вернуть в режим получения данных
nRF905_receive();
// Сообщение об успешной отправке ответа
Serial.println(F("Reply sent"));
// Вывести содержание соединения
Serial.print(F("Data: "));
Serial.write(buffer, sizeof(buffer));
Serial.println();
}