Добрый день, уважаемый читатель! В этой части я расскажу, как создать готовую прошивку на основе моего шаблона. Для начала это будет только метеостанция с удаленным управлением:
- Измерение температуры и влажности в трех точках с заданным интервалом времени
- Отправка измеренных данных на MQTT брокер в JSON-виде
- Контроль температуры в заданных пределах с уведомлениями на смартфон
Что потребуется для начала работы
Я не зря написал "кучу ненужных и бесполезных" статей на своем канале - да кому они нужны? Вот сейчас все они нам и понадобятся - в них описаны некоторые подготовительные шаги. Если вам всё это известно и не интересно, можете их пропустить; если нет - ссылки ниже. Далее все подготовительные работы по пунктам.
1. Установить Visual Studio Code и PlatformIO. В Arduino IDE собрать проект не получится
2. Потребуется собрать устройство или хотя-бы его прототип на макетной плате, чтобы можно было подключить датчики
Данный проект настроен для следующих сенсоров:
- Котел: DS18B20
- Комната: любой из HTU20D, HTU21D, SHT20, SHT21, SHT25, Si7013, Si7020, Si7021
- Улица: AM2302
Поэтому пока понадобятся именно эти датчики. Позже я, разумеется, расскажу, как можно удалить, заменить или добавить другие датчики.
3. Выбрать любой публичный MQTT брокер и создать на нём учетную запись
Если есть желание и роутер keenetic - можно ещё создать свой личный MQTT брокер, но это строго опционально
4. Зарегистрировать Telegram - бота - он понадобится для уведомлений
Так же советую ознакомиться со статьями по настройке проекта. Создавать проект вручную и настраивать ESP-IDF пока не потребуется - на GitHub имеется уже готовый настроенный проект, вся работа будет вестись только в файле project_config.h
Создаем проект из готового прототипа
Открываем ссылку проекта на GitHub:
Под строкой меню, над списком файлов, в левом углу вы найдете выпадающий список "ветвей" (branchs) проекта. Ветви будут содержать отдельные этапы проекта, соответствующие статьям. В данной статье нам нужна ветвь 01_telemeter, выбираем её в списке.
1. Создайте на диске C каталог PlatformIO, то есть C:\PlatformIO\.
Вы можете использовать любой другой диск и каталог, но в этом случае вам придется изменять настройки в нескольких файлах конфигурации. Если вы не готовы к этому, то оставьте "как есть", то есть C:\PlatformIO\.
2. На сайте GitHub скачайте репозиторий в виде ZIP-архива
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 со смартфона, через какое-то время устройство подключается к ней и вы спокойно обновляете прошивку через ОТА. Готово, "и зверей убивать не надо" (с) Простоквашино
2. Настраиваем MQTT клиент. В прошивке вы можете использовать два сервера - основной и резервный (например локальный и облачный). Цель точно та же самая, что и в случае с "запасной" WiFi сетью - не потерять управление над устройствами в случае выхода из строя основного сервера. Но для простоты в примере прошивки указан только один сервер.
- 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":
Здесь нужно указать следующие параметры:
- CONFIG_TELEGRAM_TOKEN - здесь вы указываете токен бота, который вы получили при его создании
- CONFIG_TELEGRAM_CHAT_ID_xxx - укажите идентификаторы чатов или каналов (или можно даже пользователей), куда будут отправляться уведомления соответствующей категории. И таки да, это не я ошибся, это именно так - в кавычках (строка)!
На этом начальную настройку файла конфигурации можно считать законченной. Остальные параметры пока не трогаем. Не забудьте сохранить изменения в файле.
Если вы использовали датчики, которые я указал в данной статье и подключили их, то можно уже подключать микроконтроллер к компьютеру и пробовать залить в него прошивку. Можно даже и без датчиков попробовать (даже на совершенно пустой плате DevKitC) - только вы сразу же получите кучку уведомлений об ошибках.
Первый запуск
Подключаем ESP32 к компьютеру с помощью кабеля. Лучше всего на время прошивки вынуть ESP32 из панельки на плате, иначе иногда PlatformIO не может подключиться к контроллеру.
Загружаем прошивку. После загрузки откройте монитор порта, если вы все сделали правильно, то в терминале вы должны увидеть примерно следующее:
У меня куча ошибок - "ругается" на сенсоры, которые пока никто и не думал подключать...
Если вы зарегистрировал telegram-бота, через несколько секунд должны появиться первые сообщения, в основном чате:
Не обращайте внимание на надпись "Гараж" - я просто использовал токен от неиспользуемого в данный момент устройства.
Если датчики вы еще не подключали, как и я, то в сервисном чате вы увидите уведомления от их неисправности:
Теперь давайте попробуем подключиться к MQTT-брокеру, например с помощью MQTT Explorer. Здесь вы должны увидеть примерно такую картину:
Поздравляю Вас! Вы успешно запустили первую прошивку. 👍
Можно подключить сенсоры, и проверить как они работают, если вы ещё этого не сделали.
На этом пока всё, рассказывать про структуру топиков я буду в следующей статье, так как информации достаточно много. До будущих встреч на канале!
_______________
На этом пока всё, до встречи на сайте и на dzen-канале!
👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.
📌Подпишитесь на канал и вы всегда будете в курсе новых статей.
🔶 Полный архив статей вы найдете здесь
Благодарю за вашу поддержку! 🙏