from machine import Pin, I2C, ADC # 引入必要模块
import dht
import time
from sh1107 import SH1107_I2C # 引入SH1107的驱动
# 初始化I2C接口
i2c = I2C(0, scl=Pin(13), sda=Pin(12)) # 根据实际硬件连接修改引脚
# 初始化OLED屏幕
oled = SH1107_I2C(128, 64, i2c)
LedRed = Pin(0, Pin.OUT) # 红色LED灯
LedYellow = Pin(1, Pin.OUT) # 黄色LED灯
LedGreen = Pin(2, Pin.OUT) # 绿色LED灯
RelayPump = Pin(3, Pin.OUT) # 控制水泵的继电器
RelayLight = Pin(5, Pin.OUT) # 控制灯光的继电器
RelayAir = Pin(6, Pin.OUT) # 控制通风的继电器
HumidityTemperatureSensor = dht.DHT22(Pin(4)) # 土壤湿度和温度传感器
ObscuritySensor = ADC(28) # 光线传感器
TemperatureAirSensor = ADC(27) # 外部温度传感器
while True:
# 读取传感器数据
HumidityTemperatureSensor.measure()
SoilTemperature = HumidityTemperatureSensor.temperature()
SoilHumidity = HumidityTemperatureSensor.humidity()
obscurity = ObscuritySensor.read_u16() * (100 / 65536) # 转换为百分比
ExternalTemperature = TemperatureAirSensor.read_u16()
# 根据湿度控制灌溉
if (0 <= SoilHumidity <= 30): # 极度干燥
LedRed.on()
LedYellow.off()
LedGreen.off()
RelayPump.off()
elif (30 < SoilHumidity <= 70): # 中度干燥
LedRed.off()
LedYellow.on()
LedGreen.off()
RelayPump.on()
else: # 正常
LedRed.off()
LedYellow.off()
LedGreen.on()
RelayPump.off()
# 根据光线强度控制灯光
if (obscurity > 70):
RelayLight.on()
else:
RelayLight.off()
# 根据温度控制通风
if (ExternalTemperature < 32535):
RelayAir.on()
else:
RelayAir.off()
# 在OLED屏幕上显示信息
oled.fill(0) # 清屏
oled.text("Greenhouse", 0, 0)
oled.text(f"Temp: {SoilTemperature:.1f}C", 0, 10)
oled.text(f"Hum: {SoilHumidity:.1f}%", 0, 20)
oled.text(f"Light: {obscurity:.1f}%", 0, 30)
oled.text(f"Temp: {ExternalTemperature * (3.3 / 65536):.1f}C", 0, 40) # 假设ADC值与温度有线性关系
oled.show() # 刷新屏幕
time.sleep(1) # 每秒更新一次