Monitorización Voltronic-Axpert-Must con ESP32 - Arduino
Publicado: 27 Ene 2019, 10:48
El ESP32 es el modelo más apropiado para este brico, ya que se puede programar fácilmente con el IDE de Arduino, incluye WIFI y una cantidad considerable de pines digitales y analógicos. Si utilizamos una placa como Arduino UNO, aparte, necesitaremos un ESP01 para enviar los datos por WIFI. Si utilizamos una del tipo Nodemcu, sólo tenemos un pin analógico, lo que podría dificultar un desarrollo posterior del brico.
La lista de la compra podría ser ésta:
1 ESP32 Podemos adquirirlo por Amazon si tenemos prisa, o más barato por Aliexpress.
1 MAX3232 http://www.ti.com/lit/ds/symlink/max3232.pdf Yo adquirí unos cuantos en electronicaembajadores.com.
5 condensadores de 100 nF. También los adquirí en electronicaembajadores.com.
1 Protoboard
Cables y conectores. Podemos utilizar el RJ45-RS232 que suele venir con el inversor.
La idea es enviar el comando "QPIGS" por un UART del ESP32 al MAX3232 para adaptar los niveles y este ultimo comunica con el inversor. El MAX3232 recibe respuesta, adapta niveles y reenvía esos datos al ESP32. Una vez que tenemos esos datos, los enviamos por WIFI a un servidor. Esto último es bastante sencillo con Linux y puede convertirse en tedioso si utilizamos Windows, o al menos, esa fue mi experiencia.
El aspecto general del montaje en protoboard es así:
El esquema, bastante sencillo, es este:
El código para utilizar IDE de Arduino es:
Código: Seleccionar todo
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
const char* ssid = "vodafone8DD8";
const char* password = "W524HUV8JHGGZD";
WiFiUDP Udp;
unsigned int localUdpPort = 4210; // local port to listen on
char incomingPacket[255]; // buffer for incoming packets
char replyPacket[] = "Hi there! Got the message :-)"; // a reply string to send back
void setup()
{
Serial.begin(57600);
//Serial.println();
//Serial.printf("Connecting to %s ", ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
//Serial.print(".");
}
///Serial.println(" connected");
Udp.begin(localUdpPort);
//Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
}
void loop()
{
int packetSize = Udp.parsePacket();
if (packetSize)
{
// receive incoming UDP packets
//Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());
int len = Udp.read(incomingPacket, 255);
if (len > 0)
{
incomingPacket[len] = 0;
}
Serial.write(incomingPacket);
//Serial.printf("UDP packet contents: %s\n", incomingPacket);
//Serial.write(incomingPacket);
// send back a reply, to the IP address and port we got the packet from
//Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
//Udp.write(replyPacket);
//Udp.endPacket();
}
}
Si utilizáis Fritzing, tenéis toda la información del montaje en este archivo:
Una vez que tenemos los datos de salida por WIFI en el ESP32, hemos de recepcionarlos de alguna manera.
Voy a insertar unos ejemplos de cómo lo tengo configurado.
Primero, conectamos con la base de datos:
Renombrados este archivo a config.php
Enviamos los datos con:
Renombramos este archivo a iot.php
Si queremos que funciones tal cual está, hemos de definir una base de datos con el nombre de "sensores" y en ella una tabla "valores". Los campos se muestran a continuación:
Los datos recibidos tendrán este aspecto:
Finalmente, podemos ver los datos de forma gráfica con el archivo que sigue, que renombramos a hibrid.php
Tendríamos algo con este aspecto:
Si no estás acostumbrado a manejar servidores, puedes enviar los datos a "thingspeaks" que es muy sencillo. Sería necesario modificar el código para introducir las claves que nos proporcionen.
No es muy complicado, hace unos meses no tenía ni idea de todo esto, pero tuve buenos maestros, @nikitto y @mleon, pese a que no era buen alumno...