Найти тему
K12 :: О ESP32 и не только

Термостат на ESP32 с удаленным управлением. Часть 3. Телеметрия

Оглавление

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

  • Измерение температуры и влажности в трех точках с заданным интервалом времени
  • Отправка измеренных данных на MQTT брокер в JSON-виде
  • Контроль температуры в заданных пределах с уведомлениями на смартфон

Что потребуется для начала работы

Я не зря написал "кучу ненужных и бесполезных" статей на своем канале - да кому они нужны? Вот сейчас все они нам и понадобятся - в них описаны некоторые подготовительные шаги. Если вам всё это известно и не интересно, можете их пропустить; если нет - ссылки ниже. Далее все подготовительные работы по пунктам.

1. Установить Visual Studio Code и PlatformIO. В Arduino IDE собрать проект не получится

Установка PlatformIO
Автоматизация на ESP32 & ESP-IDF19 сентября 2022

2. Потребуется собрать устройство или хотя-бы его прототип на макетной плате, чтобы можно было подключить датчики

Данный проект настроен для следующих сенсоров:

  • Котел: DS18B20
  • Комната: любой из HTU20D, HTU21D, SHT20, SHT21, SHT25, Si7013, Si7020, Si7021
  • Улица: AM2302

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

3. Выбрать любой публичный MQTT брокер и создать на нём учетную запись

Если есть желание и роутер keenetic - можно ещё создать свой личный MQTT брокер, но это строго опционально

4. Зарегистрировать Telegram - бота - он понадобится для уведомлений

Так же советую ознакомиться со статьями по настройке проекта. Создавать проект вручную и настраивать ESP-IDF пока не потребуется - на GitHub имеется уже готовый настроенный проект, вся работа будет вестись только в файле project_config.h

Создание PlatformIO / ESP-IDF проекта и настройка platformio.ini
Автоматизация на ESP32 & ESP-IDF26 сентября 2022

Создаем проект из готового прототипа

Открываем ссылку проекта на GitHub:

GitHub - kotyara12/telemeter_dzen: Термостат + охранно-пожарная сигнализация

Под строкой меню, над списком файлов, в левом углу вы найдете выпадающий список "ветвей" (branchs) проекта. Ветви будут содержать отдельные этапы проекта, соответствующие статьям. В данной статье нам нужна ветвь 01_telemeter, выбираем её в списке.

Выберите 01_telemeter
Выберите 01_telemeter

1. Создайте на диске C каталог PlatformIO, то есть C:\PlatformIO\.

Вы можете использовать любой другой диск и каталог, но в этом случае вам придется изменять настройки в нескольких файлах конфигурации. Если вы не готовы к этому, то оставьте "как есть", то есть C:\PlatformIO\.
Создайте на диске C каталог PlatformIO
Создайте на диске C каталог PlatformIO

2. На сайте GitHub скачайте репозиторий в виде ZIP-архива

Ссылка на скачивание находится в меню Code
Ссылка на скачивание находится в меню Code

3. Переместите архив в папку C:\PlatformIO\ и распакуйте его. У вас должно получиться примерно следующее:

Извлечение файлов из архива
Извлечение файлов из архива

4. Переименуйте папку в telemeter_dzen, "обрезав хвост". Архив тоже можно удалить, за ненадобностью.

Почти все готово
Почти все готово

5. Внутри папки найдете файл "libs_local_xxxxx.zip", переместите его в C:\PlatformIO\ и распакуйте. У вас должно получиться так:

Теперь всё готово
Теперь всё готово

6. Запустите VS Code и откройте папку проекта C:\PlatformIO\telemeter_dzen через меню "Файл" - "Открыть папку".

Все готово к работе
Все готово к работе

7. Подождите, пока пропадет надпись "Loading tasks..." и попробуйте скомпилировать проект, нажав кнопку "PlatformIO : Build" ✔ на нижней панели. Если вы всё сделали правильно, через несколько минут вы должны получить в терминале такое сообщение:

Проект успешно скомпилирован
Проект успешно скомпилирован

Настройка проекта

Теперь нужно настроить проект под ваши данные.

Откройте файл include\project_config.h и начинайте внимательно его просматривать:

Файл конфигурации проекта
Файл конфигурации проекта

Что здесь нужно изменить? Там очень много различных параметров, но не все нужно сразу же изменять, в этой статье я обращу внимание на самые основные. Можете ориентироваться по номерам строк в файле.

1. Находим раздел "WiFi сети" и настраиваем параметры подключения к WiFi. Я рекомендую использовать режим нескольких сетей:

Настройка WiFi сетей
Настройка WiFi сетей

Укажите здесь все доступные вашему устройству WiFi сети и пароли к ним. Лишние снизу обязательно закомментируйте.

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

Я настоятельно рекомендую добавить в этот список "запасную" WiFi сеть, которую вы можете "раздать" с вашего мобильного устройства. Зачем? Представьте себе ситуацию: вы создали устройство, отладили и установили внутри какого-то ящика глубоко-далеко. Например внутри кухонной вытяжки или в гараже. Достать конечно можно, но очень долго и очень неохота... И надо же такому случиться - вышел из строя ваш любимый роутер, и вам пришлось заменить его чем-то другим. Как перепрошить устройство на новую сеть? Вот тут и придет на помощь ваша "запасная" сеть - вы раздаете wifi со смартфона, через какое-то время устройство подключается к ней и вы спокойно обновляете прошивку через ОТА. Готово, "и зверей убивать не надо" (с) Простоквашино

