Своими рукамипрактическая инструкция

ESP32 на столе. Готовим подключение к нашему дашборду

Редакция Фермозавра·24 октября 2026 г.·8 мин чтения

Плата ESP32 уже на столе, датчики ещё в пути. Разбираем, как она будет отдавать показания в дашборд по USB, Wi‑Fi или Bluetooth, и почему молчание датчика — это не ноль.

ESP32 на столе. Готовим подключение к нашему дашборду

В прошлой статье мы показали первую версию нашего дашборда: карточки с показаниями, графики, журнал и предупреждения. Пока числа в него вводятся вручную. Теперь пора подготовить следующий шаг — передачу данных от настоящей платы ESP32.

Плата у нас уже есть. Датчики ещё в пути, а прошивку на физической плате мы пока не проверяли. Поэтому сегодня не будем изображать работающую метеостанцию. Вместо этого разберёмся, как ESP32 будет общаться с уже готовым дашбордом, как повторить подключение и почему отсутствие измерения — это не ноль.

Один экран, два способа получить показания

В прошлый раз мы вводили значения через форму «Строка в журнал». В будущем ту же работу будет делать ESP32: считывать датчики и отправлять их показания программе станции.

Цепочка выглядит так:

Датчик → ESP32 → USB, Wi-Fi или Bluetooth → компьютер со станцией → журнал → карточки и графики дашборда.

Новый интерфейс создавать не нужно. Дашборду безразлично, ввёл ли человек температуру вручную или она пришла от платы: важны корректные поля измерения. Но есть принципиальная разница между подготовленной схемой передачи и уже проверенной передачей с реального устройства. Пока мы проверили приём данных программой, а не весь путь от физической ESP32.

Почему нельзя просто отправить число 23,4

Представим, что несколько человек собирают одинаковые стенды. Один датчик показывает 23,4 °C, другой — 23,8 °C. Чтобы сравнить результаты, мало записать сами числа. Нужно знать, какая станция их прислала, каким датчиком они получены, что измерялось и в каких единицах.

Поэтому каждая запись содержит пять основных полей:

Поле Пример Что означает
node_id station Идентификатор станции или узла
sensor_id SHT40-A Идентификатор конкретного датчика
quantity air_temperature Что измерено: например, температура воздуха
unit celsius Единица измерения
value 1.4 Значение, действительно полученное от датчика

В программе для температуры воздуха используется air_temperature и celsius, для относительной влажности — relative_humidity и percent_rh, для температуры опорного датчика — reference_temperature и celsius.

Температура, влажность и показание опорного Pt100 — это отдельные записи. Так проще сопоставлять разные датчики и не путать их результаты.

Вот как выглядит пример будущего настоящего показания:

{"node_id":"station","sensor_id":"SHT40-A","quantity":"air_temperature","unit":"celsius","value":1.4}

Это пример формата, не показание, снятое с нашей платы. Программа станции принимает такие записи через POST /api/readings. При необходимости к ним можно добавить название опыта и заметку. Если время не передано, важно понимать: время приёма на компьютере не обязательно совпадает с моментом измерения датчиком.

Если датчик молчит, это не ноль градусов

Представьте, что датчик в теплице перестал отвечать. Если программа нарисует на графике ноль, получится ложный сигнал о похолодании. Если оставит старые 22 °C без указания, что данные устарели, можно пропустить реальное изменение температуры.

Поэтому мы разделяем показание и сообщение о состоянии оборудования. Для отсутствия ответа предусмотрено, например, такое диагностическое сообщение:

{"event":"bus_empty","note":"на шине никто не ответил"}

Это не измерение, и в журнал показаний его записывать нельзя. Отсутствие ответа ещё не доказывает, что датчика нет: причиной могут быть питание, соединение, адрес или неисправность. В текущей схеме сообщение остаётся диагностикой, а не температурой на экране. Полноценный контроль устаревших данных и отдельный журнал ошибок — дальнейшие задачи.

Как ESP32 передаст данные в дашборд

Как ESP32 передаёт показания в дашборд: USB, Wi-Fi, Bluetooth и общий журнал

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

1. USB: начинаем с кабеля

Для первых испытаний это самый простой путь: не нужно настраивать домашнюю сеть или сопряжение Bluetooth.

Откройте терминал в корне скачанного репозитория Fermozavr DIY и запустите станцию:

python3 station/server.py

Затем откройте в браузере http://127.0.0.1:8321. Это наш знакомый дашборд.

Когда прошивка будет загружена на ESP32, подключите её USB-кабелем и во втором терминале запустите мост последовательного порта:

python3 station/line_in.py /dev/ttyUSB0

В Linux порт может называться /dev/ttyACM0; на Windows и macOS имена будут другими. Мост нужен потому, что браузер сам по себе не читает USB-порт ESP32: отдельная программа принимает строки от платы и передаёт измерения локальному серверу.

Что должно произойти после подключения датчика: новое корректное показание появится в журнале станции; карточки и графики, настроенные на соответствующий датчик и параметр, смогут его показать. Пока датчиков нет, ждать настоящих чисел не следует.

2. Wi-Fi: без кабеля между платой и компьютером

Здесь ESP32 отправляет показания непосредственно на адрес компьютера, где работает станция. Например:

http://192.168.1.10:8321/api/readings

Адрес 192.168.1.10 — только пример. Нужно указать реальный IP-адрес своего компьютера. Адрес 127.0.0.1 в прошивке не подойдёт: для ESP32 он означает саму ESP32, а не ноутбук.

