Tabla de contenido:

Publicación de datos del sensor de presión inalámbrico mediante MQTT: 7 pasos
Publicación de datos del sensor de presión inalámbrico mediante MQTT: 7 pasos

Video: Publicación de datos del sensor de presión inalámbrico mediante MQTT: 7 pasos

Video: Publicación de datos del sensor de presión inalámbrico mediante MQTT: 7 pasos
Video: Arduino IoT Cloud con ESP32, Relé (relay) y Sensor DHT22. Guía completa paso a paso desde cero 2024, Noviembre
Anonim
Publicación de datos del sensor de presión inalámbrico mediante MQTT
Publicación de datos del sensor de presión inalámbrico mediante MQTT

ESP32 y ESP 8266 son SoC muy familiares en el campo de IoT. Estos son una especie de bendición para los proyectos de IoT. ESP 32 es un dispositivo con WiFi y BLE integrados. Simplemente proporcione sus configuraciones de SSID, contraseña e IP e integre las cosas en la nube. Aquí, en este instructivo, reflexionaremos sobre algunos de los términos básicos de IoT, como plataforma de IoT, MQTT, portales cautivos, etc.

  • La arquitectura de IoT en palabras muy simples consiste en un dispositivo integrado y una plataforma de IoT para poner el dispositivo en la nube. Aquí estamos usando la plataforma UbiDots IoT para visualizar los datos del sensor.
  • Administrar la configuración de IP y las credenciales de usuario puede ser un dolor de cabeza para el usuario. ¿Qué pasa si el usuario desea cambiar las credenciales de WiFi? ¿Qué sucede si el usuario desea cambiar la configuración de DHCP / IP estática? Flashear el ESP32 cada vez no es confiable y ni siquiera es la solución para estos problemas. Así que pasaremos por el portal cautivo para guardar las credenciales de WiFi y otras configuraciones.
  • MQTT ahora se está convirtiendo en un término muy común en el mundo de IoT. ha superado las solicitudes y respuestas (HTTP) de Publish and Subscribe debido a la arquitectura rápida, robusta y ajustada.

Aquí, en este instructable, lo demostraremos.

  • Dar credenciales WiFi y MQTT usando el portal cautivo.
  • Publicar y suscribir múltiples datos de sensores a UbiDots.
  • Lectura de los datos del sensor del sensor inalámbrico de presión y temperatura
  • Alojando un formulario web desde el ESP32.
  • Lectura y escritura de SPIFFS ESP32.

Paso 1: Especificación de hardware y software

Especificación de hardware

  • ESP32 WiFi / BLE
  • Sensor inalámbrico de presión y temperatura

Especificación de software

  • IDE de Arduino
  • XCTU
  • Utilidad Labview

Paso 2: Sensores inalámbricos de temperatura y presión

Sensores inalámbricos de presión y temperatura
Sensores inalámbricos de presión y temperatura
Sensores inalámbricos de presión y temperatura
Sensores inalámbricos de presión y temperatura
Sensores inalámbricos de presión y temperatura
Sensores inalámbricos de presión y temperatura

Características

  • Sensor de grado industrial Sensor de temperatura de presión inalámbrico de largo alcance
  • Rango de funcionamiento 0 a 14000 mbar -40 ° a + 85 ° C (-40 ° a 185 ° F)
  • Resolución de presión de cálculo interno configurable 0.012 a 0.065 mbar
  • Resolución de temperatura de cálculo interno configurable 0,002 a 0,012 ° C
  • Precisión ± 2,5 mbar, ± 2 ° C
  • Salidas de presión absoluta, presión relativa y cambio de altitud relativa
  • Alcance de línea de visión de 2 millas con antena incorporada
  • Rango LOS superior de hasta 28 millas con antenas de alta ganancia
  • Interfaz para Raspberry Pi, Microsoft® Azure®, Arduino y más
  • Redes de malla inalámbrica con DigiMesh®

Configuración del sensor inalámbrico de presión y temperatura con Labview Utility y XCTU

