Открытая IoT-экосистема на базе ESP32: сенсорные модули измеряют климат, микроконтроллер собирает данные, а приложение показывает всё в реальном времени.
…
Каждый сенсорный модуль передаёт данные по UART на главный контроллер, который публикует их в MQTT и сохраняет на SD-карту для истории.
Масштабируемая модульная конструкция: от одного датчика до десятков комнат.
Добавляйте сенсорные модули без перепрошивки — система сама их обнаружит по I²C/UART и зарегистрирует.
Данные идут по MQTT, WebSocket и REST одновременно. Приложение выбирает оптимальный канал.
История пишется на SD-карту при каждом чтении. Даже при пропаже сети данные не теряются.
Пороговые уведомления: температура выше нормы, влажность упала — приложение сразу покажет проблему.
Режимы 1ч / 6ч / 24ч / 7д / 30д с минимальными, средними и максимальными значениями.
Команды re-scan, чтение сенсоров и перезагрузка устройства — прямо из мобильного приложения.
Как прошить прошивку, настроить Wi-Fi и соединить модули между собой.
Код лежит в репозитории проекта, папка firmware/. Для каждого контроллера своя прошивка:
Среда сборки — PlatformIO. Из командной строки:
cd firmware/main_controller
pio run -e esp32-c3 # сборка
pio run -t upload --upload-port COM5 # прошивка на плату
cd firmware/sensor_module
pio run -e esp32-c6 # сборка
pio run -t upload --upload-port COM6 # прошивка на плату
Или через мобильное/десктопное приложение: раздел «Прошивка» → выбрать папку, устройство, COM-порт (кнопка «Определить чип» покажет фактический ESP32-C3/C6) → «Собрать» → «Загрузить».
При первом старте главный контроллер поднимает точку доступа IoT-Setup-XXXX без пароля.
Если нужно переподключить к другой сети — отправьте устройству команду переконфигурации через приложение (Wi-Fi → «Сброс Wi-Fi»), оно снова вернётся в режим точки доступа.
Сенсорный модуль (ESP32-C6) передаёт данные главному контроллеру (ESP32-C3) по UART 115200 бод. Пин TX каждого контроллера соединяется с RX другого (перекрёстно):
| Главный контроллер · ESP32-C3 | Сенсорный модуль · ESP32-C6 | |
|---|---|---|
| GPIO5 (TX, Serial1) | → | GPIO4 (RX, Serial1) |
| GPIO4 (RX, Serial1) | ← | GPIO5 (TX, Serial1) |
| GND | — | GND |
| 5V / VIN | — | 5V / VIN |
Сенсоры BME680 (температура, влажность, давление, качество воздуха) и BH1750 (освещённость) подключаются к шине I²C: SDA, SCL, питание 3.3V и общий GND. Ниже раскладка отдельно для каждой платы.
| Контакт | Пин ESP32-C3 | Подключение |
|---|---|---|
| SDA | GPIO6 | BME680 SDA · BH1750 SDA |
| SCL | GPIO7 | BME680 SCL · BH1750 SCL |
| VCC | 3.3V (BME680, BH1750) | |
| GND | общий с платой | |
C3 работает и без сенсорного модуля C6: датчики на его собственной шине I²C, данные публикуются по Wi-Fi/MQTT, история — на SD-карту (CS — GPIO10).
| Контакт | Пин ESP32-C6 | Подключение |
|---|---|---|
| SDA | GPIO6 | BME680 SDA · BH1750 SDA |
| SCL | GPIO7 | BME680 SCL · BH1750 SCL |
| VCC | 3.3V (BME680, BH1750) | |
| GND | общий с платой | |
C6 сам Wi-Fi не использует — он передаёт метрики по UART главному контроллеру (шаг 3). Состояние показывает светодиод на GPIO8 (мигает при активной передаче).
| Пин | Назначение | ESP32-C3 (главный) | ESP32-C6 (модуль) |
|---|---|---|---|
| GPIO4 | UART RX (Serial1) | ✓ | ✓ |
| GPIO5 | UART TX (Serial1) | ✓ | ✓ |
| GPIO6 | I²C SDA | ✓ | ✓ |
| GPIO7 | I²C SCL | ✓ | ✓ |
| GPIO8 | Светодиод статуса | — | ✓ |
| GPIO10 | SD-карта (CS) | ✓ | — |
| Подключение | Пин | Детали |
|---|---|---|
| GPIO8 → светодиод | GPIO8 | уровень 3.3 В, ток ~12 мА макс. |
| Анод (через резистор) | 220–330 Ом | защита светодиода от перегрузки по току |
| Катод → GND | GND | общий с платой |
| Контакт модуля | Пин ESP32-C3 | Детали |
|---|---|---|
| CS | GPIO10 | задано в прошивке: SD_CS 10 (config.h) |
| SCK | GPIO2 | SPI-шина платы по умолчанию |
| MOSI (DI) | GPIO4 | SPI-шина платы по умолчанию |
| MISO (DO) | GPIO3 | SPI-шина платы по умолчанию |
| VCC | 3.3V | модули с преобразователем допускают 5V |
| GND | GND | общий с платой |
Схема A — соединение главного контроллера и сенсорного модуля по UART (пины TX/RX подключаются перекрёстно):
Схема B — шина I²C: оба датчика висят на одних линиях SDA=GPIO6 и SCL=GPIO7:
Что нужно для сборки: стартовый комплект на одну точку + один сенсорный модуль.
| Компонент | Кол-во | Где используется | Примечание / замена |
|---|---|---|---|
| ESP32-C3-DevKit (Lolin C3 mini) | 1 | Главный контроллер | Wi-Fi/MQTT, SD, I²C; подойдёт любой C3-devkit |
| ESP32-C6-DevKitC-1 | 1+ | Сенсорный модуль | По одному на каждую комнату/модуль |
| Датчик BME680 (модуль) | 1+ | Температура, влажность, давление, IAQ | Модуль удобнее голого чипа: есть подтяжки и стабилизатор |
| Датчик BH1750 (модуль) | 1+ | Освещённость | I²C, адрес 0x23 |
| Модуль microSD | 1 | История на главном контроллере | CS → GPIO10 |
| microSD-карта | 1 | Логи (CSV) | FAT16/FAT32, от 1 ГБ |
| Светодиод + резистор 220–330 Ом | 1 | Индикация на C6 | Анод → GPIO8; на DevKit есть встроенный RGB |
| Провода Dupont (мама-мама / папа-мама) | комплект | Соединения GPIO | ~20 см, не тяните длинные линии |
| Питание 5 В: блок или USB-кабели | 1–2 | Платы и модули | От 1 А на контроллер |
Порядок закупки: платы → датчики → карта памяти → провода и питание. При расширении системы добавляется только нужное количество модулей C6 и датчиков — главный контроллер остаётся один.