Рубрики
Блог Мои проекты

Простая домашняя метеостанция на базе ESP8266 NodeMCU

Spread the love

Простая домашняя метеостанция на ESP8266 NodeMCU, прогноз погоды и доступ через Интернет — для начала объясню, что именно я реализовал в проекте, описанном в данной публикации. Элементарная домашняя погодная станция, которая отображает текущую температуру и влажность воздуха, атмосферное давление и высоту (очень приблизительную) над уровнем моря, а также доступна через локальную Wi-Fi сеть и даже из Интернета, может быть без проблем реализована с помощью микроконтроллера ESP8266 NodeMCU. Одними из самых больших плюсов данного микроконтроллер является наличие встроенного Wi-Fi модуля, что позволяет играть в Интернет Вещей не выходя из дома. Также в рамках данного проекта мы будем получать информацию о погоде и отображать ее вместе с показаниями датчиков на веб-сервере реализованном на ESP8266.

Необходимое оборудование:

  1. Микроконтроллер ESP8266 (модель ESP-12E NODEMCU);
  2. Датчик давления и температуры BMP280;
  3. Цифровой термометр DS18B20;
  4. Датчик температуры и влажности DHT11;
  5. Макетная плата, проводники.

Настройку и программирование микроконтроллера ESP8266 здесь рассматривать не буду, ведь Интернет переполнен разного рода инструкциями как это делать. Свой NODEMCU я программировал через Arduino IDE. Также не буду подробно останавливаться над подключением необходимых библиотек. Данная публикация является лишь компиляцией нескольких интересных статей, ссылки на которые можно найти внизу, с определенным доработкой, а главное с добавлением некоторых довольно полезных интересных функциональных возможностей таких как доступ к показаниям подключенных датчиков с Интернета и прогнозирование погоды с помощью API вызовов к сервису, который предоставляет доступ к метео данным со всего мира.

Разделим процесс построения метеостанции на несколько этапов: 

  1. Подключение датчиков к микроконтроллеру;
  2. Программирование микроконтроллера;
  3. Подключение микроконтроллера к локальной Wi-Fi сети и отображения показаний датчиков по обращению к ESP8266 по IP адресу;
  4. Открытие доступа к показаниям датчиков из сети Интернет;
  5. Отображение прогноза погоды.

1. Подключение датчиков к микроконтроллер

В общем и BMP280 и DS18B20 и DHT11 пригодны как датчики температуры, но точность измерения у них разная. Поэтому непосредственно для определения температуры воздуха я использовал DS18B20, для измерения влажности воздуха — DHT11, а для определения атмосферного давления и высоты (которая в свою очередь исчисляется с температуры и давления) — модуль BMP280. Схема подключения датчиков становится понятной, если заглянуть в код программы.

Датчик BMP280 → микроконтроллер:
#define BMP_SCK D1
#define BMP_MISO D4
#define BMP_MOSI D2
#define BMP_CS D3

Цифровой термометр DS18B20 → микроконтроллер:
#define ONE_WIRE_BUS D5

Датчик DHT11 → микроконтроллер:
uint8_t DHTPin = D6;

2. Программирование микроконтроллера ESP8266

Для программирования метеостанции я использовал следующие библиотеки:

#include <Arduino_JSON.h>
#include <ESP8266WebServer.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include "DHT.h"

Полный исходный код программы можно найти по ссылке на GitHub в конце публикации. Код готов к использованию, но не забудьте заменить название и пароль сети Wi-Fi для подключения микроконтроллера, координаты вашего города и ваш API ключ для прогноза погоды:

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Replace the next line with your API Key
#define ONECALLKEY "REPLACE_WITH_YOUR_API_KEY"
// Sample Lat and Lon for Lviv, UA
float myLatitude = 49.8383; //<-----------------------------in range to use GPS coordinates
float myLongitude = 24.0232; // Coordinates for Lviv, UA. Change these for your city

3. Подключение микроконтроллера ESP8266 к локальной Wi-Fi сети и отображение показаний по IP адресу

После подключения всех датчиков и загрузки программного кода в память микроконтроллера, метеостанция должна автоматически подключиться к указанной в ssid сети Wi-Fi. В большинстве случаев роутер динамично выдает микроконтроллеру определенный локальный IP адрес с помощью DHCP сервера. Узнать его можно двумя способами: открыть Serial Monitor (если используете Arduino IDE) или просмотреть перечень клиентов в админ консоли вашего роутера.
Serial Monitor в Arduino IDE:

