Метеостанция на HTU21D и ESP8266

В этой статье покажу пример подключения модуля температуры и влажности HTU21D к NodeMCU (ESP8266). Контроллер NodeMCU будет считывать температуру и влажности с датчика HTU21D и полученные данный отобразить в WEB странице. В качестве среды разработки используем Arduino IDE

Необходимые детали:
► Контроллер NodeMCU v.2 (ESP8266) x 1 шт.
► Провода DuPont, 2,54 мм, 20 см x 1 шт.
► Датчика температуры и влажности HTU21D x 1 шт.

Подключение
В данном примере используется контроллер NodeMCU v.2 (ESP8266) и датчик HTU21D. Подключение не сложное, необходимо всего четыре провода, первым делом подключаем шину I2C, выводы SDA и SCL подключить к D2 и D1, подключаем питание 3.3 В и GND. Для удобства приведу схему подключения.

Установка библиотеки:
В данном примере используем одну библиотеку «SparkFunHTU21D» скачать ее можно с «Менеджер библиотек» или в конце статьи, на 02.10.2020 версия 1.0.5.

В строке поиска вводим «HTU21D» находим библиотеку «SparkFunHTU21D» и устанавливаем ее.

Так же, не забываем что необходимо установить NodeMCU в среду разработки Arduino IDE, для этого воспользуйтесь этой статьей. После установки библиотек перезапустите, среду разработки Arduino IDE.

Программа:
Теперь, у нас все готово, копируем скетч в Arduino IDE или скачайте готовый файл и загружаем его в NodeMCU, незабываем указать свои данные сети.

/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 02.10.2020г.
*/ 

#include <ESP8266WiFi.h>                                // Подключаем библиотеку ESP8266WiFi
#include <Wire.h>                                       // Подключаем библиотеку Wire
#include "SparkFunHTU21D.h"                             // Подключаем библиотеку SparkFunHTU21D
 
HTU21D myHumidity;  

const char* ssid = "Название Вашей WiFi сети
";          // Название Вашей WiFi сети
const char* password = "Пароль от Вашей WiFi сети
";     // Пароль от Вашей WiFi сети

WiFiServer server(80);                                  // Указываем порт Web-сервера
String header;

void setup() {
  Serial.begin(115200);                                 // Скорость передачи 115200
  bool status;
                                                       
  myHumidity.begin();                                   // Инициализация HTU21D

  Serial.print("Connecting to ");                       // Отправка в Serial port 
  Serial.println(ssid);                                 // Отправка в Serial port 
  WiFi.begin(ssid, password);                           // Подключение к WiFi Сети
  while (WiFi.status() != WL_CONNECTED) {               // Проверка подключения к WiFi сети
    delay(500);                                         // Пауза
    Serial.print(".");                                  // Отправка в Serial port 
  }

  Serial.println("");                                   // Отправка в Serial port 
  Serial.println("WiFi connected.");                    // Отправка в Serial port 
  Serial.println("IP address: ");                       // Отправка в Serial port 
  Serial.println(WiFi.localIP());                       // Отправка в Serial port 
  server.begin();                                  
}

void loop(){
  WiFiClient client = server.available();               // Получаем данные, посылаемые клиентом 

  if (client) {                                         
    Serial.println("New Client.");                      // Отправка "Новый клиент"
    String currentLine = "";                            // Создаем строку для хранения входящих данных от клиента
    while (client.connected()) {                        // Пока есть соединение с клиентом 
      if (client.available()) {                         // Если клиент активен 
        char c = client.read();                         // Считываем посылаемую информацию в переменную "с"
        Serial.write(c);                                // Отправка в Serial port 
        header += c;
        if (c == '\n') {                                // Вывод HTML страницы 
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");          // Стандартный заголовок HT
            client.println("Content-type:text/html ");
            client.println("Connection: close");        // Соединение будет закрыто после завершения ответа
            client.println("Refresh: 10");              // Автоматическое обновление каждые 10 сек 
            client.println();
            
            client.println("<!DOCTYPE html><html>");    // Веб-страница создается с использованием HTML
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<meta charset='UTF-8'>");   // Делаем русскую кодировку
            client.println("<link rel=\"icon\" href=\"data:,\">");
                     
            client.println("<style>body { text-align: center; font-family: \"Trebuchet MS\", Arial;}");
            client.println("table { border-collapse: collapse; width:40%; margin-left:auto; margin-right:auto; }");
            client.println("th { padding: 12px; background-color: #0043af; color: white; }");
            client.println("tr { border: 1px solid #ddd; padding: 12px; }");
            client.println("tr:hover { background-color: #bcbcbc; }");
            client.println("td { border: none; padding: 12px; }");
            client.println(".sensor { color:white; font-weight: bold; background-color: #bcbcbc; padding: 1px; }");
            
            client.println("</style></head><body><h1>Метеостанция на TU21D и ESP8266</h1>");
            client.println("<table><tr><th>Параметр</th><th>Показания</th></tr>");
            client.println("<tr><td>Температура</td><td><span class=\"sensor\">");
            client.println(myHumidity.readTemperature());
            client.println("<tr><td>Влажность</td><td><span class=\"sensor\">");
            client.println(myHumidity.readHumidity());
            client.println(" %</span></td></tr>"); 
            client.println("</body></html>");
            
            client.println();
            break;
          } else { 
            currentLine = "";
          }
        } else if (c != '\r') {  
          currentLine += c;      
        }
      }
    }
    header = "";
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

  Скачать скетч

Определение IP (ESP8266):
Теперь необходимо узнать IP модуля, для этого открываем «Мониторинг порта» с выставленной скоростью «115200», в моем случаи сеть выдала «192.168.2.106».

Открываем любой браузер (компьютер должен находиться в той же сети, что и ESP8266 модуль), вводим IP-адрес (192.168.2.106) и нажимаем Enter.

Ссылки
  
Документация на HTU21D
 Библиотека SparkFunHTU21D

Купить на Aliexpress
  Плата NodeMCU V2
  Провода DuPont, 2,54 мм, 20 см
  Датчика температуры и влажности HTU21D

Вам может также понравиться...

1 комментарий

  1. Семен:

    Добрый день!

    Можно ли подключить сразу два датчки температуры и влажности таким образом?

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *