Tabla de contenido:
- Paso 1: Especificación de hardware y software
- Paso 2: creación de un portal cautivo
- Paso 3: Proporcionar credenciales de WiFi y UbiDots
- Paso 4: Publicar las lecturas del sensor en UbiDots
- Paso 5: Visualización de los datos
- Paso 6: Código general
Video: UbiDots: conexión de un ESP32 y publicación de datos de varios sensores: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:42
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 de sensores inalámbricos de temperatura y humedad.
- Alojando un formulario web desde el ESP32.
- Lectura y escritura de SPIFFS ESP32.
Paso 1: Especificación de hardware y software
- ESP32 WiFi / BLE
- Sensor inalámbrico de temperatura y humedad
Especificación de software
IDE de Arduino
Paso 2: creación de un portal cautivo
Un portal cautivo es una página web que se muestra a los usuarios recién conectados antes de que se les conceda un acceso más amplio a los recursos de la red. Aquí estamos sirviendo tres páginas web para seleccionar entre DHCP y Configuración de IP estática. podemos definir la dirección IP a ESP de dos formas.
- Dirección IP DHCP: es una forma de asignar dinámicamente la dirección IP al dispositivo. La dirección IP predeterminada del ESP es 192.168.4.1
- La dirección IP estática: asigna una dirección IP permanente a nuestro dispositivo de red. Para proporcionar la IP estática al dispositivo, necesitamos definir la dirección IP, la dirección de la puerta de enlace y la máscara de subred.
La primera página web se aloja en 192.168.1.77. Aquí, el usuario cuenta con los botones de opción para seleccionar entre DHCP e IP estática. En la siguiente página web, debemos proporcionar la información relacionada con la propiedad intelectual para continuar.
código HTML
El código HTML para las páginas web se puede encontrar en este repositorio de Github. Puede utilizar cualquier IDE o editor de texto como Sublime o notepad ++ para crear páginas web HTML.
- Primero, cree una página web HTML que contenga dos botones de opción para elegir entre DHCP y Configuración de IP estática.
- Ahora crea el botón para enviar tu respuesta
- Dale un nombre a los botones de radio.
- La clase del servidor web ESP tomará estos nombres como argumentos y obtendrá la respuesta de los botones de opción usando estos argumentos
- Ahora inserte un botón 'ENVIAR' para enviar la respuesta al dispositivo. En las otras páginas web, tenemos cuadros de texto.
- Dé el valor del nombre y el tipo de entrada al cuadro de texto y agregue un botón de envío para 'ENVIAR' enviar la respuesta.
- Cree un botón 'RESET' para restablecer el contenido del campo de texto.
Paso 3: Proporcionar credenciales de WiFi y UbiDots
El principal problema ocurre al administrar las credenciales de WiFi. Aunque tenemos la biblioteca WiFiMulti para eso, donde podemos dar múltiples SSID y contraseñas al dispositivo y el dispositivo se conectará a la red disponible. Pero, ¿qué pasa si la red disponible no está en la lista WiFiMulti? Hacer flashear el dispositivo ESP32 todo el tiempo no es una solución confiable.
Para resolver este problema, estamos alojando una página web donde el usuario puede enviar el SSID y la contraseña de la red disponible. Funciona de la siguiente manera.
- La página web está alojada en la IP estática o la IP DHCP elegida por el usuario en el portal cautivo.
- Esta página web contiene campos de texto para ingresar SSID, contraseña e ID de token UBIDOTS para conectar el dispositivo a UbiDots.
- Ingrese el SSID y la contraseña de su WiFi local en los campos de entrada, ingrese el ID del token de UbiDot e ingrese ENVIAR
- Estas credenciales se guardan en la EEPROM de ESP32
- Después de 60 segundos, el dispositivo se desconectará automáticamente del AP
- La próxima vez que encienda el dispositivo, el usuario no tiene que seguir este procedimiento, el dispositivo obtendrá automáticamente las credenciales de usuario de EEPROM y continuará publicando las lecturas del sensor en UbiDots.
Paso 4: Publicar las lecturas del sensor en UbiDots
Aquí estamos usando sensores inalámbricos de temperatura y humedad con el dispositivo ESP 32 para obtener los datos de temperatura y humedad. Enviamos 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
Programador 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 datos reales de temperatura y humedad
uint8_t datos [29];
datos [0] = Serial1.read (); retraso (k); // chck para el byte de inicio if (data [0] == 0x7E) {while (! Serial1.available ()); para (i = 1; i <29; i ++) {datos = Serial1.read (); retraso (1); } if (data [15] == 0x7F) /////// para verificar si los datos recibidos son correctos {if (data [22] == 1) //////// asegúrese de que el tipo de sensor es correcto {
humedad = ((((datos [24]) * 256) + datos [25]) /100.0); humedad /=10.0; cTempint = (((uint16_t) (datos [26]) << 8) | datos [27]); cTemp = (flotante) cTempint /100.0; cTemp / = 10.0; fTemp = cTemp * 1.8 + 32; fTemp / = 10.0; batería = aleatorio (100, 327); voltaje = batería / 100; nodeId = data [16];}
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 corredor, la ID de token (estamos obteniendo la ID de token de EEPROM)
#define MQTT_CLIENT_NAME "ClientVBShightime123"
char mqttBroker = "cosas.ubidots.com";
carga útil char [100], tema char [150];
// crea una variable para almacenar el ID del token
String tokenId;
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 5: Visualización de 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 panel de control utilizando diferentes widgets.
Paso 6: 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 inalámbricos de temperatura y humedad ncd.
- pubsubcliente
- UbiDots
- Programador de tareas
Recomendado:
Guía de conexión PLSD: Conexión a Apple TV a través de AirPlay [no oficial]: 10 pasos
Guía de conexión PLSD: Conexión a Apple TV a través de AirPlay [No oficial]: La siguiente guía se proporciona para ilustrar el proceso de conexión a los Apple TV de la sala de conferencias a través de AirPlay. Este recurso no oficial se proporciona como cortesía para la administración, el personal y los invitados autorizados del Distrito Escolar Local de Perkins
Arduino controlando varios sensores P.I.R en el mismo Bord: 3 pasos
Arduino controlando múltiples sensores PIR en el mismo Bord: hoy te diré cómo conectar múltiples sensores PIR con un solo Arduino Bord > aquí también he usado un módulo de relé de 4 canales para algunas funciones adicionales. (O puede usar tantos pin de su arduin
Publicación de datos del sensor de presión inalámbrico mediante MQTT: 7 pasos
Publicación de datos de sensores de presión inalámbricos 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 su SSID, contraseña e configuraciones de IP e integre las cosas en el
Termómetro con temperatura de color relativa en una pantalla TFT de 2 "y varios sensores: 5 pasos
Termómetro con temperatura de color relativa en una pantalla TFT de 2 "y varios sensores: He creado una pantalla que muestra las medidas de varios sensores de temperatura. Lo bueno es que el color de los valores cambia con la temperatura: > 75 grados Celsius = ROJO > 60 > 75 = NARANJA > 40 < 60 = AMARILLO > 30 < 40
Conexión de varios botones a un solo pin en Arduino: 4 pasos
Conexión de varios botones a un solo pin en Arduino: Hola a todos, Cuando sus proyectos de Arduino hayan superado los LED parpadeantes, es posible que necesite algunos pines adicionales. Te mostraré un truco que puedes usar donde puedes tener varios botones, todos conectados al mismo pin analógico