Функция приема данных от беспроводных датчиков на базе протокола 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); }