Дайджесты новостей
Макросъемка микроконтроллера ESP32-C3 с подключенным датчиком AHT10 и дисплеем веб-интерфейса смартфона на верстаке.

Климат-контроль на ESP32-C3: точка доступа, опрос датчика AHT10 и веб-интерфейс на WebSocket

В современной домашней автоматизации и сфере интернета вещей (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 см наружу корпуса в зону естественной конвекции воздуха.

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