from machine import Pin, ADC, I2C
import dht
import ssd1306
from definitions import button, draw_screen_0, draw_screen_1, draw_screen_2
from definitions import read_dht, read_ldr, read_mq2, oled
from Weahter_api import get_weather_api, prever_tempo
from google_api import envia_google, envia_media, envia_email
import network
import time
from umqtt.simple import MQTTClient
import ujson
import ubinascii
import machine
# ===== CONFIG WIFI =====
SSID = "Wokwi-GUEST"
PASSWORD_WIFI = ""
# ===== CONFIG MQTT (HiveMQ Cloud) =====
MQTT_BROKER = "65e64091186d4a258ade909efa66f733.s1.eu.hivemq.cloud"
PORT = 8883
MQTT_CLIENT = ubinascii.hexlify(machine.unique_id())
USER = b"teste"
MQTT_PASSWORD = b"Teste123"
MQTT_TOPIC = b"wokwi-clima"
MQTT_TOPIC2 = b"wokwi-previsao"
MQTT_TOPIC3 = b"api-resp"
# ===== CONEXÃO WIFI =====
print("Conectando ao WiFi...", end="")
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD_WIFI)
while not wifi.isconnected():
print(".", end="")
time.sleep(0.3)
print("\nWiFi conectado:", wifi.ifconfig())
# ===== CONEXÃO MQTT (SSL) =====
print("Conectando ao MQTT (HiveMQ Cloud)...")
client = MQTTClient(
client_id=MQTT_CLIENT,
server=MQTT_BROKER,
port=PORT,
user=USER,
password=MQTT_PASSWORD,
ssl=True,
ssl_params={"server_hostname": MQTT_BROKER}
)
client.connect()
print("MQTT conectado com sucesso!")
# ===== VARIÁVEIS =====
screen = 0
prev_weather = ""
prev_passada = ""
last_pressure = None
cont = 0
# ===== LOOP PRINCIPAL =====
while True:
# ===== BOTÃO =====
if button.value() == 0:
screen = (screen + 1) % 3
time.sleep(0.2)
# ===== LEITURA SENSORES =====
temp, hum = read_dht()
ldr = read_ldr()
mq2 = read_mq2()
# ===== OLED =====
if screen == 0:
draw_screen_0()
elif screen == 1:
draw_screen_1()
elif screen == 2:
draw_screen_2()
# ===== MQTT CLIMA =====
message = ujson.dumps({
"temp": temp,
"hum": hum,
"luz": ldr,
"gas": mq2
})
if message != prev_weather:
print("Enviando clima ao MQTT:", message)
client.publish(MQTT_TOPIC, message)
prev_weather = message
#planilha google sheets
while cont <= 2:
try:
print("Enviando dados para a planilha...")
envia_google(temp, hum)
print("Enviado com sucesso ao Google Sheets")
cont = cont + 1
except Exception as e:
print("Erro:", e)
else:
try:
med_temp, med_hum = envia_media()
envia_email(med_temp, med_hum)
print("Relatório enviado ao email!")
cont = 0
except Exception as e:
print("Erro ao enviar email:", e)
# ===== API =====
pressure, temp_api, weather_api = get_weather_api()
api_resp = ujson.dumps({
"pressao": pressure,
"temperatura": temp_api,
"clima": weather_api
})
previsao = prever_tempo(temp)
message_prev = ujson.dumps({
"previsao": previsao
})
if message_prev != prev_passada:
print("Enviando previsão:", message_prev)
client.publish(MQTT_TOPIC2, message_prev)
prev_passada = message_prev
time.sleep(0.1)