VirtualWire 433/315 (updated: 05 Jun 2017, 11:23:23)

Функция приема данных от беспроводных датчиков на базе протокола VirtualWire 433/315. Поддержка датчиков температуры, влажности , счетчиков на базе Arduino или любых других микроконтроллеров. В зависимости от типа микроконтроллера и используемых датчиков устройство может работать от батарей значительное время.

Функция может использоваться как проводной канал передачи данных от М/К к ESP! 

Опция не работает совместно с программным PWM И IR передатчиком !


Описание протокола обмена

Пакет передается в виде бинарных данных динамической длины (в зависимости от колличества датчиков).

Порядок передачи данных:

1 байт-число 26, константа, признак принадлежности датчиков проекта.

2-3 байты - ID датчика, 16 битное число.

4 байт - счетчик передач для контроля.

Далее идут данные от датчиков виде тип_датчика, данные датчика (количество байт данных зависит от типа датчика)

Типы датчиков:

1- Данные температуры умноженные на 10. 2 байта

2- Данные влажности умноженные на 10. 2 байта

3- Данные счетчиков или других параметров. 4 байта

4- Данные АЦП или других параметров. 2 байта

5 -Данные любых однобайтовых данных. 1 байт

На данный момент на одном устройстве может быть не более 2 датчиков каждого вида.

Пример:

26, 5, 1, 4, 1, 255, 1 , 2, 200, 2 , 1, 254, 2

Расшифровываем:

26 - число константа

5 и 1 - ID датчика, 5+1*256=261

4 - счетчик передач.

1,255,1 - датчик температуры, 255+1*256=511 , 51.1 градуса

2,200,2 - датчик влажности, 200+2*256=712, 71.2%

1,254,2 - второй датчик температуры, 254+256*2= 766 , 76.6 градуса


Настройка функции

В веб интерфейсе модуля доступна настройка:

Установка скорости передачи, параметр SPEED. Чем больше скорость, чем больше ошибок передачи из-за нагрузки на м/к. При большой скорости так же с ошибками работают датчики DS18B20.

Установка GPIO для приемника, любой GPIO кроме системных и 16.

Установка времени таймаута в секундах при котором модуль будет считать, что связь с датчиком потеряна. Время таймаута необходимо установить меньше, чем интервал отправки у датчиков.

Ниже необходимо ввести ID датчиков. Датчики появятся в модуле после следующей отправки данных.

Используемое железо

В роли приемника может выступать любой качественный радиомодуль.

В качестве микроконтроллера может использоваться любой м/к , который сможет уместить код чтения сенсора и передатчика. Наличие кварцевого задающего генератора крайне рекомендуется (для внешнего датчика для зимы). 


Пример на Ардуино

Пример не включает код датчиков и спящего режима

#include < VirtualWire.h >
#define ID 55555
#define GPIO_TX 12 // pin для передатчика
uint8_t countsend;

void setup()
{
vw_set_tx_pin(GPIO_TX);
pinMode(GPIO_TX, OUTPUT);
vw_setup(1000);        //bit
}

void loop()
{
uint16_t t=1111;      //1  температура 
int16_t h=2222;       //2  влажность 
int32_t c=999999999;  //3  счетчик  
int16_t a=9999;       //4  ацп      
int8_t g=255;         //5  gpio     

uint8_t msg[]={26,ID&255,ID/256,countsend++,
1,t&255,t/256,                                 // температура
2,h&255,h/256,                                   //влажность
3,c&255,c/256,(c/65536)&255, (c/(65536*256))&255,//счетчик
4,a&255,a/256,                                   // ацп
5,g                                              // gpio 
};
digitalWrite(13,1);
vw_send(msg, sizeof(msg));
vw_wait_tx();
digitalWrite(13, 0);    
delay(3000);
}