Skip to content

Commit d9214c1

Browse files
authored
Merge pull request #62 from Brandon1216/main
Brandon Orozco Hernandez
2 parents e5434df + dc11632 commit d9214c1

File tree

2 files changed

+271
-0
lines changed

2 files changed

+271
-0
lines changed
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
# 📡 Sensor de Lluvia - MQTT
2+
**Autor:** Brandon Orozco Hernández
3+
4+
Este código en Python permite recibir datos del **sensor de lluvia** a través de **Wokwi** y reenviarlos a **Flespi** mediante MQTT.
5+
6+
## 🔧 Configuración
7+
- **Broker Wokwi:** `test.mosquitto.org`
8+
- **Broker Flespi:** `mqtt.flespi.io`
9+
- **Tópico MQTT:** `ebike/lluvia`
10+
![image](https://github.com/user-attachments/assets/1a4456bb-3591-4fd9-a7d6-68932b068cd8)
11+
![image](https://github.com/user-attachments/assets/32a1c2c2-bab8-4520-a401-730e61ba59b4)
12+
![image](https://github.com/user-attachments/assets/c0f6a4ea-5c8c-49d3-8e9c-20bfa82c234b)
13+
14+
## 📜 Código en Python
15+
```python
16+
import time
17+
import network
18+
from umqtt.simple import MQTTClient
19+
from machine import Pin, ADC
20+
21+
# Configurar WiFi en Wokwi
22+
SSID = "Wokwi-GUEST"
23+
PASSWORD = ""
24+
25+
wifi = network.WLAN(network.STA_IF)
26+
wifi.active(True)
27+
wifi.connect(SSID, PASSWORD)
28+
29+
while not wifi.isconnected():
30+
print("Conectando a WiFi...")
31+
time.sleep(1)
32+
33+
print("✅ WiFi Conectado. IP:", wifi.ifconfig()[0])
34+
35+
# Configurar MQTT
36+
BROKER = "test.mosquitto.org"
37+
TOPIC_LLUVIA = "ebike/lluvia"
38+
client = MQTTClient("esp32", BROKER)
39+
client.connect()
40+
41+
# Configurar sensor de lluvia (YL-83)
42+
sensor_lluvia = ADC(Pin(34)) # Pin analógico 34
43+
divisor = 4095 # ADC de 12 bits
44+
45+
# Bucle infinito para enviar datos cada 3 segundos
46+
while True:
47+
# Leer sensor de lluvia
48+
valor_agua = sensor_lluvia.read()
49+
porcentaje = 100 - (valor_agua / divisor * 100)
50+
mensaje_lluvia = f"{porcentaje:.2f}% humedad"
51+
52+
# Publicar datos
53+
client.publish(TOPIC_LLUVIA, mensaje_lluvia)
54+
55+
print("📤 Lluvia Enviada:", mensaje_lluvia)
56+
57+
time.sleep(3)
58+
59+
## 📜 Código en Wokwi
60+
61+
import paho.mqtt.client as mqtt
62+
import time
63+
64+
# Configuración de Wokwi
65+
WOKWI_BROKER = "test.mosquitto.org"
66+
WOKWI_PORT = 1883
67+
WOKWI_TOPIC = "ebike/lluvia"
68+
69+
# Configuración de Flespi
70+
FLESPI_BROKER = "mqtt.flespi.io"
71+
FLESPI_PORT = 1883
72+
FLESPI_TOPIC = "ebike/lluvia" # Puedes cambiarlo según tus necesidades
73+
FLESPI_TOKEN = "W5Wy01hB7cD5DeenObhpdWnlExEBWtLSKzMy41hujkVvxMDbLfBTBvU5JjAH5Zv0" # Reemplaza con tu token de Flespi
74+
75+
# Solución para la advertencia de deprecación
76+
def on_connect(client, userdata, flags, rc, properties=None):
77+
if rc == 0:
78+
print("✅ Conectado correctamente")
79+
else:
80+
print(f"❌ Error de conexión: {rc}")
81+
82+
def on_message_wokwi(client, userdata, msg):
83+
try:
84+
payload = msg.payload.decode()
85+
print(f"📥 Recibido de Wokwi: {payload}")
86+
87+
# Verificar si es un mensaje NMEA
88+
if payload.startswith('$GPGGA'):
89+
# Procesamiento básico de NMEA
90+
parts = payload.split(',')
91+
nmea_data = {
92+
'type': 'GPGGA',
93+
'time': parts[1],
94+
'latitude': f"{parts[2]} {parts[3]}",
95+
'longitude': f"{parts[4]} {parts[5]}",
96+
'fix_quality': parts[6],
97+
'satellites': parts[7],
98+
'hdop': parts[8],
99+
'altitude': f"{parts[9]} {parts[10]}",
100+
'raw': payload
101+
}
102+
103+
# Convertir a JSON para enviar a Flespi
104+
json_payload = str(nmea_data).replace("'", '"')
105+
106+
# Enviar a Flespi
107+
flespi_client.publish(FLESPI_TOPIC, json_payload)
108+
print(f"📤 Enviado a Flespi: {json_payload}")
109+
else:
110+
# Si no es NMEA, enviar tal cual
111+
flespi_client.publish(FLESPI_TOPIC, payload)
112+
print(f"📤 Enviado a Flespi (raw): {payload}")
113+
114+
except Exception as e:
115+
print(f"⚠️ Error al procesar mensaje: {e}")
116+
117+
# Configurar cliente Wokwi (versión actualizada para evitar warning)
118+
wokwi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
119+
wokwi_client.on_message = on_message_wokwi
120+
wokwi_client.on_connect = on_connect
121+
122+
# Configurar cliente Flespi
123+
flespi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
124+
flespi_client.username_pw_set(FLESPI_TOKEN)
125+
flespi_client.on_connect = on_connect
126+
127+
try:
128+
# Conectar a Flespi
129+
flespi_client.connect(FLESPI_BROKER, FLESPI_PORT)
130+
flespi_client.loop_start()
131+
132+
# Conectar a Wokwi
133+
wokwi_client.connect(WOKWI_BROKER, WOKWI_PORT)
134+
wokwi_client.subscribe(WOKWI_TOPIC)
135+
print("📡 Esperando datos de Wokwi...")
136+
137+
# Mantener el script corriendo
138+
wokwi_client.loop_forever()
139+
140+
except KeyboardInterrupt:
141+
print("\n🔌 Desconectando...")
142+
wokwi_client.disconnect()
143+
flespi_client.disconnect()
144+
except Exception as e:
145+
print(f"❌ Error crítico: {e}")
146+
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
# Sensor de Movimiento con Radar (RCWL-0516)
2+
**Autor:** Brandon Orozco Hernandez
3+
4+
## 📡 **Requisitos**
5+
- **ESP32** con MicroPython
6+
- **Broker MQTT** (Mosquitto o Flespi)
7+
- **Conexión WiFi**
8+
- ---
9+
10+
## 📸 **Captura de Pantalla de Terminal de Python**
11+
![image](https://github.com/user-attachments/assets/4fdbd15f-5e29-4c0a-a7b5-ccdfd2877561)
12+
## 📸 **Captura de Pantalla de Terminal de Wokwi**
13+
![image](https://github.com/user-attachments/assets/360c5533-73b7-4bc0-a922-b1ee77268391)
14+
## 📸 **Captura de Pantalla de Terminal de Flepsi**
15+
![image](https://github.com/user-attachments/assets/2c8d9357-a172-4ce0-9bd5-d14d7e869109)
16+
17+
18+
## Código en wokwi y en python
19+
20+
```python
21+
import time
22+
import network
23+
from umqtt.simple import MQTTClient
24+
from machine import Pin
25+
26+
# Configurar WiFi en Wokwi
27+
SSID = "Wokwi-GUEST"
28+
PASSWORD = ""
29+
30+
wifi = network.WLAN(network.STA_IF)
31+
wifi.active(True)
32+
wifi.connect(SSID, PASSWORD)
33+
34+
while not wifi.isconnected():
35+
print("Conectando a WiFi...")
36+
time.sleep(1)
37+
38+
print("✅ WiFi Conectado. IP:", wifi.ifconfig()[0])
39+
40+
# Configurar MQTT
41+
BROKER = "test.mosquitto.org"
42+
TOPIC_MOVIMIENTO = "ebike/movimiento"
43+
client = MQTTClient("esp32", BROKER)
44+
client.connect()
45+
46+
# Configurar sensor de movimiento (RCWL-0516)
47+
sensor_movimiento = Pin(34, Pin.IN) # RCWL-0516 conectado al GPIO 34
48+
49+
# Bucle infinito para detectar y enviar datos
50+
while True:
51+
if sensor_movimiento.value() == 1: # Detecta movimiento
52+
mensaje = "Movimiento detectado"
53+
client.publish(TOPIC_MOVIMIENTO, mensaje)
54+
print("📤 Publicado en MQTT:", mensaje)
55+
time.sleep(2) # Espera para evitar spam de mensajes
56+
57+
time.sleep(0.1) # Pequeña pausa para evitar sobrecarga
58+
## ⚡ **Código en Python**
59+
60+
```python
61+
import paho.mqtt.client as mqtt
62+
import time
63+
64+
# Configuración de Wokwi
65+
WOKWI_BROKER = "test.mosquitto.org"
66+
WOKWI_PORT = 1883
67+
WOKWI_TOPIC = "ebike/movimiento"
68+
69+
# Configuración de Flespi
70+
FLESPI_BROKER = "mqtt.flespi.io"
71+
FLESPI_PORT = 1883
72+
FLESPI_TOPIC = "ebike/movimiento" # Puedes cambiarlo según tus necesidades
73+
FLESPI_TOKEN = "JsEaMID8LzTRfmwfWDGY5FA8JIghV3I9BokckxocuIXM0cavcwjB5dekB1kJHKyG" # Reemplaza con tu token de Flespi
74+
75+
# Solución para la advertencia de deprecación
76+
def on_connect(client, userdata, flags, rc, properties=None):
77+
if rc == 0:
78+
print("✅ Conectado correctamente")
79+
else:
80+
print(f"❌ Error de conexión: {rc}")
81+
82+
def on_message_wokwi(client, userdata, msg):
83+
try:
84+
payload = msg.payload.decode()
85+
print(f"📥 Recibido de Wokwi: {payload}")
86+
87+
# Enviar directamente a Flespi
88+
flespi_client.publish(FLESPI_TOPIC, payload)
89+
print(f"📤 Enviado a Flespi: {payload}")
90+
91+
except Exception as e:
92+
print(f"⚠️ Error al procesar mensaje: {e}")
93+
94+
# Configurar cliente Wokwi (versión actualizada para evitar warning)
95+
wokwi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
96+
wokwi_client.on_message = on_message_wokwi
97+
wokwi_client.on_connect = on_connect
98+
99+
# Configurar cliente Flespi
100+
flespi_client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
101+
flespi_client.username_pw_set(FLESPI_TOKEN)
102+
flespi_client.on_connect = on_connect
103+
104+
try:
105+
# Conectar a Flespi
106+
flespi_client.connect(FLESPI_BROKER, FLESPI_PORT)
107+
flespi_client.loop_start()
108+
109+
# Conectar a Wokwi
110+
wokwi_client.connect(WOKWI_BROKER, WOKWI_PORT)
111+
wokwi_client.subscribe(WOKWI_TOPIC)
112+
print("📡 Esperando datos de Wokwi...")
113+
114+
# Mantener el script corriendo
115+
wokwi_client.loop_forever()
116+
117+
except KeyboardInterrupt:
118+
print("\n🔌 Desconectando...")
119+
wokwi_client.disconnect()
120+
flespi_client.disconnect()
121+
except Exception as e:
122+
print(f"❌ Error crítico: {e}")
123+
124+
125+

0 commit comments

Comments
 (0)