El sensor funciona en dos modos

  • Modo de configuración: configure el ID de bandeja, el retraso, el número de reintentos, etc. Más sobre esto está más allá del alcance de este instructivo y se explicará en el siguiente instructivo.
  • Modo de ejecución: estamos ejecutando el dispositivo en modo de ejecución. Y para analizar estos valores estamos usando la utilidad Labview

Esta interfaz de usuario de Labview muestra los valores en gráficos agradables. Muestra los valores actuales y pasados. Puede ir a este enlace para descargar la interfaz de usuario de Labview. haga clic en el icono Ejecutar en el menú de la página de destino para ir al modo de ejecución.

Paso 3: Conexión a WiFi

Conexión a WiFi
Conexión a WiFi
Conexión a WiFi
Conexión a WiFi

Estamos utilizando el portal cautivo para guardar las credenciales de WiFi y pasar el cursor por la configuración de IP. Para obtener una introducción detallada sobre el portal cautivo, puede seguir las siguientes instrucciones.

El portal cautivo nos da la opción de elegir entre configuraciones estáticas y DHCP. Simplemente ingrese las credenciales como IP estática, máscara de subred, puerta de enlace y la puerta de enlace del sensor inalámbrico se configurará en esa IP.

Se aloja una página web en la que aparece una lista que muestra las redes WiFi disponibles y el RSSI. Seleccione la red WiFi y la contraseña e ingrese enviar. Las credenciales se guardarán en EEPROM y la configuración de IP se guardará en SPIFFS. Se puede encontrar más sobre esto en este instructivo.

Paso 4: Configurar UbiDots en ESP32

Configuración de UbiDots en ESP32
Configuración de UbiDots en ESP32

Aquí estamos usando sensores inalámbricos de presión y temperatura con el dispositivo ESP 32 para obtener los datos de temperatura y humedad. Estamos enviando los datos a UbiDots utilizando el protocolo MQTT. MQTT sigue un mecanismo de publicación y suscripción en lugar de solicitud y respuesta. Es más rápido y confiable que HTTP. Esto funciona de la siguiente manera.

  • Estamos utilizando el Programador de tareas para programar la tarea, como obtener datos de los sensores, publicar las lecturas de los sensores o suscribirse al tema MQTT.
  • Primero, incluya los archivos de encabezado del Programador de tareas, su instancia y programe las tareas.
  • Hemos programado dos tareas referidas a dos operaciones de control diferentes.

#define _TASK_TIMEOUT # include Scheduler ts; // --------- Tareas ------------ // Tarea tSensor (4 * TASK_SECOND, TASK_FOREVER, & taskSensorCallback, & ts, false, NULL, & taskSensorDisable); Tarea tWiFi (10 * TASK_SECOND, TASK_FOREVER, & taskWiFiCallback, & ts, false, NULL y taskWiFiDisable);

  • La tarea 1 es para leer el valor del sensor, esta tarea se ejecuta durante 1 segundo hasta que alcanza el tiempo de espera de 10 segundos.
  • Cuando la Task1 llega a su tiempo de espera, nos estamos conectando a Wifi local y al broker MQTT.
  • Ahora la Tarea 2 está habilitada y estamos deshabilitando la Tarea 1
  • La tarea 2 es para publicar los datos del sensor en el corredor UbiDots MQTT, esta tarea se ejecuta durante 20 segundos hasta que alcanza el tiempo de espera de 20 segundos.
  • Cuando la Tarea 2 alcanza su tiempo de espera, la Tarea 1 se habilita nuevamente y la Tarea 2 se deshabilita. Aquí nuevamente, estamos obteniendo el valor actualizado y el proceso continúa.

Lectura de los datos del sensor I2C

Estamos obteniendo un marco de 29 bytes de los sensores inalámbricos de temperatura y humedad. Este marco se manipula para obtener los datos reales de temperatura y humedad

si (Serial1.available ())

