# ds18b20.py import machine import onewire import ds18x20 import time class DS18B20: def __init__(self, pin_number): self.data_pin = machine.Pin(pin_number) self.ds_sensor = ds18x20.DS18X20(onewire.OneWire(self.data_pin)) self.roms = self.ds_sensor.scan() if not self.roms: raise Exception('No DS18B20 device found') def read_temp(self, samples=1): if samples < 1: raise ValueError('Samples must be at least 1') total_temp = 0 for _ in range(samples): self.ds_sensor.convert_temp() time.sleep_ms(750) # Maximum conversion time for 12-bit resolution total_temp += self.ds_sensor.read_temp(self.roms[0]) time.sleep_ms(100) # Small delay between samples for sensor stability average_temp = total_temp / samples return average_temp # Example usage: # from ds18b20 import DS18B20 # sensor = DS18B20(pin_number=26) # temperature = sensor.read_temp() # print('Temperature:', temperature)