import os import glob import time import datetime # --- KONFIGURACJA STEROWNIKÓW --- # Ładowanie modułów jądra odpowiedzialnych za obsługę 1-Wire # To jest konieczne, aby system "widział" czujnik w folderze /sys/bus/... os.system('modprobe w1-gpio') os.system('modprobe w1-therm') # --- ZNAJDOWANIE CZUJNIKA --- base_dir = '/sys/bus/w1/devices/' try: # Szukamy folderu, który zaczyna się od "28-" (kod rodziny DS18B20) device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' print(f"Znaleziono czujnik: {device_folder.split('/')[-1]}") except IndexError: print("BŁĄD: Nie wykryto czujnika DS18B20!") print("Sprawdź czy w raspi-config włączone jest '1-Wire' oraz czy kable i rezystor siedzą mocno.") exit() # --- FUNKCJE ODCZYTU --- def read_temp_raw(): """Pobiera surową zawartość pliku systemowego czujnika.""" with open(device_file, 'r') as f: lines = f.readlines() return lines def read_temp(): """Przetwarza dane i zwraca temperaturę jako liczbę (float).""" lines = read_temp_raw() # Pierwsza linia musi kończyć się na 'YES', co oznacza poprawną sumę kontrolną while lines[0].()[-3:] != 'YES': time.sleep(0.2) lines = read_temp_raw() # Szukamy ciągu 't=' w drugiej linii equals_pos = lines[1].find('t=') if equals_pos != -1: temp_string = lines[1][equals_pos+2:] # Wartość jest w tysięcznych stopnia, więc dzielimy przez 1000 temp_c = float(temp_string) / 1000.0 return temp_c # --- GŁÓWNA PĘTLA PROGRAMU --- print("Rozpoczynam pomiar... (Naciśnij CTRL+C, aby zakończyć)") print("-" * 40) try: while True: # 1. Pobierz temperaturę temp = read_temp() # 2. Pobierz aktualną godzinę dla czytelności teraz = datetime.datetime.now().strftime("%H:%M:%S") # 3. Wyświetl wynik w konsoli # Używamy formatowania f-string, aby ograniczyć wynik do 2 miejsc po przecinku print(f"[{teraz}] Temperatura: {temp:.2f} °C") # 4. Czekaj 1 sekundę przed kolejnym odczytem time.sleep(1) except KeyboardInterrupt: print("\nZatrzymano pomiar.")