Хочу поделиться своим трудами
Была задача создать универсальную платформу на базе ардуино для работы с мажордом по протоколу MQTT.
Идея в том, что бы в зависимости от потребностей менять только основную программу (например выключатель, датчик температуры, контроллер термостата итд..) а всю остальную работу по отправке и приёму значений выполнят стандартный код.
С первого взгляда эта идея покажется не новой, но есть пару фишек, с которыми получилось добиться той самой универсальности и удобства.
В принцип работы кода я вдаваться не буду (могу сделать это по необходимости), но опишу главные возможности
При настройки нам надо указать
ip
gateway
SELF_NAME[] = "esp82xx_mqtt";
ssid[]
pass[]
И названия переменных в файле valuename.h например declare_member(MainPumpON) delimiter
Теперь у нас есть переменная в формате int MainPumpON
values[MainPumpON] = 33; так присваиваем значение или читаем
Serial.print(values[MainPumpON]); вернёт 33
MainPumpON - порядковый номер переменной в valuename.h
Serial.print(MainPumpON); вернёт 6
valuename_strs; - массив названий переменых
Serial.print(valuename_strs[6]); вернёт MainPumpON
values - массив значений переменных
Serial.print(values[6]); вернёт 33
Теперь небольшой пример:
Где то в коде назначили
Код: Выделить всё
values[MainPumpON] = 33;
Код: Выделить всё
mqtt_singleSend(MainPumpON);
Код: Выделить всё
/esp82xx_mqtt/COIL/MainPumpON 33
Код: Выделить всё
/esp82xx_mqtt/SET/MainPumpON 100
В файле valuename.h переменные для удобства разделены маркерами TEMP; FLOAT; COIL; MARKER;
Например при вызове
Код: Выделить всё
mqtt_singleSend(HeatTempError);
Код: Выделить всё
/esp82xx_mqtt/MARKER/HeatTempError
Переменные которые записаны до разделителя TEMP могут быть использованы только для датчиков ds18b20.
Для работы с ними есть отдельный модуль. Всё что вам нужно - это записать адреса датчиков (из порта) и вписать им названия в файл valuename.h. Модуль стабильно работал с 40 датчиками и не имеет значения какой длины провод (можно подключать датчики параллельно).
Ещё есть встроенный веб сервер, но я пользуюсь только для перепрошивки по воздуху
Код: Выделить всё
192.168.1.1/setup.htm
В чём удобство этого решения? При создании нужной вам программы вы оперируете реальными названиями, что очень удобно для понимания и не надо чесать репу как распарсить или передать переменную. у меня этот код работает во всех устройствах - от выключателей sonoff до довольно сложных контроллеров управления ТН или котлом.
В общем если кого-то заинтересует данный девайс, то готов ответить на вопросы.