Saltar a contenido

Avance

Código base para MQTT en ESP32 IDF

En este pequeño ejemplo voy a explicar como conectarse a un broker Mqtt, como enviar datos de una conversión ADC y como recibir datos y activar un relé por ejemplo.

He modificado el ejemplo de MQTT mediante TCP el cual envia un dato ADC al kuska broker y también recibe el comando de apagado y encendido.

Configuración la conexión a la red

La configuración del red realmente es muy simple, con la librería #include "protocol_examples_common.h" es como lo he hecho yo y como lo muestra en los ejemplos del IDF.

Configuración de MQTT

Para esto es verdad que existen mas pasos.

Configurar cliente

static esp_mqtt_client_handle_t client; 
Este lo declaro de forma global para tener acceso desde cualquier parte del programa

Agregar datos de la conexión

Como nos vamos a conectar a Kuska broker que por ahora esta completamente abierto, solo es necesario la IP.

Para esto existe la función mqtt_app_start()

static void mqtt_app_start(void){

    esp_mqtt_client_config_t mqtt_cfg = {
            .broker.address.uri = CONFIG_BROKER_URL,
    };

  client = esp_mqtt_client_init(&mqtt_cfg);
  esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL);
  esp_mqtt_client_start(client);

}

mqtt_cfg es una estructura que recibe distintos valores de configuración, por ahora solo sera necesario la uri

La constante CONFIG_BROKER_URL es reemplazada por la IP del broker y se usará el protocolo mqtt

Por ejemplo:

mqtt://200.234.232.238

Avance broker 1

Ahora el broker recibe mensajes de todos los TOPIC

Si, se que es una locura, pero quiero saber que tan efectiva es la gestion de los datos y cuantos se llegan a perder. probablemente se llenara rapido los 10G que tengo disponible de almacenamiento.

En fin el objetivo es probar, he estado enviendo tonterias con un pequeno codigo que envia data de prueba.

Actualización de contenido

He estado investigando un poco mas respecto de esta idea que tengo y resulta abrumador la cantidad de información que existe en cuanto a sistemas domoticos, los avances que existen actualmente, las limitaciones de un sistema tradicional y bueno un sin fin de nuevas tecnologías.

La palabras que resuenan son:

  • Home Assistant
  • Matter
  • zigbee
  • thread
  • Zero-Code

Y bueno mientras mas intento profundizar mas frustrarte se vuelve, así qué decidí continuar con mi idea inicial, hacerlo simple pero robusto (en mis términos ;)) Un dispositivo terminado que pueda ser capaz de controlar un electrodoméstico conectado a un tomar corriente y aparte conocer su consumo y esto enviarlo a una base de datos y gratificarlo

Avances

Para mas información de avances puede ir a Avances

¿Que cosas faltan por hacer?

  • Servidor que reciba los datos de todos los sensores a través de un broker y los envíe a una base de datos con la siguiente forma tal vez:
/Temperatura/{UserID}/{IdDevice}
  • API para servir los datos de la base de datos mediante protocolo HTTP
  • Aplicación móvil para conectar el dispositivo a la red mediante BLE.
  • Firmware que envié datos al broker con el patrón indicado anteriormente.
  • Hardware, por ahora lo mas simple que se ocurrió fue un "toma-corriente inteligente"

Estado actual del proyecto

He completado algunos alcances adicionales a nivel de Firmware y Hardware. aun no se ha ejecutado nada, sigo organizando todas las ideas para tener un alcance solido de la solución.