blog.vyoralek.cz

ESP8266 – měření teploty a vlhkosti pomocí senzoru SHT31

V jednom z prvních IoT článků jsem psal jak měřit teplotu pomocí Arduina a senzoru DHT22, který je sice poměrně přesný, ale problémem je jeho spolehlivost.

Dnes si ukážeme o krapet lepší provedení a to kombinaci desky s čipem ESP8266 a senzoru SHT31.

Hardware

ESP8266

Můžeme použít například desku Wemos D1 mini, ale senzor se dá zapojit samozřejmě i do Arduina – jako digitální vstupy použijeme piny SLC a SDA namísto D1 a D2 u ESP8266 v provedení D1 mini.

SHT31

Jedná se o poměrně přesný a spolehlivý senzor na měření teploty a vlhkosti, který můžete najít v několika provedeních – já jsem použil toto.

Význam pinů

  • VIN – napájení 2,5 – 5V
  • GND – uzemění
  • SLC – I2C sběrnice – hodinový signál
  • SDA – I2C sběrnice – datová linka

Další tři piny se na desce nemusí vyskytovat a my je pro náš příklad nebudeme ani potřebovat:

  • ADR – určuje I2C adresy. Ve výchozím nastavení je 0x44. Spojením s VIN ji můžeme změnit na 0x45.
  • RST – hardwarový reset – připojením na Ground můžeme vyvolat restart zařízení.
  • ALR – alert výstup. Úplně netuším jak s tímhle pracovat.

Schéma zapojení

Oproti DHT22 budeme potřebovat vodiče čtyři, ale stále zůstavá zapojení jednoduché. Dva pro napájení a dva pro komunikaci.

Software

Budeme potřebovat dvě knihovny:

 #include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
  Serial.begin(9600);

  Serial.println("SHT31 test");
  if (! sht31.begin(0x44)) {   // Set to 0x45 for alternate i2c addr
    Serial.println("Nemohu najít SHT31");
    while (1) delay(1);
  }
}

void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();

  if (! isnan(t)) {  // check if 'is not a number'
    Serial.print("Teplota *C = "); Serial.println(t);
  } else { 
    Serial.println("Čtení teploty se nezdařilo");
  }
  
  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Vlhkost. % = "); Serial.println(h);
  } else { 
    Serial.println("Čtení vlhkosti se nezdařilo");
  }
  Serial.println();
  delay(1000);
}

Přesnost měření

Jak je vidět z grafů u teploty je maximální odchylka při běžných teplotách je +-0.3 st.

Co se týče vlhkosti je přesnost měření téměř konstatní a to +-2 %RH a při 100% vlhkosti by neměly hodnoty padnou mimo tolerancei +-3.5 %RH.

Add comment

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..