По умолчанию сервер принимает соединения только с самого компьютера. Чтобы разрешить приём из локальной сети, запустите его так:

FVZ_HOST=0.0.0.0 python3 station/server.py

Внимание: у этого экспериментального входа нет авторизации. Используйте его только в доверенной локальной сети; не открывайте порт в интернет и не запускайте такой режим в публичной Wi-Fi-сети. Пароль своей сети указывайте в локальном конфигурационном файле, а не публикуйте в репозитории.

3. Bluetooth: ещё один вариант для стенда

На исходных ESP32 с поддержкой Bluetooth Classic можно использовать последовательное Bluetooth-соединение. В подготовленной прошивке имя устройства — Fermozavr-TRH. Это не BLE.

После сопряжения компьютер получает последовательный порт, а дальше работает тот же мост line_in.py. На Linux это может быть /dev/rfcomm0; в других системах способ создания порта отличается.

Важно: ESP32-S3 и ESP32-C3 не поддерживают используемый здесь профиль Bluetooth Classic. Для них остаются USB и Wi-Fi. Подробности конфигурации и команды для вашей системы мы будем поддерживать в документации станции.

Где выбирать способ связи

Прошивка находится в каталоге firmware/fermozavr_recorder/. В одной сборке используется один путь передачи: USB, Wi-Fi или Bluetooth. Режим задаётся в config.h; пример настроек без секретов — config.example.h.

Для обычного ESP32 в Arduino IDE выбирается плата ESP32 Dev Module. Базовые компоненты Wire, WiFi и BluetoothSerial входят в соответствующее ядро ESP32 для Arduino, но доступность Bluetooth зависит от модели микроконтроллера.

В подготовленной конфигурации опрос намечен раз в десять секунд. Это не означает, что у нас уже есть десятисекундный ряд настоящих измерений. Когда датчики появятся, проверим работу драйверов и реальный интервал опроса. Ускоренный опрос во время испытаний росой — отдельный этап.

Как проверить соединение и не обмануть себя

Проверку удобно разделить на три части.

Сначала — дашборд. Запустите станцию и добавьте тестовое измерение через форму «Строка в журнал». Убедитесь, что оно появляется в журнале и соответствующей карточке или графике. Это проверка программы, не ESP32.

Затем — связь с платой. После загрузки прошивки убедитесь, что выбранный канал работает и диагностические строки доходят до компьютера или отображаются в последовательном мониторе. Если датчиков пока нет, программа может сообщить, что на шине никто не ответил. Такое сообщение не должно создавать температурную точку на графике.

Наконец — настоящее измерение. Только после подключения поддерживаемого датчика, добавления и проверки его драйвера можно ждать реального value в журнале. Именно этот этап мы пока не объявляем завершённым.

Если ничего не получилось, полезно записать модель ESP32, операционную систему, название порта, выбранный канал и точный текст ошибки. По этим данным искать причину гораздо проще, чем по сообщению «не работает».

Куда подключим датчики

Пока у нас есть предварительное назначение выводов для исходного ESP32, а не проверенная монтажная схема конкретных модулей:

Сигнал GPIO
I²C SDA, затем мультиплексор TCA9548A 21
I²C SCL 22
DS18B20, отдельная линия 1-Wire 4
MAX31865 CS 5
MAX31865 SCK 18
MAX31865 MISO 19
MAX31865 MOSI 23

SHT40, SHT45, BME280 и AHT20 планируем подключать по I²C через мультиплексор: у части модулей совпадают адреса, и их нужно развести по каналам. DS18B20 использует отдельную линию 1-Wire, а опорный Pt100 подключается через MAX31865 по SPI.

Пока датчики не приехали, прошивка не измеряет температуру или влажность: она только готовит передачу данных и проверку доступности устройств. Ответ на I²C-адрес ещё не равен корректному измерению. Для Pt100 через MAX31865 нужен отдельный драйвер и проверка чтения преобразователя.

Сами датчики будем размещать примерно в 20–30 см от платы, чтобы тепло ESP32 меньше влияло на измерение температуры воздуха. Окончательную схему подключения опубликуем после проверки реальных модулей.

Что у нас есть на этом этапе

Теперь мы можем описать всю будущую цепочку — от датчика до графика — без предположений о том, какие числа якобы уже получены. Есть работающий локальный дашборд, формат записей, приём показаний через API и подготовленные варианты связи с ESP32. Но прошивка на нашей физической плате и получение данных от настоящих датчиков ещё требуют проверки.

Исходники и инструкции доступны в репозитории Fermozavr DIY. Если у вас уже есть ESP32, напишите, какая именно модель и какой способ подключения удобнее: USB, Wi-Fi или Bluetooth. Оставить ответ можно через страницу участия или по адресу info@fermozavr.ru. За короткими новостями о сборке следите в канале «Фермозавр».

Что дальше

Следующий шаг — залить прошивку на плату, проверить канал передачи и подключить первый настоящий датчик. Тогда вместо тестовых строк появятся измерения, которые можно будет сравнивать. После этого вернёмся к запланированным испытаниям: лёд из дистиллированной воды, комнатные условия, солевые точки и роса. Для опыта FVZ-EXP-001 нам важны не красивые цифры, а воспроизводимые результаты.

Fermozavr DIY — открытый проект. Исходный код и условия использования опубликованы в репозитории. Программное обеспечение предназначено для самостоятельного изучения и экспериментов; коммерческое использование регулируется лицензией проекта.

📷 Фотогалерея

💬 Комментарии

Чтобы оставить комментарий, войдите или зарегистрируйтесь

Загрузка комментариев...

Похожие статьи