Проект решает задачу мониторинга температуры и влажности на удаленной площадке, в моем случае на даче. Для этого был собран метеозонд, который достаточно подключить к питанию.
Для проекта были использованы:
- Контроллер ESP8266 NodeMCU
- Датчик температуры и влажности DHT22
- Резистор на 10кОм
- Одноплатный компьютер Raspberry Pi
- Кроссплатформенный мессенджер Telegram
Telegram | Grafana |
---|---|
![]() |
![]() |
Передача данных происходит через однопроводный протокол, требующий точной синхронизации.
Для получения данных используется библиотека DHTesp.
Для подключения к WiFi - библиотека ESP8266WiFi.
Для Web сервера - библиотека ESP8266WebServer.
Скетч для NodeMCU в файле https://github.com/shrainer/weather_balloon/blob/main/nodemcu.ino
На одноплатном компьютере запущен скрипт bot.py, демонизированный с помощью Supervisor.
Скрипт выполняет следующие функции:
Слушает команды в Telegram. В случае получения команды /meteo получает данные с NodeMCU и отправляет их в чат.
if command == '/meteo':
TelegramBot.send_message(cid, "Запрашиваю данные, жди")
try:
resp = requests.get(node_mcu)
resp = resp.text
resp = resp.split(',')
MSG = "Температура: " + resp[0] + "°С\nВлажность: " + resp[1] + "%"
except Exception as e:
MSG = "Получить данные не удалось"
TelegramBot.send_message(cid, MSG)
Раз в 30 минут получает данные с NodeMCU и отправляет их в базу данных InfluxDB, откуда они визуализируются с помощью Grafana.
try:
grafana_req = requests.get(node_mcu)
grafana_req = grafana_req.text
grafana_req = grafana_req.split(',')
data_field="METEO,host=DACHA temperature=" + grafana_req[0] + ",humidity=" + grafana_req[1]
grafana_curl = 'curl -i -XPOST "http://localhost:8086/write?db=TVSHOW" --data-binary "' + data_field + '"'
os.system(grafana_curl)
time.sleep(1800)
Весь скрипт для Raspberry в файле https://github.com/shrainer/weather_balloon/blob/main/bot.py