Метеостанция на esp8266

Использование esp8266 в качестве контроллера домашней метео

Для создания метеостанции на ESP8266 с использованием датчиков BMP180, HTU21 и DS18B20 с отправкой данных по MQTT вам понадобятся следующие компоненты и программное обеспечение:

Компоненты:

  • ESP8266
  • Датчик BMP180 (давление и температура)
  • Датчик HTU21 (влажность и температура)
  • Датчик DS18B20 (температура)
  • Резистор 4,7 кОм (для подключения DS18B20)
  • Блок питания или батареи

Программное обеспечение:

  • Arduino IDE
  • Библиотеки для работы с датчиками: Adafruit_BMP085, Adafruit_HTU21DF, OneWire, DallasTemperature
  • Библиотека для работы с MQTT: PubSubClient

Для подключения датчиков к ESP8266 используются следующие пины:

  • SCL и SDA для датчика BMP180
  • SCL и SDA для датчика HTU21
  • GPIO2 для датчика DS18B20

Пример кода для получения данных с датчиков и отправки их по MQTT:

#include <Adafruit_BMP085.h>
#include <Adafruit_HTU21DF.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP8266WiFi.h>
#include <PubSubClient.h>

// Настройки Wi-Fi
const char* ssid = "название_вашей_сети";
const char* password = "пароль_вашей_сети";

// Настройки MQTT
const char* mqttServer = "адрес_вашего_брокера_MQTT";
const int mqttPort = 1883;
const char* mqttUser = "ваше_имя_пользователя_MQTT";
const char* mqttPassword = "ваш_пароль_MQTT";
const char* mqttTopic = "название_топика_MQTT";

// Объекты датчиков
Adafruit_BMP085 bmp;
Adafruit_HTU21DF htu21;
OneWire oneWire(2);
DallasTemperature ds18b20(&oneWire);

// Объекты Wi-Fi и MQTT
WiFiClient wifiClient;
PubSubClient mqttClient(mqttServer, mqttPort, wifiClient);

void setup() {
  Serial.begin(9600);
  
  // Подключение к Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  
  // Настройка датчиков
  bmp.begin();
  htu21.begin();
  ds18b20.begin();
}

void loop() {
  // Получение данных с датчиков
  float bmpTemperature = bmp.readTemperature();
  float bmpPressure = bmp.readPressure() / 100.0;
  float htu21Temperature = htu21.readTemperature();
  float htu21Humidity = htu21.readHumidity();
  ds18b20.requestTemperatures();
  float ds18b20Temperature = ds18b20.getTempCByIndex(0);

// Отправка данных по MQTT
if (mqttClient.connected()) {
// Формирование строки с данными
String message = String(bmpTemperature) + ";" + String(bmpPressure) + ";" + String(htu21Temperature) + ";" + String(htu21Humidity) + ";" + String(ds18b20Temperature);
// Отправка сообщения
mqttClient.publish(mqttTopic, message.c_str());
}

// Подключение к MQTT, если необходимо
if (!mqttClient.connected()) {
Serial.println("Connecting to MQTT...");
if (mqttClient.connect("esp8266", mqttUser, mqttPassword)) {
Serial.println("Connected to MQTT");
} else {
Serial.print("Failed to connect to MQTT, rc=");
Serial.println(mqttClient.state());
}
}

// Обработка входящих сообщений MQTT (если необходимо)
mqttClient.loop();

// Ожидание некоторого времени перед повторной отправкой данных
delay(10000);
}

Этот код получает данные с датчиков, формирует строку с данными и отправляет ее по MQTT на сервер. Для использования этого кода необходимо внести изменения в настройки Wi-Fi, MQTT и подключения датчиков в соответствии с вашей конфигурацией. Кроме того, вы можете изменить интервал отправки данных (в данном случае 10 секунд).

После загрузки кода на ESP8266 вы можете подписаться на топик MQTT и получать данные с метеостанции в реальном времени.

Оставьте комментарий