ESP8266 HTTP -> Температура и влажность воздуха

Рассмотрим пример который позволит наблюдать за температурой и влажностью воздуха, отслеживать часовые изменения в показаниях и строить график уровень Wi-Fi сигнала с частотой обновления информации каждые 20 секунд.

Что нам потребуется:

  • Микроконтроллер: ESP8266 Wemos d1 mini
  • Датчик: SHT31-D
  • Среда разработки: Arduino IDE (как настроить можно посмотреть здесь)

Добавление и настройка устройства:

  1. Добавим новое устройство в VizIoT с именем «Тест температура и влажность воздуха»
  2. Настроим параметры устройства. Добавьте три параметра:
    1. Ключ rssi с типом «Мощность сигнала, dBm»
    2. Ключ tem с типом «Температура, °C»
    3. Ключ hum с типом «Влажность, %»
  3. В «Основных настройках» устройства скопируем Ключ доступа и Пароль доступа.

Прошивка ESP8266:

  1. Создайте новый проект в Arduino IDE.
  2. Скопируйте указанный ниже пример в созданный проект.
    #include <ESP8266WiFi.h>
    #include <Wire.h>
    #include "Adafruit_SHT31.h"
    #include <WiFiClient.h>
    #include <ESP8266HTTPClient.h>
    
    HTTPClient http;
    
    Adafruit_SHT31 sht31 = Adafruit_SHT31();
    
    //ssid и пароль доступа для подключения к WI-FI
    const char* ssid = "........";
    const char* password = "........";
    
    //Адрес и Порт сервера
    const char* http_server = "VizIoT.com";
    const int http_port = 48656;
    
    //Ключ и пароль доступа VizIoT Устройства (можно узнать в настройках устройства)
    String VizIoT_Device_key = "................";
    String VizIoT_Device_pass = "....................";
    
    void setup() {
      //Включаем вывод информации в Serial Monitor
      Serial.begin(115200);
    
      //Подключаемся к WI-FI
      setup_wifi();
    
      Serial.println("Поиск датчика SHT31-D");
      if (! sht31.begin(0x44)) {   // укажите 0x45 для альтернативного i2c адреса датчика
        Serial.println("Не могу найти SHT31-D");
      }
    }
    
    
    void loop() {
    
      String url = String("/update?key=") + VizIoT_Device_key + "&" + "pass=" + VizIoT_Device_pass ;
    
      //считываем показания с датчиков
      float t = sht31.readTemperature();
      float h = sht31.readHumidity();
    
      //проверяем информацию о температуре
      if (! isnan(t)) {
        Serial.print("Температура *C = ");
        Serial.println(t);
        url += String("&tem=") + t;
      } else {
        Serial.println("Ошибка при чтении температуры");
      }
    
      //проверяем информацию о влажности
      if (! isnan(h)) {
        Serial.print("Hum. % = ");
        Serial.println(h);
        url += String("&hum=") + h;
      } else {
        Serial.println("Ошибка при чтении влажности");
      }
    
      if (sendGetRequest(url) == true) {
        Serial.println("Данные успешно отправлены на сервер");
      } else {
        Serial.println("Во время отправки данных возникла ошибка");
      }
    
      //уснуть на 20 секунд
      delay(20000);
    }
    
    //Функция подключения к WI-FI
    void setup_wifi() {
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED) {
        //Ожидает подключения к WI-FI
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
    }
    
    //Функция отправки данных на сервер
    int sendGetRequest(String url) {
      if (WiFi.status() == WL_CONNECTED) {
        http.begin(http_server, http_port, url);
        int httpCode = http.GET();
        if (httpCode > 0) {
          String payload = http.getString();
          http.end();
          if (payload.equals("OK")) {
            return true;
          } else {
            return false;
          }
        } else {
          Serial.println("[HTTP] GET... failed, error!!!\r\n");
          Serial.print("httpCode = ");
          Serial.println(httpCode);
          http.end();
          return false;
        }
      } else {
        return false;
      }
    }
    
  3. Установите библиотеку «Adafruit SHT31 Library» для работы c датчиком SHT31-D.
  4. Укажите значения переменных:
    1. ssid – Имя вашей Wi-Fi точки
    2. password – пароль вашей Wi-Fi точки
    3. VizIoT_Device_key – скопированный Ключ доступа устройства
    4. VizIoT_Device_pass – скопированный Пароль доступа устройства
  5. Подключите датчик SHT31-D к ESP8266 по схеме:
    1. Пин датчика VIN в пин esp 3V3
    2. Пин датчика GND в пин esp G
    3. Пин датчика SCL в пин esp D1
    4. Пин датчика SDA в пин esp D2
  6. Подключите вашу ESP8266 к компьютеру и загрузите полученный скетч.

Добавления виджетов:

  1. Создадим новую панель с именем «Тест панель темп. влаж.»
  2. Добавим виджеты:
    1. Уровня сигнала
      • тип: «График»;
      • устройство: «Тест температура и влажность воздуха»;
      • параметр: rssi;
    2. Температура воздуха
      • тип: «График»;
      • устройство: «Тест температура и влажность воздуха»;
      • параметр: tem;
    3. Влажность воздуха
      • тип: «График»;
      • устройство: «Тест температура и влажность воздуха»;
      • параметр: hum;
    4. Изменения в Темп и Влаж
      • тип: «Гистограмма изменений в интервале»;
      • устройство: «Тест температура и влажность воздуха»;
      • параметр: tem и hum;

Теперь вы все настроили и осталось дождаться подключения вашего устройства на сервер.