ESP8266. Уличная метеостанция

espressifЛогичное продолжение предыдущего поста по настройке ESP8266-07 для работы с датчиками DHT22 и BMP085 при помощи прошивки NodeMCU. Данная метеостанция представляет собою набор из собранных вместе готовых модулей — ESP8266-07, DHT22, BMP180 и DC-DC преобразователя на базе микросхемы LM2596HV. Все компоненты были приобретены в магазине arduino-ua.com. Для корпуса был выбрана коробка из АБС пластика с фланцами для настенного монтажа производства Gainta (модель G203MF).

Уличная метеостанция на ESP8266

Уличная метеостанция на ESP8266

Устройство содержит такие датчики как BMP180 и AM2302 (DHT22), которые позволяют регистрировать следующие параметры окружающей среды:

  • Давление 300…1100 hPa (30…110kPa)
  • Температура -40…+80 °C
  • Влажность 0…100%

Питание устройства осуществляется при помощи сетевого адаптера AC-DC 220В-9В(5В), напряжение которого после дополнительно преобразуется DC-DC преобразоваетелем в напряжение питания 3,3В.

weather-station

ESP8266. Уличная метеостанция (компоновка в корпусе)

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

  • DHT22 dataPin -> pin7 (Node-MCU) GPIO13 (ESP8266-07)
  • BMP180 sda -> pin1 (Node-MCU) GPIO5/sdl -> pin2 (Node-MCU) GPIO4

Устройство управляется набором lua-скриптов, их можно найти на моем github. Скрипты не отличаются особой оригинальностью и собраны на основе исходников найденых в сети (ссылки на исходники приведены в описании). За начальную инициализацию устройства и его подключение к WiFi отвечает модуль init.lua (подключение со статическим IP 192.168.0.100), он же запускает веб-сервер server.lua и скрипт основного программного цикла do.lua.

wifi.setmode(wifi.STATION)
print("Подключаемся к сети %название_сети%")
wifi.sta.config("%название_сети%","%пароль_сети%")
wifi.sta.connect()
wifi.sta.setip({ip="192.168.0.100",netmask="255.255.255.0",gateway="192.168.0.1"})

print("Настройка ESP8266: " ..wifi.getmode())
print("MAC адрес модуля: " ..wifi.ap.getmac())
print("IP модуля "..wifi.sta.getip())

dofile("server.lua")
collectgarbage()
dofile("do.lua")

Основной программный цикл do.lua выполняется каждые 30 секунд.

tmr.alarm(1, 30000, 1, function()
    print("-----------------------------------")
    print("Читаем датчики")
    dofile("dht22.lua")
    collectgarbage()
    dofile("bmp085.lua")
    collectgarbage()
    dofile("string_p.lua")
    print(string.format("t = %s;h = %s;p = %s",t,h,p))
    collectgarbage()
    dofile("thingspeak.lua")
    collectgarbage()
    end
)

Этот модуль последовательно опрашивает датчик DHT22, потом BMP180, подготавливает данные полученные от датчика давления (преобразует исходное значение кПа в мм.рт.ст) и отправляет результаты на сервис — thingspeak.com. Работа с датчиками рассмотрена подробнее в посте ESP8266. Привет мир. Данные этой метеостанции (метеограммы) можно увидеть на странице — Метео.

Файлы:
1. Datasheet BMP180
2. Datasheet DHT22
3. Проект на github.com