/* * Vzorovy kod pro online teplomer * MeteoMini s ESP32-C3, SHT40 - cidlo teploty a vlhkosti * * Knihovny: * https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json * https://github.com/adafruit/Adafruit_SHT4X * * Dokumentace: * https://wiki.tmep.cz/doku.php?id=zarizeni:vlastni_hardware * * Vytvoril chiptron.cz (2022), aktualizovano 2025 pro ESP32 knihovnu v3 */ #include #include #include #include "Adafruit_SHT4x.h" // I2C instance pro ESP32-C3 TwoWire I2C = TwoWire(0); // SHT40 senzor Adafruit_SHT4x sht4 = Adafruit_SHT4x(); // Analogove mereni napeti #define ADCBpin 0 #define bDividerRatio 1.775 //1.7693877551 //1.82274 // Delic napeti z akumulatoru 1MOhm + 1.3MOhm /*----------------------------------*/ /* VYPLNTE NAZEV WIFI SITE A HESLO */ const char* ssid = "NAZEV SITE"; const char* password = "HESLO"; /* VASE DOMENA CIDLA NA TMEP.CZ */ String serverName = "http://DOMENA.tmep.cz/index.php?"; // misto DOMENA vlozte vasi domenu cidla /*----------------------------------*/ void setup() { Serial.begin(115200); // vystup do konzole delay(100); // Inicializace I2C pro SHT40 I2C.begin(19, 18); // I2C sbernicce pro cidlo teploty a vlhkosti /* NASTAVENI CIDLA TEPLOTY A VLHKOSTI */ if (!sht4.begin(&I2C)) { // inicializace Serial.println("Nepodarilo se inicializovat SHT40!"); while (1) delay(10); } sht4.setPrecision(SHT4X_HIGH_PRECISION); // vysoka presnost mreni sht4.setHeater(SHT4X_NO_HEATER); // bez interniho ohrivace /* PRIPOJENI K WIFI SITI */ WiFi.setSleep(false); // deaktivace usporneho rezimu WiFi.begin(ssid, password); Serial.println("Pripojovani k Wi-Fi..."); int pokus = 0; // promenna pro pocitani pokusu o pripojeni while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (pokus++ > 20) { Serial.println("\nNepodarilo se pripojit, uspavam..."); esp_sleep_enable_timer_wakeup(600 * 1000000); // Pokud se behem 10s nepripoji, uspi se na 600s = 10min esp_deep_sleep_start(); } } Serial.println("\nPripojeno do site, IP adresa zarizeni: : " + WiFi.localIP().toString()); } void loop() { /* MERENI NAPETI AKUMULATORU */ float bat_voltage = analogReadMilliVolts(ADCBpin) * bDividerRatio / 1000; Serial.print("Napeti akumulatoru: "); Serial.print(bat_voltage, 2); Serial.println(" V"); /*--------------------------------------*/ /* CIDLO TEPLOTY A VLHKOSTI */ sensors_event_t humidity, temp; sht4.getEvent(&humidity, &temp); // cekani na aktualni data Serial.print("Teplota: "); Serial.print(temp.temperature, 2); Serial.println(" °C"); Serial.print("Vlhkost: "); Serial.print(humidity.relative_humidity, 2); Serial.println(" %"); /*--------------------------*/ /* ODESLANI DATA NA TMEP.cz */ if (WiFi.status() == WL_CONNECTED) { HTTPClient http; //GUID pro teplotu "teplota", pro vlhkost "vlhkost", pro vypocet % kapacity akumulatoru "v" (prepocet na %) String serverPath = serverName + "teplota=" + temp.temperature + "&vlhkost=" + humidity.relative_humidity + "&v=" + bat_voltage; Serial.println("Odesilam na URL: " + serverPath); // zacatek http spojeni http.begin(serverPath.c_str()); // http get request int httpResponseCode = http.GET(); if (httpResponseCode > 0) { Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); String payload = http.getString(); Serial.println("Server response: " + payload); } else { Serial.print("Error code: "); Serial.println(httpResponseCode); } // Uvolneni http.end(); } else { Serial.println("Wi-Fi odpojena"); } /*----------------------------*/ /* USPANI ZARIZENI */ Serial.println("Uspavam zarizeni na 10 minut..."); esp_sleep_enable_timer_wakeup(600 * 1000000); // Zarizeni se uspi na 600 sekund = 10 min esp_deep_sleep_start(); // Spusteni uspani }