March 24, 2025, 16:29
import time import os import board import busio import adafruit_ads1x15.ads1115 as ADS from adafruit_ads1x15.analog_in import AnalogIn import spidev as SPI from lib import LCD_1inch8 from PIL import Image, ImageFont # :tools: Nastavení ADS1115 (I2C) i2c = busio.I2C(scl=3, sda=2) ads = ADS.ADS1115(i2c) ads.gain = 1 # Nastavení rozsahu na ±4.096V # Definice vstupních kanálů lm35 = AnalogIn(ads, ADS.P0) # AIN0 - Teplota moisture = AnalogIn(ads, ADS.P1) # AIN1 - Vlhkost půdy ldr = AnalogIn(ads, ADS.P2) # AIN2 - Světelný senzor # :tools: Nastavení displeje (SPI) RST = 27 DC = 25 BL = 18 bus = 0 device = 0
disp = LCD_1inch8.LCD_1inch8(spi=SPI.SpiDev(bus, device), spi_freq=4000000, rst=RST, dc=DC, bl=BL) disp.Init() disp.clear() # :pen_fountain: Font pro text font = ImageFont.load_default() # Mapovací funkce def _map(x, in_min, in_max, out_min, out_max): return int((x - in_min) (out_max - out_min) / (in_max - in_min) + out_min) ANIMATION_PATH = "/home/raspberry/Desktop" # :green_circle: Čtení hodnot senzorů def read_sensors(): temp_c = (lm35.value 0.00005) 100 moisture_val = _map(moisture.value, 27500, 0, 100, 0) # Přepočet vlhkosti ldr_percent = _map(ldr.value, 15000, 100, 0, 100) # Přepočet světla print(f"Teplota: {temp_c:.2f}°C, Světlo: {ldr_percent}%, Vlhkost: {moisture_val}%") return temp_c, moisture_val, ldr_percent # :green_circle: Vybere správnou animaci podle senzorů def select_animation(temp, moisture, light): return "happy" def play_animation(folder): path = os.path.join(ANIMATION_PATH, folder) frames = sorted([f for f in os.listdir(path) if f.endswith(".png")]) current_frame = 0 last_update = time.time() while True: now = time.time() if now - last_update >= 0.05: # Kontrola času pro správný frame rate img_path = os.path.join(path, frames[current_frame]) img = Image.open(img_path).resize((disp.width, disp.height)) disp.ShowImage(img) current_frame = (current_frame + 1) % len(frames) # Posun na další snímek last_update = now # Každých X sekund zkontrolujeme senzory if current_frame % 60 == 0: # Např. každých 3 sekundy (60 0.05s) temp, moisture, light = read_sensors() new_animation = select_animation(temp, moisture, light) if new_animation != folder: break # Ukončí smyčku a přepne animaci
def main(): current_animation = "happy" while True: play_animation(current_animation) # Přečti hodnoty a aktualizuj animaci temp, moisture, light = read_sensors() new_animation = select_animation(temp, moisture, light) if new_animation != current_animation: current_animation = new_animation # Změní animaci try: main() except KeyboardInterrupt: disp.module_exit() print("Program ukončen.")