Skip to content

Brandon Orozco Hernandez #62

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
146 changes: 146 additions & 0 deletions class-material/FakeSensors/Sensor de lluvia/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
# 📡 Sensor de Lluvia - MQTT
**Autor:** Brandon Orozco Hernández

Este código en Python permite recibir datos del **sensor de lluvia** a través de **Wokwi** y reenviarlos a **Flespi** mediante MQTT.

## 🔧 Configuración
- **Broker Wokwi:** `test.mosquitto.org`
- **Broker Flespi:** `mqtt.flespi.io`
- **Tópico MQTT:** `ebike/lluvia`
![image](https://github.com/user-attachments/assets/1a4456bb-3591-4fd9-a7d6-68932b068cd8)
![image](https://github.com/user-attachments/assets/32a1c2c2-bab8-4520-a401-730e61ba59b4)
![image](https://github.com/user-attachments/assets/c0f6a4ea-5c8c-49d3-8e9c-20bfa82c234b)

## 📜 Código en Python
```python
import time
import network
from umqtt.simple import MQTTClient
from machine import Pin, ADC

# Configurar WiFi en Wokwi
SSID = "Wokwi-GUEST"
PASSWORD = ""

wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)

while not wifi.isconnected():
print("Conectando a WiFi...")
time.sleep(1)

print("✅ WiFi Conectado. IP:", wifi.ifconfig()[0])

# Configurar MQTT
BROKER = "test.mosquitto.org"
TOPIC_LLUVIA = "ebike/lluvia"
client = MQTTClient("esp32", BROKER)
client.connect()

# Configurar sensor de lluvia (YL-83)
sensor_lluvia = ADC(Pin(34)) # Pin analógico 34
divisor = 4095 # ADC de 12 bits

# Bucle infinito para enviar datos cada 3 segundos
while True:
# Leer sensor de lluvia
valor_agua = sensor_lluvia.read()
porcentaje = 100 - (valor_agua / divisor * 100)
mensaje_lluvia = f"{porcentaje:.2f}% humedad"

# Publicar datos
client.publish(TOPIC_LLUVIA, mensaje_lluvia)

print("📤 Lluvia Enviada:", mensaje_lluvia)

time.sleep(3)

## 📜 Código en Wokwi

import paho.mqtt.client as mqtt
import time

# Configuración de Wokwi
WOKWI_BROKER = "test.mosquitto.org"
WOKWI_PORT = 1883
WOKWI_TOPIC = "ebike/lluvia"

# Configuración de Flespi
FLESPI_BROKER = "mqtt.flespi.io"
FLESPI_PORT = 1883
FLESPI_TOPIC = "ebike/lluvia" # Puedes cambiarlo según tus necesidades
FLESPI_TOKEN = "W5Wy01hB7cD5DeenObhpdWnlExEBWtLSKzMy41hujkVvxMDbLfBTBvU5JjAH5Zv0" # Reemplaza con tu token de Flespi

# Solución para la advertencia de deprecación
def on_connect(client, userdata, flags, rc, properties=None):
if rc == 0:
print("✅ Conectado correctamente")
else:
print(f"❌ Error de conexión: {rc}")

def on_message_wokwi(client, userdata, msg):
try:
payload = msg.payload.decode()
print(f"📥 Recibido de Wokwi: {payload}")

# Verificar si es un mensaje NMEA
if payload.startswith('$GPGGA'):
# Procesamiento básico de NMEA
parts = payload.split(',')
nmea_data = {
'type': 'GPGGA',
'time': parts[1],
'latitude': f"{parts[2]} {parts[3]}",
'longitude': f"{parts[4]} {parts[5]}",
'fix_quality': parts[6],
'satellites': parts[7],
'hdop': parts[8],
'altitude': f"{parts[9]} {parts[10]}",
'raw': payload
}

# Convertir a JSON para enviar a Flespi
json_payload = str(nmea_data).replace("'", '"')

# Enviar a Flespi
flespi_client.publish(FLESPI_TOPIC, json_payload)
print(f"📤 Enviado a Flespi: {json_payload}")
else:
# Si no es NMEA, enviar tal cual
flespi_client.publish(FLESPI_TOPIC, payload)
print(f"📤 Enviado a Flespi (raw): {payload}")

except Exception as e:
print(f"⚠️ Error al procesar mensaje: {e}")

# Configurar cliente Wokwi (versión actualizada para evitar warning)
wokwi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
wokwi_client.on_message = on_message_wokwi
wokwi_client.on_connect = on_connect

# Configurar cliente Flespi
flespi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
flespi_client.username_pw_set(FLESPI_TOKEN)
flespi_client.on_connect = on_connect

try:
# Conectar a Flespi
flespi_client.connect(FLESPI_BROKER, FLESPI_PORT)
flespi_client.loop_start()

# Conectar a Wokwi
wokwi_client.connect(WOKWI_BROKER, WOKWI_PORT)
wokwi_client.subscribe(WOKWI_TOPIC)
print("📡 Esperando datos de Wokwi...")

# Mantener el script corriendo
wokwi_client.loop_forever()

except KeyboardInterrupt:
print("\n🔌 Desconectando...")
wokwi_client.disconnect()
flespi_client.disconnect()
except Exception as e:
print(f"❌ Error crítico: {e}")

125 changes: 125 additions & 0 deletions class-material/FakeSensors/Sensor de movimiento/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
# Sensor de Movimiento con Radar (RCWL-0516)
**Autor:** Brandon Orozco Hernandez

## 📡 **Requisitos**
- **ESP32** con MicroPython
- **Broker MQTT** (Mosquitto o Flespi)
- **Conexión WiFi**
- ---

## 📸 **Captura de Pantalla de Terminal de Python**
![image](https://github.com/user-attachments/assets/4fdbd15f-5e29-4c0a-a7b5-ccdfd2877561)
## 📸 **Captura de Pantalla de Terminal de Wokwi**
![image](https://github.com/user-attachments/assets/360c5533-73b7-4bc0-a922-b1ee77268391)
## 📸 **Captura de Pantalla de Terminal de Flepsi**
![image](https://github.com/user-attachments/assets/2c8d9357-a172-4ce0-9bd5-d14d7e869109)


## Código en wokwi y en python

```python
import time
import network
from umqtt.simple import MQTTClient
from machine import Pin

# Configurar WiFi en Wokwi
SSID = "Wokwi-GUEST"
PASSWORD = ""

wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(SSID, PASSWORD)

while not wifi.isconnected():
print("Conectando a WiFi...")
time.sleep(1)

print("✅ WiFi Conectado. IP:", wifi.ifconfig()[0])

# Configurar MQTT
BROKER = "test.mosquitto.org"
TOPIC_MOVIMIENTO = "ebike/movimiento"
client = MQTTClient("esp32", BROKER)
client.connect()

# Configurar sensor de movimiento (RCWL-0516)
sensor_movimiento = Pin(34, Pin.IN) # RCWL-0516 conectado al GPIO 34

# Bucle infinito para detectar y enviar datos
while True:
if sensor_movimiento.value() == 1: # Detecta movimiento
mensaje = "Movimiento detectado"
client.publish(TOPIC_MOVIMIENTO, mensaje)
print("📤 Publicado en MQTT:", mensaje)
time.sleep(2) # Espera para evitar spam de mensajes

time.sleep(0.1) # Pequeña pausa para evitar sobrecarga
## ⚡ **Código en Python**

```python
import paho.mqtt.client as mqtt
import time

# Configuración de Wokwi
WOKWI_BROKER = "test.mosquitto.org"
WOKWI_PORT = 1883
WOKWI_TOPIC = "ebike/movimiento"

# Configuración de Flespi
FLESPI_BROKER = "mqtt.flespi.io"
FLESPI_PORT = 1883
FLESPI_TOPIC = "ebike/movimiento" # Puedes cambiarlo según tus necesidades
FLESPI_TOKEN = "JsEaMID8LzTRfmwfWDGY5FA8JIghV3I9BokckxocuIXM0cavcwjB5dekB1kJHKyG" # Reemplaza con tu token de Flespi

# Solución para la advertencia de deprecación
def on_connect(client, userdata, flags, rc, properties=None):
if rc == 0:
print("✅ Conectado correctamente")
else:
print(f"❌ Error de conexión: {rc}")

def on_message_wokwi(client, userdata, msg):
try:
payload = msg.payload.decode()
print(f"📥 Recibido de Wokwi: {payload}")

# Enviar directamente a Flespi
flespi_client.publish(FLESPI_TOPIC, payload)
print(f"📤 Enviado a Flespi: {payload}")

except Exception as e:
print(f"⚠️ Error al procesar mensaje: {e}")

# Configurar cliente Wokwi (versión actualizada para evitar warning)
wokwi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
wokwi_client.on_message = on_message_wokwi
wokwi_client.on_connect = on_connect

# Configurar cliente Flespi
flespi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
flespi_client.username_pw_set(FLESPI_TOKEN)
flespi_client.on_connect = on_connect

try:
# Conectar a Flespi
flespi_client.connect(FLESPI_BROKER, FLESPI_PORT)
flespi_client.loop_start()

# Conectar a Wokwi
wokwi_client.connect(WOKWI_BROKER, WOKWI_PORT)
wokwi_client.subscribe(WOKWI_TOPIC)
print("📡 Esperando datos de Wokwi...")

# Mantener el script corriendo
wokwi_client.loop_forever()

except KeyboardInterrupt:
print("\n🔌 Desconectando...")
wokwi_client.disconnect()
flespi_client.disconnect()
except Exception as e:
print(f"❌ Error crítico: {e}")