Модуль RF039. Приёмопередатчик SI4432 (240...960 МГц)

Артикул:RDKT0390
В наличии:есть
370 руб
1
Модуль RF039. Приёмопередатчик SI4432 (240...960 МГц) 


  Если необходимо совместить маленький размер и потребление радиомодулей с большим радиусом действия, тогда можно использовать модуль 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 МГц):

Назначение выводов модуля 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 КБ)

Программные коды для модуля RF039.
Приёмопередатчика SI4432 (240...960 МГц).
ZIP-файл (95 КБ)



  Рассмотрим пример передачи данных температуры и влажности с высокоточного датчика SHT21, работающего по протоколу I2C, между платами Arduino c модулями SI4432. Первая плата Arduino с периодичностью 60 секунд отправляет запрос "tempSHT21" или "humiditySHT21" и переходит в режим приёмника для получения ответа. Затем получает данные, обрабатывает и выводит в последовательный порт.


Схема подключения модуля RF039. Приёмопередатчика SI4432 (240...960 МГц):

Схема подключения модуля 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 МГц):

Схема подключения модуля 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;
}
Вверх