from machine import Pin, I2C
import network
import urequests
import time
import sys
from dht import DHT22
from lcd_api import LcdApi
from i2c_lcd import I2cLcd
# Configuração do LCD
I2C_ADDR = 0x27 # Endereço I2C do LCD (ajuste se necessário)
LCD_ROWS = 2 # Número de linhas do LCD
LCD_COLS = 16 # Número de colunas do LCD
# Inicializa I2C para o LCD
i2c = I2C(scl=Pin(23), sda=Pin(22), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, LCD_ROWS, LCD_COLS)
# Inicializa o sensor DHT22
dht22 = DHT22(Pin(12))
# Função para ler o DHT22
def readDht():
dht22.measure()
return dht22.temperature(), dht22.humidity()
# Função para conectar ao WiFi
def connect_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
if not wifi.isconnected():
print('connecting..')
timeout = 0
while (not wifi.isconnected() and timeout < 10):
print(10 - timeout)
timeout = timeout + 1
time.sleep(1)
if wifi.isconnected():
print('connected')
else:
print('not connected')
sys.exit()
print('network config:', wifi.ifconfig())
# Configuração do WiFi
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
connect_wifi() # Conectar ao WiFi
# Configuração do Thingspeak HTTP API Protocol
HTTP_HEADERS = {'Content-Type': 'application/json'}
THINGSPEAK_WRITE_API_KEY = 'KNF3H0A2TOMNOOAR'
# Loop principal
while True:
# Lê os dados do sensor DHT22
temp, hum = readDht()
print("Temperature: {}".format(temp))
print("Humidity: {}".format(hum))
# Exibe os dados no LCD
lcd.clear()
lcd.putstr("Temp: {:.1f} C".format(temp))
lcd.move_to(12, 2)
lcd.putstr("Hum: {:.1f} %".format(hum))
# Envia os dados para o ThingSpeak
dht_readings = {'field1': temp, 'field2': hum}
request = urequests.post('http://api.thingspeak.com/update?api_key=' + THINGSPEAK_WRITE_API_KEY, json=dht_readings, headers=HTTP_HEADERS)
request.close()
print(dht_readings)
print("Msg enviada para o Thingspeak channel com sucesso...")
print("********************************************")
time.sleep(5)