Kedves Blogolvasó
Ezt a posztot azért készítettem el, mert szerettem volna egy olcsó precíz talaj menti hőmérőt készíteni a kertbe. A BME280 szenzorok ára úgy elszállt, hogy már ennyit nem akartam áldozni rá. Ezért lett az SHT20 és ESP-01 páros a nyerő. Elkövettem azt a hibát, hogy előbb választottam ki az eszközöket, mint sem megnéztem volna a támogatottságát. Sajnos az SHT20 sem ESPeasy, sem tasmota, sem ESPhome alatt nem támogatott még. Maradt a svájci bicska: SHT20 és ESP-01 – Arduino IDE alatt.
A koncepció az, hogy 18650-es akksiról működjön, és a mért adatokat MQTT-n keresztül küldje a HA alá. Természetesen nem szeretném 3 naponta tölteni, ezért az ESP-01 Deep Sleep képessé lett átalakítva.
SHT20 és ESP-01 Kapcsolási rajz:
Természetesen nem ússzuk meg könyvtárak letöltése nélkül a dolgot, de az Arduino ide már csak ilyen. Szükségünk lesz a PubSubClient lib-re, és a DFRobot_SHT20 lib-re. Nálam alapértelmezett, hogy az ESP8266 környezet már fel van telepítve, akinél nincs az tegye meg az Alaplap kezelőben. Ezt megtehetjük a könyvtár kezelőből is. Vagy manuálisan a könyvtár megfelelő helyre másolásával. Az SHT20 lib-et amúgy is másolni kell, mert nincs a könyvtárkezelő repo-jában.
Könyvtárkezelő: Ctrl+Shift+L
Ha ezzel megvagyunk nincs más dolgunk, mint az alábbi kódot bemásolni, és kiegészíteni a számunkra megfelelő elérési utakkal és autentikációs adatokkal:
#include <Wire.h>
#include "DFRobot_SHT20.h"
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
DFRobot_SHT20 sht20;
const char* ssid = "WIFI SSID";
const char* password = "WIFI_PASSWORD";
const char* mqttServer = "IP OR DOMAIN";
const int mqttPort = 1883;
const char* mqttUser = "MQTT_USERNAME";
const char* mqttPassword = "MQTT_PASSWORD";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
Serial.println("SHT20 Teszt");
sht20.initSHT20();
delay(100);
sht20.checkSHT20();
Wire.begin(0,2);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("ESP8266Client", mqttUser, mqttPassword )) {
Serial.println("connected");
} else {
Serial.print("failed with state ");
Serial.print(client.state());
delay(2000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Az üzenet megérkezett a topicba: ");
Serial.println(topic);
Serial.print("Message:");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
}
void loop()
{
client.loop();
float humd = sht20.readHumidity();
float temp = sht20.readTemperature();
float dews = log(humd/100) + (17.62 * temp) / (243.12 + temp);
float dewp = ((243.12 * dews) / (17.62 - dews));
char humidity[8];
dtostrf(humd, 6, 2, humidity);
char temperature[8];
dtostrf(temp, 6, 2, temperature);
char dewpoint[8];
dtostrf(dewp, 6, 2, dewpoint);
client.publish("garden-sht20/temperature", temperature);
client.subscribe("garden-sht20/temperature");
delay(2*1000);
client.publish("garden-sht20/humidity", humidity);
client.subscribe("garden-sht20/humidity");
delay(2*1000);
client.publish("garden-sht20/dewpoint", dewpoint);
client.subscribe("garden-sht20/dewpoint");
delay(5*1000);
ESP.deepSleep(900E6);
}A Topic neveket nyilván mindenki olyanra írja át mint amilyenre szeretné. Ebben nincsenek megkötések. A harmatpont számítás nem a sajátom, kérem nézze el nekem mindenki, hogy nem osztom meg a forrást. Azt hiszem egy fejlesztői fórumból nyúltam le, de hogy honnan, arra már nem emlékszem.
Érdemes az eredményeket ellenőrizni az MQTT Explorer-el. Az MQTT explorer letölthető az alábbi linken. Nálam mindig ez az első lépés.
Ha ezzel megvagyunk, és érkeznek az üzenetek a topic-ok alá akkor jöhet a Home Assistant beállítás. A külső eszközöket a configuration.yaml fájlba kell beírni.
Nálam ez így néz ki:
sensor SHT20_Temp: platform: mqtt name: "Talajmenti hőmérséklet" state_topic: "garden-sht20/temperature" qos: 0 unit_of_measurement: "C" sensor SHT20_Humi: platform: mqtt name: "Talajmenti páratartalom" state_topic: "garden-sht20/humidity" qos: 0 unit_of_measurement: "%" sensor SHT20_Dew: platform: mqtt name: "Talajmenti harmatpont" state_topic: "garden-sht20/dewpoint" qos: 0 unit_of_measurement: "C"
Ezután frissíteni kell a configot a HA-ban (ilyenkor újratölti elviekben). Ha így nem jelennek meg az Entitások, akkor Core restart.
Remélem mindenkinek érthető volt a leírás. Sajnos nem 0 km-es kezdőkre íródott, de azért ha az alapok megvannak, akkor nem nehéz szerintem reprodukálni, vagy átalakítani a kódot. Ami pedig a kialakítást illeti, szerintem járható út az is, hogy a 18650-es akksit egy foglalatba rakjuk, és egy TP4056 töltővel töltjük. Így nem kell kivenni a foglalatból az akksit, hanem elég csak a töltőre feldugni. Azzal sem kell foglalkozni, hogy az ESP-t kivegyük a foglalatból, hiszen az AMS 3.3V egyenfeszültséget ad számára. Mindenesetre linkelek pár hasznos alkatrészt.




