В современной домашней автоматизации и сфере интернета вещей (IoT) наметился тревожный тренд: даже простейший термостат или реле влажности производители норовят привязать к проприетарному китайскому или американскому облаку. Стоит провайдеру отключить сервера, заблокировать приложение по региональному признаку или просто моргнуть домашнему роутеру, как автоматика теплицы, домашней оранжереи или серверной стойки превращается в бесполезный кусок пластика.
Открытый проект esp32c3-webUI от разработчика TINLAB предлагает бескомпромиссный контрпример: полностью автономный модуль климат-контроля на базе энергоэффективного чипа ESP32-C3 с открытой процессорной архитектурой RISC-V (тактовая частота 160 МГц).
Устройство работает по принципу Zero-Cloud: микроконтроллер самостоятельно поднимает защищенную точку доступа Wi-Fi (SoftAP), запускает встроенный веб-сервер и держит двусторонний сокет реального времени. Чтобы настроить пороги или посмотреть текущую температуру, достаточно подключиться со смартфона к локальной сети прибора и открыть браузер.
Аппаратная часть: шина I2C и силовые ключи MOSFET
Схема устройства спроектирована с прицелом на максимальную простоту сборки и бюджетность компонентов:
- Вычислительное ядро: плата ESP32-C3 SuperMini или Zero со встроенным радиомодулем 2.4 ГГц.
- Датчик микроклимата: прецизионный цифровой сенсор AHT10 (или AHT20), измеряющий температуру в диапазоне от -40 до +85 °C и относительную влажность от 0 до 100%. Подключение выполняется по стандартной двухпроводной шине I2C (всего четыре линии: питание 3.3V, земля GND, данные SDA и тактирование SCL).
- Силовая коммутация: вместо шумных электромеханических реле применены тихие N-канальные MOSFET-транзисторы, управляющие нагрузками 12V/24V (вентиляторы обдува, нагревательные маты, увлажнители).
Аппаратное подключение выводов выглядит следующим образом:
Сенсор AHT10:
VCC -> 3.3V (ESP32-C3)
GND -> GND (ESP32-C3)
SDA -> GPIO 4 (аппаратная шина I2C SDA)
SCL -> GPIO 5 (аппаратная шина I2C SCL)
Силовые ключи MOSFET:
Затвор нагревателя -> GPIO 6 (через резистор 220 Ом, подтяжка 10 кОм к GND)
Затвор увлажнителя -> GPIO 7 (через резистор 220 Ом, подтяжка 10 кОм к GND)
Живая телеметрия через WebSocket и регулятор с гистерезисом
Статические файлы пользовательского интерфейса (HTML, CSS и Vanilla JavaScript) упакованы во flash-память микроконтроллера (файловая система LittleFS). При первом обращении браузер за доли секунды выкачивает статику, после чего обмен переключается на постоянный канал WebSocket.
Раз в 5 секунд контроллер опрашивает сенсор AHT10 и рассылает широковещательный JSON-пакет всем подключенным клиентам:
// Клиентский скрипт взаимодействия с ESP32-C3 по WebSocket
let socket;
function initWebSocket() {
const gateway = `ws://${window.location.hostname}/ws`;
socket = new WebSocket(gateway);
socket.onmessage = (event) => {
const data = JSON.parse(event.data);
// Реактивное обновление показаний датчика в DOM
document.getElementById('temp-value').innerText = `${data.temperature.toFixed(1)} °C`;
document.getElementById('hum-value').innerText = `${data.humidity.toFixed(1)} %`;
// Индикация активного состояния силовых реле
document.getElementById('heater-indicator').classList.toggle('active', data.tempRelay);
document.getElementById('hum-indicator').classList.toggle('active', data.humRelay);
};
socket.onclose = () => {
// Автоматическое переподключение при потере сигнала Wi-Fi
setTimeout(initWebSocket, 2000);
};
}
window.addEventListener('load', initWebSocket);
В прошивке реализован двухпозиционный регулятор с настраиваемым гистерезисом. Он предотвращает постоянный дребезг ключей при колебаниях температуры около порогового значения. Поддерживается реверс логики: режим нагрева (включение при падении ниже уставки) и режим охлаждения (включение при превышении порога). Все настройки записываются в энергонезависимую память микроконтроллера (NVS), поэтому параметры не сбрасываются при отключении питания.
Обрати внимание: при активной передаче пакетов по Wi-Fi кристалл ESP32-C3 нагревается на 2–4 градуса выше температуры окружающего воздуха. Ни в коем случае не монтируйте плату датчика AHT10 вплотную к микроконтроллеру внутри закрытого корпуса. Вынесите сенсор на отдельном четырехжильном шлейфе длиной 15–20 см наружу корпуса в зону естественной конвекции воздуха.
В результате получается надежный автономный блок, которому не страшны падения интернета, блокировки портов и сбои внешних роутеров.