2. Настраиваем MQTT клиент. В прошивке вы можете использовать два сервера - основной и резервный (например локальный и облачный). Цель точно та же самая, что и в случае с "запасной" WiFi сетью - не потерять управление над устройствами в случае выхода из строя основного сервера. Но для простоты в примере прошивки указан только один сервер.

Параметры подключения к MQTT брокеру
Параметры подключения к MQTT брокеру
  • CONFIG_MQTT1_HOST - здесь указываем имя или адрес сервера (без префиксов "ssl://" и 'tcp://')
  • CONFIG_MQTT1_PORT_TCP - здесь указываем порт сервера по протоколу TCP без использования шифрования (стандартное значение 1888)
  • CONFIG_MQTT1_PORT_TLS - здесь указываем порт сервера по протоколу TLS c использованиtv шифрования (стандартное значение 8888)
  • CONFIG_MQTT1_USERNAME - укажите логин подключения к брокеру
  • CONFIG_MQTT1_PASSWORD - укажите пароль подключения к брокеру
  • CONFIG_MQTT1_TLS_ENABLED - поставьте 1, если нужно использовать безопасное подключение или 0 - передавать всё в открытом виде. Параметры сертификата сервера пока не трогаем, для большинства облачных брокеров подходят настройки "по умолчанию". Проверка TLS серnификатов в ESP-IDF довольно заумная тема, она требует отдельной большой статьи
  • CONFIG_MQTT1_PUB_LOCATION - локация для публичных топиков. Локация определяет, где установлено устройство, например "office" или "village"
  • CONFIG_MQTT1_LOC_LOCATION - локация локальных топиков. Локальные топики используются только для взаимного обмена данными между устройствами и не должны быть использованы внешним пользователем
  • CONFIG_MQTT1_PUB_DEVICE и CONFIG_MQTT1_LOC_DEVICE - название устройства для публичных и локальных топиков. Если Вам нужна более сложная структура, чем "location/device/...", вы можете прописать здесь что-то вроде "home/toilet" или "home/kitchen"
  • CONFIG_MQTT1_PUB_PREFIX и CONFIG_MQTT1_LOC_PREFIX - постоянный префикс всех топиков для данного брокера. Некоторые публичные брокеры требуют, чтобы топик начинался с определенной строки, например "/" или "user1233445/" - вот эти данные и следует здесь указать, если необходимо. Если такой необходимости нет - закомментируйте эти строки.
В отличие от WiFi резервный сервер - только временная замена основному. Если устройство переключилось на резервный сервер, то через 5-15 минут (в зависимости от настроек), оно попытается переключиться на основной сервер.

3. Настраиваем уведомления в Telegram. Надеюсь, вы создали бота в telegram? Если нет, самое время это сделать. Находим раздел "Уведомления в Telegram":

Уведомления в Telegram
Уведомления в Telegram

Здесь нужно указать следующие параметры:

  • CONFIG_TELEGRAM_TOKEN - здесь вы указываете токен бота, который вы получили при его создании
  • CONFIG_TELEGRAM_CHAT_ID_xxx - укажите идентификаторы чатов или каналов (или можно даже пользователей), куда будут отправляться уведомления соответствующей категории. И таки да, это не я ошибся, это именно так - в кавычках (строка)!

На этом начальную настройку файла конфигурации можно считать законченной. Остальные параметры пока не трогаем. Не забудьте сохранить изменения в файле.

Если вы использовали датчики, которые я указал в данной статье и подключили их, то можно уже подключать микроконтроллер к компьютеру и пробовать залить в него прошивку. Можно даже и без датчиков попробовать (даже на совершенно пустой плате DevKitC) - только вы сразу же получите кучку уведомлений об ошибках.

Первый запуск

Подключаем ESP32 к компьютеру с помощью кабеля. Лучше всего на время прошивки вынуть ESP32 из панельки на плате, иначе иногда PlatformIO не может подключиться к контроллеру.

Загружаем прошивку. После загрузки откройте монитор порта, если вы все сделали правильно, то в терминале вы должны увидеть примерно следующее:

Отладочный вывод в монитор порта (сенсоры пока не подключены)
Отладочный вывод в монитор порта (сенсоры пока не подключены)

У меня куча ошибок - "ругается" на сенсоры, которые пока никто и не думал подключать...

Если вы зарегистрировал telegram-бота, через несколько секунд должны появиться первые сообщения, в основном чате:

Сообщение о запуске устройства в основном чате
Сообщение о запуске устройства в основном чате

Не обращайте внимание на надпись "Гараж" - я просто использовал токен от неиспользуемого в данный момент устройства.

Если датчики вы еще не подключали, как и я, то в сервисном чате вы увидите уведомления от их неисправности:

Если сенсоры у вас еще не подключены, то вы получите примерно такие уведомления об их неисправности
Если сенсоры у вас еще не подключены, то вы получите примерно такие уведомления об их неисправности

Теперь давайте попробуем подключиться к MQTT-брокеру, например с помощью MQTT Explorer. Здесь вы должны увидеть примерно такую картину:

Структура топиков, генерируемых устройством
Структура топиков, генерируемых устройством

Поздравляю Вас! Вы успешно запустили первую прошивку. 👍

Можно подключить сенсоры, и проверить как они работают, если вы ещё этого не сделали.

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

_______________

На этом пока всё, до встречи на сайте и на dzen-канале!

👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.

📌Подпишитесь на канал и вы всегда будете в курсе новых статей.

🔶 Полный архив статей вы найдете здесь

Благодарю за вашу поддержку! 🙏