|
Обратите внимание на близкий |
|
Модули RF002. Комплект из приёмника и передатчика для Arduino на 433,92 МГц |
|
Модуль RF044. LoRa SX1278 RA-01. Беспроводной модуль до 10 км |
Если необходимо совместить маленький размер и потребление радиомодулей с большим радиусом действия, тогда можно использовать модуль SI4432. Это самый мощный из разрешённых на территории РФ приёмопередатчик, который реализует передачу данных до 1,5 км на открытой местности и 150…500 метров в условиях городской или промышленной застройки.
Данный модуль реализован на базе трансивера SI4432. Однокристальный трансивер SI4432 имеет чувствительность приёмника 121 dBm. Мощность передатчика до +20 dBm (возможна программная настройка с шагом 3 dBm), что обеспечивает устойчивую связь до 1 км на открытой местности и 100…300 м в помещении. Имеется встроенная функция разнесённого приёма (Antenna Diversity). Микросхема способна работать на частотах 240…960 МГц с шагом 156 Гц (240…480 МГц) или 312 Гц (480…960 МГц). Также микросхема имеет такие особенности как: таймер автоматического пробуждения, детектор низкого заряда батареи, 64-х байтный буфер приёма/передачи, автоматический обработчик пакетов, датчик температуры, 8-ми разрядный АЦП, источник опорного напряжения, три вывода GPIO, различные виды модуляции сигнала (OOK, FSK, GFSK) и др. Микросхема работает от постоянного напряжения 1,8…3,6 В.
Назначение выводов модуля RF039. Приёмопередатчика SI4432 (240...960 МГц):
Обмен с микроконтроллером по интерфейсу SPI (используются выводы NSEL, SCLK, SDI, SDO), NIRQ - вывод прерываний (если произошло событие приём/передача, то уровень на этом выводе переходит в LOW). Для сопряжения модуля с Arduino (5 В) понадобится преобразователь уровней 3.3V/5V (СМОТРИ ТУТ).
Для работы с Arduino используется библиотека RF22.
Характеристики:
Напряжение питания: 1,8...3,6 В;
Рабочая частота: 240...930 МГц (433,92 MГц по умолчанию);
Выходной сигнал: 20 дБц;
Чувствительность: До 121 дБц;
Дальность передачи: До 1 км;
Скорость передачи данных: До 256 Кб/с;
Модуляция: FSK, GFSK, OOK;
Диапазон рабочих температур: -10...+45 градусов Цельсия;
Относительная влажность: 5...80 % (без образования конденсата);
Длина антенны: 35 мм;
Размеры устройства: 15 x 15 x 6 мм;
Общая масса набора: ~1 г.
Комплект поставки:
Модуль SI4432;
Антенна;
Штыревой разъём для пайки.
Программные коды для модуля RF039.
Приёмопередатчика SI4432 (240...960 МГц).
ZIP-файл (95 КБ)
Рассмотрим пример передачи данных температуры и влажности с высокоточного датчика SHT21, работающего по протоколу I2C, между платами Arduino c модулями SI4432. Первая плата Arduino с периодичностью 60 секунд отправляет запрос "tempSHT21" или "humiditySHT21" и переходит в режим приёмника для получения ответа. Затем получает данные, обрабатывает и выводит в последовательный порт.
Схема подключения модуля RF039. Приёмопередатчика SI4432 (240...960 МГц):
Содержимое скетча:
// подключение библиотек
#include
#include
// создание объекта radio
RF22 rf22;
int flag1=0;
unsigned int millissend=0;
void setup() {
Serial.begin(9600);
// инициализация si4432
if (!rf22.init())
Serial.println("RF22 init failed");
else
Serial.println("RF22 init OK!!!");
}
void loop() {
// прошло 60 секунд
if(millis()-millissend>=60000) {
if (flag1==0) {
uint8_t data[] = "tempSHT21";
rf22.send(data, sizeof(data));
Serial.print("tempSHT21=");
}
else {
uint8_t data[] = "humiditySHT21";
rf22.send(data, sizeof(data));
Serial.print("humiditySHT21=");
}
//
rf22.waitPacketSent();
uint8_t buf[RF22_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
// ждать не более 4 секунд
if (rf22.waitAvailableTimeout(4000)){
if (rf22.recv(buf, &len)) {
sscanf((char*)buf,"%d",&pint);
Serial.println(pint);
}
else {
Serial.println("error");
}
flag=1-flag;
millissend=millis();
}
}
Вторая плата Arduino, к которой подключён датчик SHT21 слушает эфир, и при получении данных "tempSHT21" или "humiditySHT21" получает данные с датчика DHT11, переходит в режим передатчика и отправляет данные на первую плату.
Схема подключения модуля RF039. Приёмопередатчика SI4432 (240...960 МГц):
Содержимое скетча:
// подключение библиотек
#include
#include
#include
#include
// создание объекта radio
RF22 rf22;
void setup() {
Wire.begin();
Serial.begin(9600);
// инициализация si4432 с настройками по умолчанию
if (!rf22.init())
Serial.println("RF22 init failed");
else
Serial.println("RF22 init OK!!!");
}
void loop() {
// ожидание данных
rf22.waitAvailable();
uint8_t buf[RF22_MAX_MESSAGE_LEN];
uint8_t len = sizeof(buf);
if (rf22.recv(buf, &len)) {
// вывести полученные данные в serial
Serial.print("get request: ");
Serial.println((char*)buf);
// данные для отправки ответа
char data[] = "send answer to client";
// запрошена температура
if(StrContains((char*)buf,"tempSHT21")!=0)
{
// получение данных температуры
Serial.print(" Temperature(C): ");
Serial.println(SHT2x.GetTemperature());
dtostrf(SHT2x.GetTemperature()*10,10,0,data);
}
// запрошена влажность
else if(StrContains((char*)buf,"humiditySH21")!=0)
{
// получение данных влажности
Serial.print("Humidity(%RH): ");
Serial.println(SHT2x.GetHumidity());
dtostrf(SHT2x.GetHumidity()*10,10,0,data);
}
else
{
Serial.println("error");
dtostrf(999,10,0,data);
}
// отправка ответа
rf22.send((uint8_t*)data, sizeof(data));
rf22.waitPacketSent();
Serial.println("Sent a reply");
}
else
{
Serial.println("recv failed");
}
}
// сравнение строк на идентичность
// 1 если да
// 0 - нет
char StrContains(char *str, char *sfind) {
char found = 0;
char index = 0;
char len;
len = strlen(str);
if (strlen(sfind) > len)
{return 0;}
while (index < len)
{
if (str[index] == sfind[found])
{
found++;
if (strlen(sfind) == found)
{return 1;}
}
else
{found = 0;}
index++;
}
return 0;
}
------------------
КВЛЕ0390:370
Купившие этот товар также заказали: |