IP адрес микроконтроллера в настройках Wi-Fi роутера:

Если все сделано правильно, перейдя по данному адресу с любого девайса, который подключен к нашей локальной Wi-Fi сети, мы увидим что-то подобное:

4. Открытие доступа к показаниям датчиков из сети Интернет

Теперь делаем нашу метеостанцию ​​доступной из сети Интернет. Если у вас нет выделенного статического IP адреса, а как правило ее нет, то придется воспользоваться сервисами типа DynDNS или NoIP. В моем случае это NoIP (https://www.noip.com/). Данные сервисы необходимы для того, чтобы закрепить открытый нами порт роутера для IP адреса метеостанции за статическим доменным именем. Для начала нужно открыть порт 80 для IP адреса микроконтроллера в настройках роутера. В роутерах различных производителей этот процесс может отличаться, так же как и могут отличаться названия пунктов меню настроек, но как правило, это будет что-то типа Port forwarding или Virtual servers. Можно просто погуглить или заглянуть в даташит конкретно вашей модели сетевого оборудования. В моем TP-Link это выглядит следующим образом:

Далее регистрируемся в сервисе NoIP и создаем тестовый домен для нашей метеостанции. В поле IP / Target будет отображаться сетевой адрес вашего роутера:

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

5. Отображение прогноза погоды

Загрузку прогноза погоды из Интернета можно легко реализовать с помощью сервисов таких как https://openweathermap.org/. После регистрации на сайте можно получить API ключ с которым можно осуществлять HTTP запросы и получать от сервера информацию о текущем состоянии, а также прогноз погоды. Можно использовать ключ, созданный по умолчанию или сгенерировать новый:

Подробнее о openweathermap API и параметрах запросов можно почитать в их документации (https://openweathermap.org/api). openweathermap.org дают возможность осуществлять запросы к их API бесплатно лимитированное количество раз в сутки. Лимиты можно расширять платной подпиской, но, честно говоря, бесплатной более чем достаточно для домашних экспериментов (60 вызовов в минуту). Также можно получать как текущую погоду, так и достаточно подробный прогноз. Кстати, существуют и другие библиотеки для работы с их API, но описанный здесь способ лично для меня оказался самым простым. Если вы сделали это иначе, мне было бы очень интересно прочитать об этом в комментариях. В общем то, как я реализовал получения прогноза погоды и отображения его на сервере метеостанции достаточно хорошо видно из кода программы (подчеркну только то, что важно конвертировать JSON объекты после парсинга ответа API сервера в тип, пригодный для обработки и вывода — здесь мне в пригодился метод JSON.stringify () библиотеки Arduino_JSON), поэтому здесь приведу только скриншот с результатом работы:

Построенная мной элементарная домашняя метеостанция показана на фото ниже. Также можно подсоединить больше датчиков, добавить независимый от розетки источник питания и поместить все в красивый корпус. Вообще, в следующих публикациях я также планирую реализовать подобные метеостанции (и не только их) на базе микроконтроллерной платформы Arduino и одноплатного мини-компьютера Raspberry Pi. Думаю, с Raspberry Pi можно будет существенно расширить функциональные возможности проекта. А сейчас спасибо за внимание и прошу вас поделиться своими мыслями, идеями и проектами в комментариях. Также буду благодарен за подписку любым удобным способом, чтобы не пропускать новых публикаций. Убежден, некоторые из них могут быть довольно интересными. Успехов вам в ваших проектах!

weather-station-academicfox.com

Полный код программы, на котором работает метеостанция, можно найти на GitHub:
https://github.com/OlehBoreiko/academicfox.com/blob/master/home_weather_station_forecaster_NodeMCU.ino

Полезные ссылки на похожие публикации:
https://theiotprojects.com/bme280-based-mini-weather-station-esp8266-esp32/
https://www.circuitschools.com/interfacing-bmp280-with-esp8266-on-i2c-with-errors-and-solutions/
https://randomnerdtutorials.com/esp32-http-get-post-arduino/
https://randomnerdtutorials.com/esp8266-weather-forecaster/
https://randomnerdtutorials.com/esp8266-nodemcu-http-get-post-arduino/#http-post
https://electrosome.com/calling-api-esp8266/

Click to rate this post!
[Total: 0 Average: 0]

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.