from machine import Pin, PWM, I2C
import ssd1306
import urequests as requests
import time
import network
# Configuración de WiFi y WhatsApp
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
API_URL = "https://api.callmebot.com/whatsapp.php"
PHONE_NUMBER = "+50432264330"
API_KEY = "9850545"
MESSAGE_ACTIVE = "SISTEMA ACTIVO!!"
MESSAGE_OPEN = "La puerta se ha abierto."
MESSAGE_CLOSED = "La puerta se ha cerrado."
# Configuración del servo
pwm = PWM(Pin(18), freq=50)
# Configuración del LED y Boton
led = Pin(12, Pin.OUT)
boton = Pin(4, Pin.IN, Pin.PULL_DOWN)
# Configuración del I2C para la pantalla OLED
i2c = I2C(0, scl=Pin(27), sda=Pin(14), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
def connectWifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Conectando a la red WiFi...')
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
while not wlan.isconnected():
time.sleep(1)
print('Conectado a la red WiFi:', WIFI_SSID)
def whatsapp(message):
encoded_message = message.replace(" ", "+")
url = "{}?phone={}&text={}&apikey={}".format(API_URL, PHONE_NUMBER, encoded_message, API_KEY)
try:
response = requests.get(url)
if response.status_code == 200:
print("Mensaje enviado:", message)
else:
print("Error al enviar el mensaje:", response.text)
except Exception as e:
print("Excepción al enviar el mensaje:", e)
def servo(angle):
duty = int(((angle / 180) * 2 + 0.5) * (1023 / 20))
pwm.duty(duty)
def display(line1, line2):
oled.fill(0)
oled.text(line1, 30, 10)
oled.text(line2, 30, 30)
oled.show()
# Conectar a WiFi
connectWifi()
# Inicio
display("Sistema", "Activado")
servo(0)
whatsapp(MESSAGE_ACTIVE)
time.sleep(5)
on = False
while True:
if boton.value() == 1:
if not on:
servo(90)
led.on()
on = True
display("", "BIENVENIDO")
whatsapp(MESSAGE_OPEN)
time.sleep(0.2)
else:
servo(0)
led.off()
on = False
display("Acceso", "Restringido")
whatsapp(MESSAGE_CLOSED)
time.sleep(0.2)