import board
import analogio
from config import CONFIG
class TemperatureSensor:
def __init__(self, pin):
self.analog_in = analogio.AnalogIn(pin)
self.offset = CONFIG.get('temp_offset', 0.0)
def read_raw(self):
return self.analog_in.value
def read_voltage(self):
return (self.analog_in.value * 3.3) / 65536
def read_celsius(self):
voltage = self.read_voltage()
temp_c = (voltage - 0.5) * 100 + self.offset
return temp_c
def read_fahrenheit(self):
return self.read_celsius() * 9/5 + 32
class LightSensor:
def __init__(self, pin):
self.analog_in = analogio.AnalogIn(pin)
self.calibration = CONFIG.get('light_calibration', 1.0)
def read_raw(self):
return self.analog_in.value
def read_voltage(self):
return (self.analog_in.value * 3.3) / 65536
def read_percent(self):
raw_percent = (self.analog_in.value / 65536) * 100
return raw_percent * self.calibration
def read_lux(self, r_fixed=10000):
voltage = self.read_voltage()
if voltage == 0:
return 0
r_photo = r_fixed * (3.3 - voltage) / voltage
if r_photo > 0:
lux = 500000 / r_photo else:
lux = 0
return lux
class StatusLED:
def __init__(self, pin):
import digitalio
self.led = digitalio.DigitalInOut(pin)
self.led.direction = digitalio.Direction.OUTPUT
self.state = False
def on(self):
self.led.value = True
self.state = True
def off(self):
self.led.value = False
self.state = False
def toggle(self):
if self.state:
self.off()
else:
self.on()
def blink(self, duration=0.1):
self.on()
import time
time.sleep(duration)
self.off()