Skip to content

Trabajo de Cesar Alexis Peñuelas Cardenas #59

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 17 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
139 changes: 139 additions & 0 deletions class-material/FakeSensors/CO (MQ-7)/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Sensor de CO (MQ-7)

## 📌 Descripción
Script Python que funciona como puente MQTT para:
1. Recibir datos del sensor que vienen desde Wokwi
2. Parsear y transformar los datos a JSON
3. Reenviar la información estructurada a Flespi

## Codigo de Woswi donde se envian los datos
```
import time
import network
import random
from umqtt.simple import MQTTClient

# 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 = "wokwi/sensor2"
client = MQTTClient("esp32", BROKER)
client.connect()

# Bucle infinito para enviar datos cada 3 segundos
while True:
co_value = random.uniform(0.1, 10.0) # Simular lectura del sensor MQ-7 (CO en ppm)
client.publish(TOPIC, str(co_value))
print("📤 Enviado:", co_value, "ppm")
time.sleep(3) # Esperar 3 segundos antes de enviar el siguiente dato
```

![image](https://github.com/user-attachments/assets/6451d928-1617-41cf-91c4-e5a266dd82a5)

# Codigo python que sirve como puente
```
import paho.mqtt.client as mqtt
import time

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

# Configuración de Flespi
FLESPI_BROKER = "mqtt.flespi.io"
FLESPI_PORT = 1883
FLESPI_TOPIC = "wokwi/sensor2" # Puedes cambiarlo según tus necesidades
FLESPI_TOKEN = "CbGNcrGPnhcZoghrbCPkVhenEey1qeTPs1AkacRFcbC3uFNm11gr1stlduUMyzjg" # 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}")

```
![image](https://github.com/user-attachments/assets/3f9dbad3-c5a4-4379-9cd1-645ef5e2ba2c)

# Datos en Flespi

![image](https://github.com/user-attachments/assets/f2943f0c-9c60-4ea5-85e0-f1a5906d776d)
145 changes: 145 additions & 0 deletions class-material/FakeSensors/VIBRACION/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Sensor de vibración piezoeléctrico

**Nombre: Cesar Alexis Peñuelas Cardenas**

**Matricula: 22210335**

**Github: Cesarr777**

## 📌 Descripción
Script Python que funciona como puente MQTT para:
1. Recibir datos del sensor que vienen desde Wokwi
2. Parsear y transformar los datos a JSON
3. Reenviar la información estructurada a Flespi

## Codigo de Woski donde se envian los datos
```
import time
import network
import random
from umqtt.simple import MQTTClient

# 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 = "wokwi/sensor1"
client = MQTTClient("esp32", BROKER)
client.connect()

# Bucle infinito para enviar datos cada 3 segundos
while True:
vibration_value = random.randint(0, 1023) # Simular lectura del sensor piezoeléctrico
client.publish(TOPIC, str(vibration_value))
print("📤 Enviado:", vibration_value)
time.sleep(3) # Esperar 3 segundos antes de enviar el siguiente dato
```

![image](https://github.com/user-attachments/assets/0b8b9d69-b72b-4a46-ac5a-a1d44e3d4dec)


# Codigo python que sirve como puente
```
import paho.mqtt.client as mqtt
import time

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

# Configuración de Flespi
FLESPI_BROKER = "mqtt.flespi.io"
FLESPI_PORT = 1883
FLESPI_TOPIC = "wokwi/sensor1" # Puedes cambiarlo según tus necesidades
FLESPI_TOKEN = "CbGNcrGPnhcZoghrbCPkVhenEey1qeTPs1AkacRFcbC3uFNm11gr1stlduUMyzjg" # 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}")

```
![image](https://github.com/user-attachments/assets/d33bd141-127d-4333-b0bb-1caa927c55a6)

# Datos en Flespi
![image](https://github.com/user-attachments/assets/83dbf7a4-7e0c-4ead-a9ec-98da17de71c6)
2 changes: 2 additions & 0 deletions class-material/FakeSensors/readme.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

[readme.md](https://github.com/user-attachments/files/19595141/readme.md)
<img width="452" alt="Screenshot 2025-03-31 at 2 53 45 p m" src="https://github.com/user-attachments/assets/e818e879-8723-4618-bafe-1e3d764ac43c" />


Expand Down Expand Up @@ -35,3 +36,4 @@ Acompañemiento del BOT: https://chatgpt.com/g/g-67e4731b422481919463f4b52818e9c

**Sensor → Raspberry Pi Pico W → MQTT (Flespi) → Node-RED / Grafana / EC2.**