diff --git a/15_dhtsim_usb/esp32_simulace/esp32_simulace.ino b/15_dhtsim_usb/esp32_simulace/esp32_simulace.ino index e367282..dae3189 100644 --- a/15_dhtsim_usb/esp32_simulace/esp32_simulace.ino +++ b/15_dhtsim_usb/esp32_simulace/esp32_simulace.ino @@ -8,6 +8,6 @@ void loop() { float sim_temp = random(150,300) / 10.0; float sim_hum = random(400,700) / 10.0; - Serial.printf("T:%.1f,H:%.1f\n"); + Serial.printf("T:%.1f,H:%.1f\n", sim_temp, sim_hum); delay(5000); } diff --git a/15_dhtsim_usb/python_sqlite/capture.py b/15_dhtsim_usb/python_sqlite/capture.py new file mode 100644 index 0000000..9a8f581 --- /dev/null +++ b/15_dhtsim_usb/python_sqlite/capture.py @@ -0,0 +1,98 @@ +import serial +import time +import sys +import sqlite3 +import datetime + +SERIAL_PORT = "COM3" #COM port pro ESP32 (každy bude mít jiný) +BAUD_RATE = 115200 +DB_FILE = "dht_data.sqlite" +TABLE_NAME = "readings" + +def setup_database(): + conn = None + try: + conn = sqlite3.connect(DB_FILE) + cursor = conn.cursor() + cursor.execute(f''' + CREATE TABLE IF NOT EXISTS {TABLE_NAME} ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + timestamp DATETIME DEFAULT CURRENT_TIMESTAMP, + temperature REAL, + humidity REAL) + ''') + conn.commit() + print(f"Databaze {DB_FILE} a tabulka {TABLE_NAME} jsou ready") + except sqlite3.Error as e: + print(f"Chyba při práci s db: {e}") + finally: + if conn: + conn.close() + +def insert_data(temp, hum): + conn = None + try: + conn = sqlite3.connect(DB_FILE) + cursor = conn.cursor() + cursor.execute(f''' + INSERT INTO {TABLE_NAME} (temperature, humidity) + VALUES (?, ?)''',(temp,hum)) + conn.commit() + print(f"Data uložena: T:{temp} & H:{hum}") + except sqlite3.Error as e: + print(f"Chyba při práci s db: {e}") + finally: + if conn: + conn.close() + + +def read_from_esp32(): + setup_database() + ser = None + print(f"čtu {SERIAL_PORT} port s rychloti {BAUD_RATE}") + try: + ser = serial.Serial(SERIAL_PORT,BAUD_RATE,timeout=1) + print("Připojeno") + time.sleep(2) + #po přípojení začneme do "nekonečna" číst řádky + while True: + try: + line_bytes = ser.readline() + if line_bytes: + line_str = line_bytes.decode("utf-8").strip() + print(f"Přijato: {line_str}") + if line_str.startswith("T:") and ",H:" in line_str: + parts = line_str.split(",") #-> [0]:"T:XX.X", [1]:"H:YY.Y" + temp_str = parts[0].split(":")[1] #->[0]:"T" [1]:"XX.X" + hum_str = parts[1].split(":")[1] #->[0]:"H" [1]:"YY.Y" + try: + temperature = float(temp_str) + humidity = float(hum_str) + insert_data(temperature,humidity) + except ValueError: + print(f"chyba při převedení -> T:{temp_str}, H:{hum_str}") + else: + if line_str: + print(f"Neznámy format pro DB: {line_str}") + + except UnicodeDecodeError: + print("Chyba: Přijatá data nelze dekodovat") + except serial.SerialException as e: + print(f"Chyba seriove komunikace: {e} \n END") + break + except Exception as e: + print(f"neznámá chyba: {e}") + time.sleep(1) + except serial.SerialException as e: + print(f"Chyba: nepodařilo se otevřít port {SERIAL_PORT}") + except KeyboardInterrupt: + print("Program ukončen uživatelem (CTRL+C)") + finally: + #čast programu která se provede vždy normálním ukončení nebo chybou + if ser and ser.is_open: + ser.close() + print("Seriovy prot byl uzavřen") + +if __name__ == "__main__": + read_from_esp32() + \ No newline at end of file diff --git a/15_dhtsim_usb/python_sqlite/dht_data.sqlite b/15_dhtsim_usb/python_sqlite/dht_data.sqlite new file mode 100644 index 0000000..eb31f2b Binary files /dev/null and b/15_dhtsim_usb/python_sqlite/dht_data.sqlite differ diff --git a/15_dhtsim_usb/python_sqlite/read_usbserial.py b/15_dhtsim_usb/python_sqlite/read_usbserial.py index cab87a5..c89d496 100644 --- a/15_dhtsim_usb/python_sqlite/read_usbserial.py +++ b/15_dhtsim_usb/python_sqlite/read_usbserial.py @@ -2,7 +2,7 @@ import serial import time import sys -SERIAL_PORT = COM3 #COM port pro ESP32 (každy bude mít jiný) +SERIAL_PORT = "COM3" #COM port pro ESP32 (každy bude mít jiný) BAUD_RATE = 115200 def read_from_esp32(): @@ -13,7 +13,31 @@ def read_from_esp32(): ser = serial.Serial(SERIAL_PORT,BAUD_RATE,timeout=1) print("Připojeno") time.sleep(2) - #po přípojení začneme do nekonečna číst řádky + #po přípojení začneme do "nekonečna" číst řádky while True: try: - line_byte = ser.readline() \ No newline at end of file + line_bytes = ser.readline() + if line_bytes: + line_str = line_bytes.decode("utf-8").strip() + print(f"Přijato: {line_str}") + except UnicodeDecodeError: + print("Chyba: Přijatá data nelze dekodovat") + except serial.SerialException as e: + print(f"Chyba seriove komunikace: {e} \n END") + break + except Exception as e: + print(f"neznámá chyba: {e}") + time.sleep(1) + except serial.SerialException as e: + print(f"Chyba: nepodařilo se otevřít port {SERIAL_PORT}") + except KeyboardInterrupt: + print("Program ukončen uživatelem (CTRL+C)") + finally: + #čast programu která se provede vždy normálním ukončení nebo chybou + if ser and ser.is_open: + ser.close() + print("Seriovy prot byl uzavřen") + +if __name__ == "__main__": + read_from_esp32() + \ No newline at end of file