import time
import machine
import micropython
import network
from machine import Pin,PWM
from umqtt.simple import MQTTClient
ssid = 'Wokwi-GUEST'
wifipassword = ''
mqtt_server = 'io.adafruit.com'
port = 1883
user = 'Rafaruiz'
password =
client_id = 'ledRGB'
topicled = 'Rafaruiz/feeds/ledRGB'
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, wifipassword)
print("Conectando")
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print("Conectado a Wifi!")
print(sta_if.ifconfig())
def callback_alarma(topic, msg):
global ALARMA_ACTIVA,LEDESTADO
dato = msg.decode('utf-8')
topicrec = topic.decode('utf-8')
print("Cambio en: "+topicrec+":"+dato)
if topicrec == topic_ALARMA and "OFF" in dato:
ALARMA_ACTIVA=False
else:
ALARMA_ACTIVA=True
LEDESTADO.value(ALARMA_ACTIVA)
try:
conexionMQTT = MQTTClient(client_id, mqtt_server,user=user,password=password,port=int(port))
conexionMQTT.set_callback(callback_alarma)
conexionMQTT.connect()
conexionMQTT.subscribe(topic_ALARMA)
print("Conectado con Broker MQTT")
except OSError as e:
print("Fallo la conexion al Broker, reiniciando...")
time.sleep(5)
machine.reset()
PIR = Pin(27,Pin.IN)
estadoPIR = PIR.value()
print("Comenzando monitoreo de PIR")
while True:
try:
conexionMQTT.check_msg()
time.sleep_ms(500)
estadoPIRNuevo = PIR.value()
LEDPIR.value(estadoPIRNuevo)
if ALARMA_ACTIVA:
#Y el PIR detecta movimiento
if estadoPIRNuevo:
#Entonces tiene que sonar
SONANDO=True
#Si el estado anterior del PIR era 0, entonces notificamos
#ya que el PIR estaba apagado y ahora encendido, o sea que acaba
#de detectar movimiento
if not estadoPIR:
#enviamos al server el cambio
print("PIR Activo durante estado de alarma activa")
conexionMQTT.publish(topic_PIR,str(1))
else:
#Si el PIR no detecta movimiento pero lo hizo anterior mente
#Entonces notificamos
if estadoPIR:
conexionMQTT.publish(topic_PIR,str(0))
else:
#Si la alarma no esta activa, no deberia sonar
SONANDO=False
#Siempre actualizamos el estado del PIR
estadoPIR = estadoPIRNuevo
if SONANDO:
SIRENA.duty(512)
else:
SIRENA.duty(0)
except OSError as e:
print("Error ",e)
time.sleep(5)
machine.reset()