from machine import Pin, ADC, PWM, Timer
from time import sleep
import sys, urequests, network
import urequests
# Sensores e atuadores
ldr = ADC(Pin(34))
ldr.atten(ADC.ATTN_11DB)
botao = Pin(16, Pin.IN, Pin.PULL_UP)
servo = PWM(Pin(2), freq=50)
# WiFi
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
# ThingSpeak
HTTP_HEADERS = {'Content-Type': 'application/json'}
THINGSPEAK_WRITE_API_KEY = 'RCP838I779FFYKXX' # campo1
THINGSPEAK_READ_API_KEY = 'DN3P9572YE6I384D'
CHANNEL_ID = '2991252'
URL_WRITE = 'http://api.thingspeak.com/update?api_key=' + THINGSPEAK_WRITE_API_KEY
URL_READ_FIELD2 = f"https://api.thingspeak.com/channels/{CHANNEL_ID}/fields/2.json?api_key={THINGSPEAK_READ_API_KEY}&results=1"
URL_READ_FIELD1 = f"https://api.thingspeak.com/channels/{CHANNEL_ID}/fields/1.json?api_key={THINGSPEAK_READ_API_KEY}&results=1"
def conexao_wifi():
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.disconnect()
wifi.connect(WIFI_SSID, WIFI_PASSWORD)
if not wifi.isconnected():
print('Conectando..')
timeout = 0
while (not wifi.isconnected() and timeout < 10):
print(10 - timeout)
timeout = timeout + 1
sleep(1)
if(wifi.isconnected()):
print('Conectado!')
else:
print('NÃO Conectado!')
sys.exit()
print('Config. da rede', wifi.ifconfig())
def mover_servo(angulo):
duty = int((angulo / 180 * 100) + 26)
servo.duty(duty)
conexao_wifi()
estado_anterior = 1
status = 0
while True:
try:
atual = botao.value()
if estado_anterior == 1 and atual == 0:
status = 0 if status == 1 else 1
urequests.post(URL_WRITE, json={"field2": status}, headers=HTTP_HEADERS).close()
print(f"Status {status} enviado para field2.")
sleep(1)
estado_anterior = atual
# Lê o status do sistema no campo2
resp_status = urequests.get(URL_READ_FIELD2)
dados_status = resp_status.json()
feeds = dados_status.get("feeds", [])
if feeds and feeds[-1].get("field2"):
status = int(feeds[-1]["field2"])
else:
status = 0
resp_status.close()
# Se estiver ativado, envia luminosidade e move servo
if status == 1:
valor = ldr.read()
print(f'Luminosidade: {valor}')
leituras = {'field1': valor}
request = urequests.post(URL_WRITE, json=leituras, headers=HTTP_HEADERS)
request.close()
print(leituras)
print('| Mensagem enviada ao ThingSpeak! |')
# Lê valor do field1 (caso seja remoto) e move servo
resp_lux = urequests.get(URL_READ_FIELD1)
dados_lux = resp_lux.json()
feeds = dados_lux.get("feeds", [])
if feeds and feeds[-1].get("field1"):
lux = int(float(feeds[-1]["field1"]))
else:
lux = 0
resp_lux.close()
print(f"Lux lido do field1: {lux}")
if lux > 2000:
mover_servo(0) # fechar persiana
print("Fechando persiana.")
else:
mover_servo(90) # abrir persiana
print("Abrindo persiana.")
else:
print("Sistema desligado (status=0).")
sleep(5)