← На главную

Автор собрал умный вентилятор на ESP32-WROVER через P2P relay без облака

07.07.2026 13:30 · hackernews

Лето, жара, ESP32. Чтобы охладиться, автор собрал умный вентилятор без единого облачного сервиса. Основа — ESP32-WROVER с 4 MiB PSRAM и библиотека iroh, которая поднимает прямое peer-to-peer соединение через релейный сервер. Весь код на Rust.

Сначала скопировали echo-пример из iroh-esp32-examples, переименовали в server-smart-fan и smart-fan-cli. При первом запуске компилируется всё, включая xtensa-операционку, это долго, но потом кешируется. Прошивка заливается через USB-C, заняла 95,75% флеш-памяти — почти под завязку, но чистые Rust-зависимости типа irpc добавляют мало.

После старта ESP32 получает локальный IP от DHCP и через QAD выбирает ближайший релейный сервер. Эндпоинт-id стабильный благодаря сохранению секретного ключа в NVS — не сбрасывается при перезагрузке. Появляется short ticket, который позволяет подключаться из любой точки мира через relay.

Дальше — датчик DHT22 (температура и влажность). Три провода: +3.3V, GND и GPIO 26. Питание с USB даёт ~100 mA — DHT22 хватает. Выводят показания через tracing.

Для удалённого опроса добавили irpc-протокол smart-fan/sensor/0 с вызовом GetLatest. На сервере — Arc>>, клиент просто читает. Можно совмещать несколько протоколов через Router — echo тоже оставили.

Самое интересное — GUI на WebAssembly, вставлен прямо в статью. Никаких приложений, просто браузер. Пастишь ticket — видишь температуру и влажность в реальном времени.

Потом подключили выход — вентилятор Noctua NF-A14-5V (или LED с резистором ~330 Ω). Логика: если температура выше порога и гистерезис — вентилятор включается. Порог можно менять через новый RPC-метод SetThreshold, но с авторизацией: в коде зашит секрет FAN_API_SECRET.

Для совместимости старых GUI новые методы добавляли в конец enum протокола — postcard несамоописываемый, так что менять порядок нельзя. А ещё напечатали на 3D-принтере корпус, куда вклеили breadboard с ESP32-S3 (GPIO переразвели). Снаружи QR-код на read-only UI, внутри — с секретом для управления.

В итоге — полностью локаьный IoT-девайс, который висит на relay, но не требует облака. Подключай любые сенсоры и актуаторы — ESP32 гибкий, как Lego. Исходники и STL-модель корпуса доступны в репозитории iroh-smart-fan.

Читать оригинал →