{datos [0] = Serial1.read (); retraso (k); if (datos [0] == 0x7E) {while (! Serial1.available ()); para (i = 1; i <36; i ++) {datos = Serial1.read (); retraso (1); } if (data [15] == 0x7F) /////// para verificar si los datos recibidos son correctos {if (data [22] == 0x06) //////// asegúrese de que el tipo de sensor es correcto {int cTemp = ((((datos [24]) * 256) + datos [25])); int16_t abs_pressure = ((((uint16_t) (datos [26]) << 8) | datos [27]) * 0,001); int rlt_pressure = ((((datos [28]) * 256) + datos [29]) * 0,001); int16_t delta_alt = ((((uint16_t) (datos [30]) << 8) | datos [31]) * 0.01); batería flotante = ((datos [18] * 256) + datos [19]); voltaje de flotación = 0.00322 * batería; Serial.print ("Número de sensor"); Serial.println (datos [16]); Serial.print ("Tipo de sensor"); Serial.println (datos [22]); Serial.print ("Versión de firmware"); Serial.println (datos [17]); Serial.print ("Temperatura en grados Celsius:"); Serial.print (cTemp); Serial.println ("C"); Serial.print ("Presión absoluta:"); Serial.println (abs_pressure); Serial.print ("mbar"); Serial.print ("Presión relativa:"); Serial.println (rlt_pressure); Serial.print ("mbar"); Serial.print ("Altitud Delta:"); Serial.println (delta_alt); Serial.print ("medidor"); Serial.print ("valor ADC:"); Serial.println (batería); Serial.print ("Voltaje de la batería:"); Serial.print (voltaje); Serial.println ("\ n"); if (voltaje <1) {Serial.println ("Tiempo para reemplazar la batería"); }}} else {for (i = 0; i <36; i ++) {Serial.print (datos ); Serial.print (","); retraso (1); }}}}

Conexión a la API de UbiDots MQTT

Incluya el archivo de encabezado para el proceso MQTT

#incluir

definir otras variables para MQTT como el nombre del cliente, la dirección del intermediario, el ID del token

#define TOKEN "BBFF - **********************************" // Your Ubidots TOKEN # define MQTT_CLIENT_NAME "***************************"

char mqttBroker = "cosas.ubidots.com";

carga útil de char [100]; char tema [150]; // crear una variable para almacenar el token de identificación del token

Paso 5: Publicar las lecturas del sensor en UbiDots

Publicar lecturas de sensores en UbiDots
Publicar lecturas de sensores en UbiDots

Cree variables para almacenar diferentes datos de sensores y cree una variable char para almacenar el tema

#define VARIABLE_LABEL_TEMPF "tempF" // Evaluando la etiqueta de la variable # define VARIABLE_LABEL_TEMPC "tempC" // Evaluando la etiqueta de la variable #define VARIABLE_LABEL_BAT "bat" #define VARIABLE_LABEL_HUMID "humid" // Evaluando la etiqueta de la variable

char topic1 [100];

char topic2 [100]; char topic3 [100];

publicar los datos en el tema MQTT mencionado, la carga útil se verá como {"tempc": {value: "tempData"}}

sprintf (tema1, "% s", ""); sprintf (tema1, "% s% s", "/v1.6/devices/", DEVICE_LABEL); sprintf (carga útil, "% s", ""); // Limpia la carga útil sprintf (carga útil, "{"% s / ":", VARIABLE_LABEL_TEMPC); // Agrega el valor sprintf (payload, "% s {" value / ":% s}", payload, str_cTemp); // Agrega el valor sprintf (payload, "% s}", payload); // Cierra los corchetes del diccionario Serial.println (payload); Serial.println (client.publish (topic1, payload)? "Published": "notpublished"); // Haz lo mismo con el otro tema también

client.publish () publica los datos en UbiDots

Paso 6: Visualización de los datos

Visualizando los datos
Visualizando los datos
  • Vaya a Ubidots e inicie sesión en su cuenta.
  • Navegue hasta el Panel de control desde la pestaña Datos que aparece en la parte superior.
  • Ahora haga clic en el icono "+" para agregar los nuevos widgets.
  • Seleccione un widget de la lista y agregue una variable y dispositivos.
  • Los datos del sensor se pueden visualizar en el tablero usando diferentes widgets.

Paso 7: Código general

El código Over para HTML y ESP32 se puede encontrar en este repositorio de GitHub.

Créditos

  • Placa de conexión ncd ESP32.
  • Sensores de temperatura y presión inalámbricos ncd
  • pubsubcliente
  • UbiDots
  • Programador de tareas

Recomendado: