import network
import urequests
import json
from machine import Pin, I2C, PWM
from ssd1306 import SSD1306_I2C
import time
import ntptime # Asegúrate de que esta librería esté disponible en tu firmware
# Configuración WiFi
SSID = 'GusyOski' # Reemplaza con el SSID de tu red WiFi
PASSWORD_WIFI = 'Gusta3729' # Reemplaza con la contraseña de tu red WiFi
def conectar_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('Conectando a la red WiFi...')
wlan.connect(ssid, password)
timeout = 10 # Tiempo máximo en segundos para intentar conectar
start_time = time.time()
while not wlan.isconnected():
if time.time() - start_time > timeout:
print('No se pudo conectar a la red WiFi')
return False
time.sleep(1)
print('Conexión establecida:', wlan.ifconfig())
return True
def sincronizar_hora():
try:
ntptime.settime() # Sincroniza la hora local desde un servidor NTP
print('Hora sincronizada:', time.localtime())
except Exception as e:
print(f"Error al sincronizar la hora: {e}")
def enviar_datos(mensaje):
url = "https://auth-db855.hstgr.io/index.php?db=u588746708_barcito" # Usar HTTPS si está disponible
headers = {'Content-Type': 'application/json'}
# Obtener la fecha y hora actuales
fecha_hora = time.strftime('%Y-%m-%d %H:%M:%S')
# Verificar que la fecha y hora sean razonables
if fecha_hora == '1970-01-01 00:00:00':
print("Fecha y hora no están sincronizadas.")
return
payload = {
'mensaje': mensaje,
'timestamp': fecha_hora
}
try:
response = urequests.post(url, data=json.dumps(payload), headers=headers)
if response.status_code == 201:
print("Datos guardados exitosamente")
else:
print(f"Error al guardar datos: {response.text}")
response.close()
except Exception as e:
print(f"Error al enviar datos: {e}")
# Inicialización de hardware
ancho = 128
alto = 64
buzzer = PWM(Pin(13), freq=440, duty=512)
pir = Pin(23, Pin.IN, Pin.PULL_DOWN)
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
oled = SSD1306_I2C(ancho, alto, i2c)
def sonido(freq, sleep_time):
buzzer.freq(freq)
buzzer.duty(512)
time.sleep(sleep_time)
# Conectar a WiFi
if conectar_wifi(SSID, PASSWORD_WIFI):
# Sincronizar hora
sincronizar_hora()
while True:
if pir.value() == 1:
print("Movimiento Detectado")
# Enviar datos a la API con mensaje y timestamp
enviar_datos("Movimiento Detectado")
for _ in range(5):
sonido(440, 0.3)
oled.text("INTRUSO", 35, 20)
oled.text("DETECTADO !!!", 25, 30)
oled.show()
time.sleep(1)
sonido(900, 0.5)
oled.fill(0)
oled.show()
else:
print("Sin Movimientos")
oled.fill(0)
oled.show()
buzzer.duty(0)
time.sleep(1)
else:
print("No se pudo establecer la conexión WiFi. Verifica tus credenciales.")