▷ Practica 3 #2PEM100A: Mostrar Datos via Internet

⭐⭐⭐⭐⭐ Practica 3 #2PEM100A: Mostrar Datos via Internet

Objetivo general:

  • Aprender sobre visualizacion de datos inalambricamente.

Objetivos específicos:

  • Realizar mediciones con el sensor PZEM004T.
  • Conectar ESP32 a una Red WiFi.
  • Mostrar mediciones en una interfaz web.

Repositorio:

Materiales:

  • Medidor de Consumo Energético 
  • Punto Acceso WiFi

Introducción:
Hasta ahora hemos logrado obtenido las mediciones de nuestro sensor PZEM004T y mediante cable conectado a la PC visualizar los datos en la terminal y guardar los datos en un Excel. Estas opciones son muy buenas, sin embargo, presentan un inconveniente, se requiere siempre de un PC donde conectar el ESP32, provocando que se limite el lugar donde se puede instalar el equipo. Ante esta problemática utilizaremos una de la característica que tiene nuestro ESP32, que es la conexión a Wifi. Mediante su antena incorporada vamos a poder conectarnos un punto de red Wifi con la finalidad de mostrar los datos en el navegador de manera inalámbrica desde cualquier dispositivo conectado a la red.

Procedimiento #1: Descargar e Instalar Librerias necesarias

Para esta practica utilizaremos un par de librerias que pueden ser descargadas de los siguientes link:


AsynCTP: 

ESPAsyncWebServer

Procedimiento #2: Configurar Credenciales y Subir codigo




/*
Autor: Vidal Bazurto (avbazurt@espol.edu.ec)
GitHub: https://github.com/avbazurt/Simulacion_Sistemas_Electricos
Practica 1: Introduccion Sensor PZEM004TV30
*/
#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <PZEM004Tv30.h>
#define ssid "TU_SIID"
#define password "TU_CONTRASEÑA"
//Definimos los pines de comunicacion PZEM004T
#define PZEM_RX_PIN 16
#define PZEM_TX_PIN 17
//Creamos un objeto PZEM004Tv30 con los pines
PZEM004Tv30 pzem(Serial2, PZEM_RX_PIN, PZEM_TX_PIN);
struct Sensor
{ float voltaje; // Nombre del modelo
float corriente; // Numero de pines digitales
float potencia; // Numero de pines digitales
float energia; // Numero de pines digitales
float frecuencia; // Numero de pines digitales
float fp; // Numero de pines digitales
} ;
Sensor DatosSensor = {0,0,0,0,0,0};
void MedicionSensor() {
DatosSensor.voltaje = pzem.voltage();
if (isnan(DatosSensor.voltaje)) {// Validamos los datos del sensor
DatosSensor.voltaje = -1;
}
DatosSensor.corriente = pzem.current();
if (isnan(DatosSensor.corriente)) {
DatosSensor.corriente = -1;
}
DatosSensor.potencia = pzem.power();
if (isnan(DatosSensor.potencia)) {
DatosSensor.potencia = -1;
}
DatosSensor.energia = pzem.energy();
if (isnan(DatosSensor.energia)) {
DatosSensor.energia = -1;
}
DatosSensor.frecuencia = pzem.frequency();
if (isnan(DatosSensor.frecuencia)) {
DatosSensor.frecuencia = -1;
}
DatosSensor.fp = pzem.pf();
if (isnan(DatosSensor.fp)) {
DatosSensor.fp = -1;
}
}
//WEB SERVER
AsyncWebServer server(80);
char* formato_html =
"<!DOCTYPE html>"
"<html lang=\"en\">"
"<head>"
" <meta charset=\"UTF-8\">"
" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">"
" <META HTTP-EQUIV='Refresh' CONTENT='1'>"
" <title>ESP32 WebServer</title>"
" <style> body { background-color: #fffff; font-family: Arial, Helvetica, Sans-Serif; Color: #000000; }</style>"
"</head>"
"<body>"
" <h2>SENSOR CONSUMO ENERGETICO</h2>"
" <h3>Voltaje: %f [V]</h3>"
" <h3>Corriente: %f [A]</h3>"
" <h3>Potencia: %f [W]</h3>"
" <h3>Energia: %f [KwH]</h3>"
" <h3>Frecuencia: %f [Hz]</h3>"
" <h3>Factor Potencia: %f</h3>"
"</body>"
"</html>";
char buffer_html[1000];
void notFound(AsyncWebServerRequest *request) {
request->send(404, "text/plain", "Not found");
}
void connectToWifi() {
WiFi.enableSTA(true);
delay(2000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
void setup() {
delay(5000);
//ACTIVAMOS EL PUERTO SERIAL
Serial.begin(115200);
Serial.println(WiFi.macAddress());
//Conectamos el WIFI
connectToWifi();
//Configuramos el Web Server
server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
MedicionSensor();
//Mostramos los datos
sprintf(buffer_html,
formato_html,
DatosSensor.voltaje,
DatosSensor.corriente,
DatosSensor.potencia,
DatosSensor.energia,
DatosSensor.frecuencia,
DatosSensor.fp);
request->send_P(200, "text/html", buffer_html);
});
server.onNotFound(notFound);
server.begin();
}
void loop() {
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("");
delay(4000);
}
view raw Practica3.ino hosted with ❤ by GitHub
Pegamos el codigo en nuestro Arduino IDE. 

A continuacion debemos colocar las credenciales de nuestra Red WiFi, recordar que debe ser exacatamente igual el nombre y la contraseña, caso contrario nunca se conectara.


Una vez realizado esto procedemos a subir el codigo.



Procedimiento #3: Visualizar datos

Procedemos a abrir la termial serial, para corroborar que la conexion fue exitosa y ver la IP a la que fue asociada el dispositivo.



En caso de ser necesario cambiamos los baudios a 115200, si ya estaba en dicha velocidad nos saltamos este paso.



Y si todo salio bien, nos saldran la IP del dispositivo.



Dicha IP es la que utilizaremos para monitorear las mediciones, procedemos abrir el navegador en un dispositivo que se encuentre en la misma red WiFi, y escribimos dicha direccion.


Con eso nosotros podremos visualizar los datos en tiempo real de manera inalambrica. Lo mejor de esto es que puede ser desde cualquier dispositivo. En nuestro celular procedemos a escribir la direccion en el navegador para comprobar.





Comentarios

Popular Posts

▷ #ESP32 - REAL-TIME CLOCK #RTC INTERNO

▷ Especificaciones del módulo ESP32

▷ #ESP32 - SINCRONIZAR RTC INTERNO CON SERVIDOR NTP

▷ #ESP32 - Over-The-Air programming #OTA

▷ #ESP32 - Display OLED 128x64

▷ #EMG signal classification with Machine Learning #ML using #Matlab

▷ SOLUCIÓN EVALUACIÓN SISTEMAS DIGITALES 1, 2do Parcial (2021 PAE)

▷ SISTEMAS EMBEBIDOS, PROYECTOS PROPUESTOS (2021 PAO1)

▷ (Práctica 1) DESARROLLO DE APLICACIONES CON MÓDULOS #ARDUINO #Atmega328p

▷ Newsletter: #FPGA (Field Programmable Gate Arrays)