Устройства контроля и управления

В конце 90ых, когда я работал в КИПиА на фабрике, «таракан пятилоддаровый», что на фото выше, был чем то не вообразимым, так как функционально он ничем не уступает тем контроллерам, падение которых на ногу грозило переломом ноги и ничем не грозило самому устройству.

Не смотря на то, что прошло более 20 лет, контроллеры как были тупые как валенки, так и остались, уменьшился размер, вес и цена, но с точки зрения программиста суть осталась.

В данном случае речь идет о ESP NodeMCU размером не больше мизинца, хотя то что крупнее ничем кроме наличия не очень жирных 5 вольт на борту не отличается.

Питание по сути не проблема, один хрен изначально приходит с блока питания 5 не очень ровных и стабильных вольт (на что датчикам, работающим в широченных диапозонах трижды насрать), сама платка питается через понижайку до 3.3V уже относительно стабильных.

По части чтения данных проблем нет. В мертвый цикл, как положено в ардуино-проектах загоняется функция чтения показаний с датчиков. Если не совсем лоханский вариант, то чтение происходит не через delay-паузы (кстати забавно, что фонетически схожее с русским словом «делай» в английском, и особенно в программировании имеет обратное значение «нихрена не делать»).

Беда начинается — если нужно не читать, а управлять через контроллер, который на момент чтения датчиков ведет себя как депутат после выборов, полностью игнорируя вопросы на которые обещал незамедлительно отвечать.

Частично удалось решить проблему выведя такие параметры как температура, влажность и СО2 в глобальные переменные — это всё таки не бозон Хиггса, их часто ловить не нужно, меняются они редко, и в цикле раз в 10 секунд их опрашивать вполне достаточно, чтобы при запросе к серверу не морочиться измерениями, а отдавать уже измеренное. Выглядит это в цикле так:

if (millis() — timing1 > 9000)
{
timing1 = millis();
float t = dht.readTemperature();
if(!isnan(t)){temperature = t;} else {timing1 = millis()-8000;}
float h = dht.readHumidity();
if(!isnan(h)){humidity = h;} else {timing1 = millis()-8000;}
}

И кстати isnan(t) полезная проверка, которая в случае отдупления датчика запускает перепроверку через секунду, сохраняя в глобальной переменной предыдущее значение.

Пришлось ввести timing1,2 и если будет больше — то и 3, чтобы у каждого был свой интервал, и только для того чтобы в этой блядской однопоточной истории худо бедно не тормозил server.handleClient(); который не только отдает показания, черт бы с ними, но и управляет светом. К сожалению ни у ESP, ни у Arduino нет интераптно-вайфайной ноги, а было бы круто…

И еще момент, при более одном датчике, нужно не просто несколько таймингов, но и обрабатывать их через else if, чтобы за один цикл обрабатывался только один датчик.

if (millis() — timing1 > 9000)
{

}
else
{
if (millis() — timing2 > 9000)
{
}
}

В итоге вроде бы получилось добиться от ESPхи чтобы она читала данные, и отвечала как надо, и в 9 из 10 случаев без видимой задержки включала-выключала свет и кондиционер.

Но как я понимаю — совсем решить проблему задержки не получится, если не брать два устройства — типа одно на чтение, другое на управление — тогда конечно всё будет супер-бест, но хочется же вырезать гланды автогеном без наркоза, а не купить готовый умный дом от Google или Amazon.

И поскольку программирование в этой болячке бессильно при имеющихся ресурсах аппаратных — поможет нам психология и чуть-чуть политтехнология.

Политики, ну те редкие, грамотные, политики коих полтора инвалида на регион, не просто обещают, а устраивают из обещания шоу. Пообещал сделать дорогу — пусти новость, что вроде как договорился чуть ли не с самим Путиным, поставь плакат, что движение будет ограничено в связи с ремонтом, даже если нет ни проекта, ни денег, арендуй каток и трёх таджиков в жилетках, которые изображают начало ремонтных работ, и народ будет смотреть на процесс, не обращая внимания что дороги как не было так и нет… Классика…

Ровно та же хрень с умным домом. Если кнопка как честный депутат нажалась сразу, и ничего не произошло — косяк. Но в отсутствии ресурсов контроллера можно устроить шоу с плавно нажимающейся кнопкой, растянув это дело минимум на 500 мс, и пока юзер сконцентрирован на том как красиво переключается думплер нарисованный в HTML5, там глядишь и желязяка тупая наша очнется и сделает то что он нее требуется, без претензий со стороны электората 🙂