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

В этом примере создадим устройство, которое будет измерять температуру и влажность воздуха, передавать данные на сервер VizIoT, отслеживать динамику значений и строить графики. Также устройство будет отправлять уровень Wi-Fi сигнала (RSSI) каждые 20 секунд.


Что потребуется

  • Микроконтроллер: ESP8266 Wemos D1 Mini
  • Датчик температуры и влажности: SHT31-D
  • Среда разработки: Arduino IDE (инструкция по настройке ESP8266 — здесь)

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

  1. Создайте новое устройство, например: «Тест температура и влажность воздуха»

  2. Добавьте параметры:

    • rssiМощность сигнала, dBm
    • temТемпература, °C
    • 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();

// Данные Wi-Fi
const char* ssid     = "........";
const char* password = "........";

// Сервер VizIoT
const char* http_server = "VizIoT.com";
const int   http_port   = 48656;

// Ключи доступа VizIoT
String VizIoT_Device_key  = "................";
String VizIoT_Device_pass = "....................";

void setup() {
  Serial.begin(115200);
  setup_wifi();

  Serial.println("Поиск датчика SHT31-D");
  if (!sht31.begin(0x44)) {
    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("Влажность % = ");
    Serial.println(h);
    url += String("&hum=") + h;
  } else {
    Serial.println("Ошибка чтения влажности");
  }

  // RSSI
  long rssi = WiFi.RSSI();
  url += String("&rssi=") + rssi;

  // Отправка на сервер
  if (sendGetRequest(url) == true) {
    Serial.println("Данные успешно отправлены на сервер");
  } else {
    Serial.println("Ошибка отправки данных");
  }

  delay(20000); // 20 секунд
}

void setup_wifi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi 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();
      return payload.equals("OK");
    } else {
      Serial.println("[HTTP] GET... failed");
      http.end();
      return false;
    }
  } else {
    return false;
  }
}

Установка библиотеки

Установите библиотеку Adafruit SHT31 Library: https://github.com/adafruit/Adafruit_SHT31


Укажите свои данные в коде

  • ssid — имя вашей Wi-Fi сети
  • password — пароль Wi-Fi
  • VizIoT_Device_key — ключ устройства
  • VizIoT_Device_pass — пароль устройства

Подключение датчика SHT31-D

Подключаем по I²C:

Пин датчика Пин ESP8266
VIN 3V3
GND G
SCL D1
SDA D2

После подключения — загрузите скетч в ваш ESP8266.


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

Создаём панель: «Тест панель темп. влаж.»

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

1) Уровень сигнала Wi-Fi

  • тип: График
  • параметр: rssi

2) Температура воздуха

  • тип: График
  • параметр: tem

3) Влажность воздуха

  • тип: График
  • параметр: hum

4) Изменения температуры и влажности

  • тип: Гистограмма изменений
  • параметры: tem, hum

Готово!

Устройство полностью настроено — осталось дождаться, когда ESP8266 подключится к Wi-Fi и начнёт отправлять данные на сервер VizIoT.