Беспроводной приемопередатчик NRF905
Описание
Универсальный приемопередатчик работающий в ISM диапазоне (Industrial, Scientific, Medical), предназначен для построения радиочастотных систем передачи данных в нелицензированных частотных диапазонах. Приемопередатчики устойчивы к помехам, высокочувствительны, превосходная стабильность частоты, имеют низкое энергопотребление. Применяются для: Удаленного управления, телеметрии, создания беспроводных сетей, систем контроля доступа, систем мониторинга, промышленных систем сбора данных, для беспроводных меток, идентификации, беспроводных радиочастотных смарт-карт, беспроводные терминалы данных, системы безопасности, системы пожарной безопасности, гидрологический и метеорологический мониторинг, управление роботами, цифровая аудио- и видеопередача.
Технические характеристики
- Напряжение питания: 2,7-3,3В
- Потребляемый ток в режиме передачи: 30мА
- Потребляемый ток в режиме приема: 13мА
- Потребляемый ток в режиме ожидания: 8мкА
- Рабочая частота: 433МГц
- Скорость передачи данных: 76,8Кбит/с
- Количество независимых каналов: 170
- Чувствительность приемника: -105ДБм
- Выходная мощность: 10ДБм
- Дальность связи в прямой видимости: 1000 м
Физические размеры
- Приемопередатчик (ДхШхВ): 33 х 20 х 15 мм
- Антенна (ДхШхВ): 8 х 8 х 50 мм
Плюсы использования:
- Высокая дальность связи
- Хорошая помехоустойчивость
- Шифрование сигнала
- Низкое энергопотребление
- Одно устройство и приемник и передатчик одновременно
Минусы использования:
- Интерфейс подключения: SPI – занято много выходов
- Требуется контроллер для работы
- Сложны в подключении
Библиотека для работы с модулем
Примеры подключения и использования:
Пример 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(); }