Для разработки проекта использовался фреймворк idf-esp в IDE CLion. Настройка проекта и среды для разработки в CLion:
При разработке в CLion общий конфиг в дереве проект - sdkconfig, кастомные переменные(например настройка Wi-Fi) туда нужно переносить самостоятельно. Локальные конфиги Kconfig.projbuild - в проекте не импортируются автоматически.
Для прошивки платы используется конфигурация - flash с заданным elf файлом:
Команда для запуска отладки - мониторинга:
cd ~/esp/esp-idf && . ./export.sh && cd ~/esp/plant_monitoring_project && idf.py monitor
Фреймворк esp-idf установлен в пути: ~/esp
Проект расположен в пути: ~/esp/plant_monitoring_project
Выйти из режима отладки можно с помощью комбинации CTRL
+ ]
Без IDE с плагином esp-idf можно попробовать выполнить следующие команды:
idf.py -p 1220 flash monitor # загрузка + отладка, номер порта можно увидеть подлючив плату esp и написав команду ls /dev/tty.*.
В проекте использовалась Библиотеки esp-idf включающая в себя драйверы дял работы с периферией.
- Настройка dht-драйвера (!Важно - подключать необходимо имена на порт GPIO-4, иначе может вылететь ошибка драйвера)
В проекте использовались следующие датчики:
- DHT11 - температура/влажность [С, %]
- HC-SR04 - ультразвуковой датчик, измеряющий расстояние [м] (принципиальная схема)
- TEMT6000 - освещённость [люкс]
- YL-69 - влажность почвы [%]
Алгоритм работы:
- Микроконтроллер снимает показания с датчиков по соответствующим портам GPIO
- Микроконтроллер с помощью встроенного Wi-Fi модуля отправляет эти метрики в формате JSON по протоколу mqtt на сервер
- На сервере с помощью утилиты mqtt-exporter метрики экспортируются в prometheus
- Prometheus используется в качестве источника данных в grafana и таким образом метрики появляются на борде
Station mode(STA) - режим работы, при котором устройство ESP32 подключается к существующей сети Wi-Fi, функционируя как клиент. В этом режиме ESP32 не создает свою собственную сеть, а вместо этого использует доступ к уже имеющейся точке доступа (например, роутеру) для обмена данными с другими устройствами в сети.
Пример отправки метрик температуры и влажности mqtt-брокеру без авторизации в формате JSON:
host = vm4481772.25ssd.had.wf:1883 mqtt_topic = esp32/plant_monitoring/metrics
# Задаем переменную хоста
HOST="vm4481772.25ssd.had.wf:1883"
# Определяем JSON данные
DATA='{\"temperature\":90.25,\"humidity\":46.37, \"crit_debug\":0.0}'
# Определяем топик
TOPIC="esp32/plant_monitoring/metrics"
# Формируем команду mosquitto_pub
COMMAND="mosquitto_pub -L mqtt://$HOST/$TOPIC -m \"$DATA\""
# Выполняем команду
eval "$COMMAND"
Для удобства скрипт выделен в отдельный файл. Для валидирования доставки отправки метрик можно воспользоваться MQTT-Explorer.
Настройки MQTT-explorer:
Во вкладке advanced подпишитесь на топик /esp32/plant_monitoring/metrics и удалите топик SYS.
Для деплоя сервиса был арендован виртуальный сервер. ПО протоколу ssh c помощью утилиты scp была рекурсивна перенесена директория deploy c помощью команды
shell scp -r deploy root@ip-address:~/esp
Деплой включает в себя следующие сервисы:
- mosquitto-exporter - экспортирует метрики
- prometheus - бд для хранения метрик
- grafana - сервис отображения метрик
- alertmanager - сервис настройки алертов
Дэшборд графаны выглядит следующим образом:
Доступ к системе мониторинга датчиков: