Использование 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 и получать данные с метеостанции в реальном времени.