from machine import Pin, I2C, ADC
import ssd1306
import onewire, ds18x20
import time
# Setup OLED display
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Setup DS18B20 temperature sensor
ds_pin = Pin(15)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
# Setup potentiometer (simulating TDS sensor)
potentiometer = ADC(Pin(34))
potentiometer.atten(ADC.ATTN_11DB) # Configure attenuation for full range
# Function to simulate TDS value
def read_tds():
adc_value = potentiometer.read()
voltage = adc_value * (3.3 / 4095) # Convert ADC value to voltage
tds_value = (voltage * 1000) / 133 # Simulated calculation
return tds_value
# Main loop
while True:
# Read temperature
ds_sensor.convert_temp()
time.sleep_ms(750)
temperature = ds_sensor.read_temp(roms[0])
# Read TDS value
tds_value = read_tds()
# Display values on OLED
oled.fill(0)
oled.text('Water Quality', 0, 0)
oled.text('Temp: {:.2f} C'.format(temperature), 0, 20)
oled.text('TDS: {:.2f} ppm'.format(tds_value), 0, 40)
oled.show()
time.sleep(2)