Browse Source

add capture.py and db

master
Jakub Škrabánek 2 weeks ago
parent
commit
0d325e953e
  1. 2
      15_dhtsim_usb/esp32_simulace/esp32_simulace.ino
  2. 98
      15_dhtsim_usb/python_sqlite/capture.py
  3. BIN
      15_dhtsim_usb/python_sqlite/dht_data.sqlite
  4. 30
      15_dhtsim_usb/python_sqlite/read_usbserial.py

2
15_dhtsim_usb/esp32_simulace/esp32_simulace.ino

@ -8,6 +8,6 @@ void loop() {
float sim_temp = random(150,300) / 10.0; float sim_temp = random(150,300) / 10.0;
float sim_hum = random(400,700) / 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); delay(5000);
} }

98
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()

BIN
15_dhtsim_usb/python_sqlite/dht_data.sqlite

Binary file not shown.

30
15_dhtsim_usb/python_sqlite/read_usbserial.py

@ -2,7 +2,7 @@ import serial
import time import time
import sys 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 BAUD_RATE = 115200
def read_from_esp32(): def read_from_esp32():
@ -13,7 +13,31 @@ def read_from_esp32():
ser = serial.Serial(SERIAL_PORT,BAUD_RATE,timeout=1) ser = serial.Serial(SERIAL_PORT,BAUD_RATE,timeout=1)
print("Připojeno") print("Připojeno")
time.sleep(2) 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: while True:
try: try:
line_byte = ser.readline()
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()
Loading…
Cancel
Save