From 2971945f4c73791f3b8ee434783aebfefe80cb8d Mon Sep 17 00:00:00 2001 From: KubMakCZ Date: Fri, 20 Mar 2026 09:40:40 +0100 Subject: [PATCH] done sqlite intro --- 12_esp_sken/src/main.cpp | 3 +- 13_sqlite_python/02_serial_to_sqlite.py | 74 ++++++++++++++++++ 13_sqlite_python/iot_data.sqlite | Bin 20480 -> 24576 bytes 13a_esp32_dht11_serial_print/.gitignore | 5 ++ .../.vscode/extensions.json | 10 +++ 13a_esp32_dht11_serial_print/include/README | 37 +++++++++ 13a_esp32_dht11_serial_print/lib/README | 46 +++++++++++ 13a_esp32_dht11_serial_print/platformio.ini | 25 ++++++ 13a_esp32_dht11_serial_print/src/main.cpp | 47 +++++++++++ 13a_esp32_dht11_serial_print/test/README | 11 +++ 10 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 13a_esp32_dht11_serial_print/.gitignore create mode 100644 13a_esp32_dht11_serial_print/.vscode/extensions.json create mode 100644 13a_esp32_dht11_serial_print/include/README create mode 100644 13a_esp32_dht11_serial_print/lib/README create mode 100644 13a_esp32_dht11_serial_print/platformio.ini create mode 100644 13a_esp32_dht11_serial_print/src/main.cpp create mode 100644 13a_esp32_dht11_serial_print/test/README diff --git a/12_esp_sken/src/main.cpp b/12_esp_sken/src/main.cpp index fe44e8d..3ca79b8 100644 --- a/12_esp_sken/src/main.cpp +++ b/12_esp_sken/src/main.cpp @@ -12,8 +12,9 @@ void scanNetwork() { int found = 0; for (int i = 1; i < 255; i++){ IPAddress target(ip[0],ip[1],ip[2],i); + Serial.println(target.toString().c_str()); WiFiClient client; - if(client.connect(target,80,60)){ + if(client.connect(target,80,150)){ found++; Serial.printf("\n + %s",target.toString().c_str()); if(target == ip) Serial.print("<< JA"); diff --git a/13_sqlite_python/02_serial_to_sqlite.py b/13_sqlite_python/02_serial_to_sqlite.py index e69de29..7bdef64 100644 --- a/13_sqlite_python/02_serial_to_sqlite.py +++ b/13_sqlite_python/02_serial_to_sqlite.py @@ -0,0 +1,74 @@ +import sqlite3 +import serial +from datetime import datetime + +#Globalní proměnné +PORT = "COM4" #vždy zkontorlovat COM port přes Platformio->Devices +BAUDRATE = 115200 +DB_FILE = "iot_data.sqlite" + +#Připojení k databázi +conn = sqlite3.connect("iot_data.sqlite") +cursor = conn.cursor() + +cursor.execute(""" + CREATE TABLE IF NOT EXISTS mereni ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cas TEXT NOT NULL, + teplota REAL NOT NULL, + vlhkost REAL NOT NULL + ) +""") +conn.commit() + +#připojení k seriovému portu +ser = serial.Serial(PORT,BAUDRATE,timeout=2) +print(f"Připojeno na {PORT}@{BAUDRATE} baud") +print("Čekám na data z ESP32... (Ctrl+C pro ukončení)") + +pocet_mereni = 0 + +try: + while True: + line = ser.readline().decode("utf-8").strip() + if not line: + continue + #parsování formátu + try: + #format: teplota:XX.X,vlhkost:XX.X + casti = line.split(",") + teplota = float(casti[0].split(":")[1]) + vlhkost = float(casti[1].split(":")[1]) + except (IndexError, ValueError): + print(f"Neplatný formát: {line}") + continue + #uložení do databaze + cas = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + cursor.execute( + "INSERT INTO mereni (cas, teplota, vlhkost) VALUES (?, ?, ?)", + (cas, teplota, vlhkost) + ) + conn.commit() + + pocet_mereni += 1 + print(f"[{pocet_mereni}] {cas} | Teplota:{teplota}°C | Vlhkost: {vlhkost}") + + #po 20 měření zobrazit statistiky + if pocet_mereni % 20 == 0: + print(f"--Statistiky po {pocet_mereni} měřeních--") + cursor.execute("SELECT AVG(teplota) FROM mereni") + print(f"Průměrná teplota: {cursor.fetchone()[0]:.1f}°C") + cursor.execute("SELECT MAX(teplota) FROM mereni") + print(f"Maximální teplota: {cursor.fetchone()[0]:.1f}°C") + cursor.execute("SELECT MIN(teplota) FROM mereni") + print(f"Minimální teplota: {cursor.fetchone()[0]:.1f}°C") + cursor.execute("SELECT COUNT(*) FROM mereni") + print(f"Celkem záznamů: {cursor.fetchone()[0]}") + print() + +except KeyboardInterrupt: + print("\nUkončeno uživatelem") +finally: + ser.close() + conn.close() + print(f"Uloženo {pocet_mereni} měření do {DB_FILE}") \ No newline at end of file diff --git a/13_sqlite_python/iot_data.sqlite b/13_sqlite_python/iot_data.sqlite index 7b026e6242a55767fa20bccdc7b67580e9e1fb42..1c35771f68dea2dd2d007d63a6e4fb0b80aebc1a 100644 GIT binary patch literal 24576 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 delta 139 zcmZoTz}T>Wae_1}3j+fK>qG^6K^6wRE)iZJkBRRo1HU=n)6IekrF@&8^2sxDG4lTg zN-(hU|K7}J@PVI)B>|+6k^c(={}-ULNBk25IC!`inI#!>Q;SmbGBY THIS FILE +| +|- platformio.ini +|--src + |- main.c + +Example contents of `src/main.c` using Foo and Bar: +``` +#include +#include + +int main (void) +{ + ... +} + +``` + +The PlatformIO Library Dependency Finder will find automatically dependent +libraries by scanning project source files. + +More information about PlatformIO Library Dependency Finder +- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/13a_esp32_dht11_serial_print/platformio.ini b/13a_esp32_dht11_serial_print/platformio.ini new file mode 100644 index 0000000..7f713b5 --- /dev/null +++ b/13a_esp32_dht11_serial_print/platformio.ini @@ -0,0 +1,25 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:esp32dev] +platform = espressif32 +board = esp32dev +framework = arduino +monitor_speed = 115200 +lib_deps = markruys/DHT@^1.0.0 ;^ = ALT + 94 + + +[env:esp32-s3] +platform = espressif32 +board = esp32-s3-devkitc-1 +framework = arduino +monitor_speed = 115200 +lib_deps = markruys/DHT@^1.0.0 + diff --git a/13a_esp32_dht11_serial_print/src/main.cpp b/13a_esp32_dht11_serial_print/src/main.cpp new file mode 100644 index 0000000..62817e6 --- /dev/null +++ b/13a_esp32_dht11_serial_print/src/main.cpp @@ -0,0 +1,47 @@ +#define POUZIT_DHT11 true +#include + +#if POUZIT_DHT11 + #include + #define DHTPIN 36 + DHT dht; +#endif + +float teplota = 22.0; +float vlhkost = 45.0; +void setup() { + Serial.begin(115200); + delay(1000); + #if POUZIT_DHT11 + dht.setup(DHTPIN); + Serial.println("DHT11 seznzor incializovan"); + #else + Serial.println("Simulace dat (bez senzoru)"); + #endif + Serial.println("Formát: teplota:XX.X,vlhkost:YY.Y"); +} + +void loop() { + #if POUZIT_DHT11 + //realný senzor + delay(dht.getMinimumSamplingPeriod()); + teplota = dht.getTemperature(); + vlhkost = dht.getHumidity(); + + if(dht.getStatus() != DHT::ERROR_NONE){ + Serial.print("chyba senzoru: "); + Serial.println(dht.getStatusString()); + delay(2000); + return; + } + #else + //simulace + teplota = 22.0 + random(-50,50)/10.0; + vlhkost = 45.0 + random(-100,100)/10.0; + delay(2000); + #endif + Serial.print("teplota:"); + Serial.print(teplota,1); + Serial.print(",vlhkost:"); + Serial.println(vlhkost,1); +} diff --git a/13a_esp32_dht11_serial_print/test/README b/13a_esp32_dht11_serial_print/test/README new file mode 100644 index 0000000..9b1e87b --- /dev/null +++ b/13a_esp32_dht11_serial_print/test/README @@ -0,0 +1,11 @@ + +This directory is intended for PlatformIO Test Runner and project tests. + +Unit Testing is a software testing method by which individual units of +source code, sets of one or more MCU program modules together with associated +control data, usage procedures, and operating procedures, are tested to +determine whether they are fit for use. Unit testing finds problems early +in the development cycle. + +More information about PlatformIO Unit Testing: +- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html