#https://wokwi.com/projects/459916893840735233
from machine import Pin, I2C
import dht
import time
import ssd1306
dados = {
"limite_seguro": 20,
"limite_medio": 30,
"intervalo_leitura": 2,
"pinos": {
"sensor_dht": 25,
"botao": 18,
"led_alerta": 23,
"led_aviso": 22,
"led_certo": 21,
"sda": 4,
"scl": 2
}
}
sensor = dht.DHT22(Pin(dados["pinos"]["sensor_dht"]))
ledVermelho = Pin(dados["pinos"]["led_alerta"], Pin.OUT)
ledAmarelo = Pin(dados["pinos"]["led_aviso"], Pin.OUT)
ledVerde = Pin(dados["pinos"]["led_certo"], Pin.OUT)
bot = Pin(dados["pinos"]["botao"], Pin.IN, Pin.PULL_UP)
i2c = I2C(0, scl=Pin(dados["pinos"]["scl"]), sda=Pin(dados["pinos"]["sda"]))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
historico = []
modo = 0
def ler_sensores():
sensor.measure()
return {
"temperatura": sensor.temperature(),
"umidade": sensor.humidity(),
"tempo": time.localtime()
}
def mostrar_leitura(leitura):
print("\n====== MONITORAMENTO ======")
print("Temperatura:", leitura["temperatura"], "°C")
print("Umidade:", leitura["umidade"], "%")
print("Horário:", leitura["tempo"])
print("===========================\n")
def classificar_temperatura(temp):
if temp < dados["limite_seguro"]:
return "FRIO"
elif temp < dados["limite_medio"]:
return "NORMAL"
else:
return "QUENTE"
def controlar_leds(classificacao):
ledVerde.off()
ledAmarelo.off()
ledVermelho.off()
if classificacao == "FRIO":
ledVerde.on()
elif classificacao == "NORMAL":
ledAmarelo.on()
else:
piscar_alerta()
def piscar_alerta():
for _ in range(3):
ledVermelho.on()
time.sleep(0.3)
ledVermelho.off()
time.sleep(0.3)
def calcular_media():
if not historico:
return 0
return sum(historico) / len(historico)
def verificar_botao():
global modo
if bot.value() == 0:
modo = not modo
time.sleep(0.3)
def mostrar_oled(leitura, classificacao):
oled.fill(0)
if modo == 0:
oled.text("TEMP: {}C".format(leitura["temperatura"]), 0, 0)
oled.text("UMID: {}%".format(leitura["umidade"]), 0, 10)
oled.text("STATUS:", 0, 25)
oled.text(classificacao, 0, 35)
else:
media = calcular_media()
oled.text("HISTORICO", 0, 0)
oled.text("Leituras: {}".format(len(historico)), 0, 15)
oled.text("Media:", 0, 30)
oled.text("{}C".format(round(media, 2)), 0, 45)
oled.show()
while True:
verificar_botao()
leitura = ler_sensores()
classificacao = classificar_temperatura(leitura["temperatura"])
historico.append(leitura["temperatura"])
mostrar_leitura(leitura)
print("Classificação:", classificacao)
print("Média:", round(calcular_media(), 2), "°C")
controlar_leds(classificacao)
mostrar_oled(leitura, classificacao)
time.sleep(dados["intervalo_leitura"])