Programación de Microcontroladores ESP32 con Arduino y Aplicaciones Móviles
Resumen
¿Qué hacer cuando surge un error al compilar?
Compilar tu código puede ser una experiencia desafiante, especialmente cuando surgen errores inesperados. Aquí te explicaremos cómo solucionar algunos problemas comunes que podrían presentarse durante el proceso de compilación de un microcontrolador como el ESP32.
Primero, revisa los mensajes de error detenidamente. Por ejemplo, si te aparece un error de librería no encontrada, verifica que el nombre de la librería esté escrito correctamente. La convención en programación es usar letras minúsculas para las librerías, así que asegúrate de que todo está en minúscula.
¿Cómo solucionar un error de variable no reconocida?
Es común que a veces las variables globales no sean reconocidas debido a errores en la declaración de nombres. Si el compilador no reconoce tu variable pinchens (o cualquier otra), verifica cómo la has definido inicialmente. Asegúrate de que el nombre es consistente en todo el código. Si preferiste un nombre específico, como pinchens, actualiza todas las instancias donde se use esta variable para evitar errores.
¿Es importante el orden de declaraciones y definiciones?
Sí, el orden sí importa. Al definir configuraciones o comandos específicos como la habilitación de un monitor serial, asegúrate de poner estos comandos adecuados antes de incluir las librerías, ya que de lo contrario no tendrán el efecto deseado.
¿Cómo conectar y configurar el ESP32 correctamente?
Para conectar tu ESP32 de manera segura y efectiva, sigue estos pasos:
Desconecta el cable de energía: Antes de hacer cualquier conexión, asegúrate de que el cable de energía esté desconectado para prevenir cortocircuitos que podrían dañar tu computadora.
Selecciona el puerto correcto: Una vez conectado, selecciona el puerto adecuado en las herramientas del software Arduino:
Windows: COM
Linux: tty
Mac: dev
*Configura la placa: Asegúrate de que la placa está configurada con las configuraciones predeterminadas y presiona el botón para subir el código.
¿Cómo habilitar la comunicación serial para debugear?
Para activar la comunicación serial para fines de depuración necesitas definir adecuadamente los comandos necesarios antes de incluir las librerías pertinentes. Esto garantiza que la librería implemente las configuraciones especificadas.
Define la palabra reservada, por ejemplo, _DEBUG_SERIAL, justo antes de incluir las librerías para asegurar que cada salida de depuración se envíe a través del monitor serial.
¿Cómo comprobar la conexión y funcionamiento del sistema?
Una vez que tu microcontrolador esté correctamente programado:
Verifica el monitor serial: Abre la terminal serial para verificar si la información se está comunicando correctamente. Si ves información como una dirección IP, indica una conexión establecida.
Reproduce y ajusta la aplicación móvil: Asegúrate de que la aplicación esté funcionando y que esté recibiendo datos. Utiliza los dispositivos en línea para verificar la funcionalidad.
Controla los sensores y actuadores: Prueba encender y apagar leds o cualquier otro dispositivo conectado para comprobar si los comandos son efectivos.
¿Cómo visualizar datos de sensores en la aplicación?
Puedes personalizar cómo se muestran los datos en la interfaz de la aplicación. Si la representación gráfica no te convence, puedes cambiarla:
Sustituye gráficos de línea por medidores para indicadores más claros de humedad y temperatura.
Configura los rangos de valores según las especificaciones de tus sensores (ejemplo: humedad de 0 al 100% y temperatura desde -10ºC hasta 70ºC).
Añade sufijos a las unidades de medida para mejor comprensión, como porcentaje para la humedad y grados centígrados para la temperatura.
Este enfoque no solo mejora la visualización de los datos, sino que también permite una personalización que sirve tanto a proyectos personales como a compartidos. Recuerda que puedes compartir los enlaces de monitorización para que otras personas puedan observar y controlar tu dispositivo desde cualquier parte del mundo.
Yo programe una conexion wifi con arduinoUNO y esp8266, y es complicado con los comandos AT.
para ejecutar una Orden de gateway a Server no hay problema, se manda con GET en HTTP
Pero una orden de Server a gateway no se puede directamente. y tiene que hacerse a base de consultas cada cierto tiempo. (el gateway preguntando al server si tiene una orden, y el server respondiendo con la orden).
En base a consultas queda solucionado. Me pregunto si Blynk se basa en lo mismo para ejecutar una Orden de Server a Gateway.?
Todo esta simplificado en esa función:
BLYNK_WRITE(V0){
}
lo cual es maravilloso, Eduardo dijo que esa funcion se activa cuando hay un cambio en VO, pero el Server no podria comunicar eso directamente al Gateway a no ser que el gateway este haciendo consultas constantemente debido a la misma naturaleza de las conexiones cliente servidor en HTTP.
¿Alguien me dice si estoy en lo correcto?
compañero si no estoy mal el protocolo HTTP no permite que el servidor inicie la comunicación, siempre debe hacerlo el cliente, por el eso es un protocolo ineficiente para IOT por que se deben estar realizando consultas constantes, desperdiciando energía y recursos de procesador. para IOT es mucho mas eficiente usar MQTT
Buenas noches!
Comparto mi código, con algunas variaciones ya que he usado un NodeMCU ESP8266, con la cual algunas librerías que usa el profe aquí no funcionan. Ademas he sumado una pequeña porción de código que activa un relé (Y este encendería un ventilador) cuando se supera cierta temperatura:
#define BLYNK_PRINTSerial//Librerias utilizadas#include <DHTesp.h>#include <ESP8266WiFi.h>#include <BlynkSimpleEsp8266.h>//Variablesbool ext_intFlag =0;bool pinChanged =0;//Indica el cambio de estadofloat t,h;//def#define dhtPin D0// Pin DHT22#define led1 D1//Pin LED#define relay D2//Pin Relay#define btn1 D3//Pin Pulsador//InitDHTesp dht;BlynkTimer timer;WidgetLEDwled(V1);//WiFi & Tokenchar ssid[]="Tu SSID";char pass[]="Tu contraseña";char auth[]="Tu token de Blynk";BLYNK_WRITE(V0){ int v0Data = param.asInt();/* Otros tipos de parametro:
* asString
* asDouble
*/Serial.print("Valor de V0:");Serial.println(v0Data);digitalWrite(led1,v0Data);}voidsendSensors(){ t = dht.getTemperature(); h = dht.getHumidity();Blynk.virtualWrite(V5,t);Blynk.virtualWrite(V6, h);}voidcheckPin(){ ext_intFlag =!ext_intFlag; pinChanged =1;}voidICACHE_RAM_ATTRcheckPin();voidsetup(){Serial.begin(9600);Blynk.begin(auth, ssid, pass); timer.setInterval(2000L, sendSensors);pinMode(relay,OUTPUT);digitalWrite(relay,LOW);pinMode(btn1,INPUT_PULLUP);pinMode(led1,OUTPUT);digitalWrite(led1,LOW); dht.setup(dhtPin,DHTesp::DHT22);attachInterrupt(digitalPinToInterrupt(btn1),checkPin,RISING);}voidloop(){Blynk.run(); timer.run();if(pinChanged){if(ext_intFlag){ wled.on();}else{ wled.off();} pinChanged =0;//Volvemos el valor a 0 para evitar que se ejecute el if por error}if(t >27.00){digitalWrite(relay,HIGH);}else{digitalWrite(relay,LOW);}}
Espero les sea de utilidad!
Saludos
Les doy mi aporte para los que solo tienen un Esp8266 y no cuentan con un push button, ni un sensor DHT. No se puede encender el LED de blynk, pero si aparecen unos valores random de temperatura y humedad en la grafica y si presionas el botón de encendido o apagado, se enciente el led que trae de fabrica el Esp8266.
#define BLYNK_PRINTSerial//se debe poner antes de la libreria#include <ESP8266WiFi.h>#include <BlynkSimpleEsp8266.h>#define led 2BlynkTimer timer;WidgetLEDled1(V1);char token[]="zXI3NpVjj9H-YdVdgwHQp4fhdQuY1QBh";BLYNK_WRITE(V0){//lee desde blynk el estado del boton y si se presiona, el led se enciende int V0data= param.asInt();//.asString .asDoubleSerial.println("Valor de V0= ");Serial.print(V0data);digitalWrite(led,V0data);}voidsendsensors(){//funcion envia a blynk los valores de temperatura y humedad float h =random(80,99); float t =random(20,33);Blynk.virtualWrite(V5,t);Blynk.virtualWrite(V6,h);}voidsetup(){Serial.begin(115200);pinMode(led,OUTPUT);digitalWrite(led,LOW); timer.setInterval(2000, sendsensors);//cada 2000 milis se ejecuta la funcion sendsensorsBlynk.begin(token,"RED","CONTRASEÑA");//token de autorizacion e internet}voidloop(){Blynk.run();//si llegó un dato desde blynktimer.run();}
ACa les anexo mi codigo funcional para un NodeMCU v3 con chip ESP8266:
Les recomiendo que lean además este link, ya que la documentacion desde que el profe grabó la clase ha cambiado un poco, por lo que para hallar los valores de id, name y tokem se debe de usar nuestro pc y seguir los pasos mencionados en el link de arriba.
#define BLYNK_TEMPLATE_ID"Esto lo sacas de blynk"#define BLYNK_DEVICE_NAME"Esto tambien lo sacas de blynk"#define BLYNK_AUTH_TOKEN"Lo sacas de blynk x3"#define BLYNK_PRINTSerial#include <BlynkSimpleEsp8266.h>#include <ESP8266WiFi.h>#include <DHT.h>#define BUTTOND4#define LEDD6#define DHTPIND5DHTdht(DHTPIN,DHT22);BlynkTimer timer;WidgetLEDled1(V2);bool ext_intFlag =0;bool pinChanged =0;float t,h;char auth[]=BLYNK_AUTH_TOKEN;char ssid[]="El nombre de tu red";char pass[]="La contraseña de tu red";BLYNK_WRITE(V1){ int V1Data= param.asInt();//.asString//.asDoubleSerial.print("Valor de V1 = ");Serial.println(V1Data);digitalWrite(LED,V1Data);}voidsendSensor(){ t = dht.readTemperature(); h = dht.readHumidity();Blynk.virtualWrite(V5,t);Blynk.virtualWrite(V6,h);}voidcheckPin(){ ext_intFlag =!ext_intFlag; pinChanged =true;}voidICACHE_RAM_ATTRcheckPin();voidsetup(){Serial.begin(115200);pinMode(BUTTON,INPUT_PULLUP);pinMode(LED,OUTPUT);digitalWrite(LED,LOW);Blynk.begin(auth, ssid, pass); timer.setInterval(2000, sendSensor); dht.begin();attachInterrupt(digitalPinToInterrupt(BUTTON),checkPin,RISING);}voidloop(){Blynk.run(); timer.run();if(pinChanged){if(ext_intFlag){ led1.on();}else{ led1.off();} pinChanged =false;}}
Para esta practica, yo utilice los siguientes componentes:
ESP32 CAM
Conversor USB A Serial: CP2102
DHT11
Pulsador
Protoboard
Cables
Funciona ! . Con la actualizacion de Blynk.cloud es necesario crear un template, y despues es necesario anadir un device (add device) y en la parte de propiedades esta la informacion del token. Esta informacion de token ya no se envia al correo como antes, hay que copiarla directamente de la aplicacion. Blynk.cloud.
Hola buenas noches estoy utilizando un ESP32 solamente con sus pines configurados pero me sale esto en la pantalla de la terminal una vez termino de compilar el código.
Este es mi código, luego de ver solucionar los cambios que se necesitan en el código para loggearse en blynk, que no es como se dice en el curso. Sugiero usar Blynk.Console para verificar los datos de ID, NAME Y AUTH_TOKEN.```js
/* Fill-in information from Blynk Device Info here */
// en la página de Blynk, iniciar usuario, ir a Blynk.Console
//Buscar el device > Device info y allí copiar la info
// del proyecto de cada uno. Yo aquí los dejo en XXXXXX
#define BLYNK_TEMPLATE_ID "XXXXXXXXXXXXXXXX"
#define BLYNK_TEMPLATE_NAME "practicablynk"
#define BLYNK_AUTH_TOKEN "XXXXXXXXXXXXXXXXXXXX"
Tengo una esp32-pico-kit-v4-1 y el sensor DHT11 y DHT22 no me funcionaron con esta placa, decidi continuar con una BMP180 para continuar las activadades del curso. Aun asi si alguien ha tenido experiencias usando esta placa con esos sensores y han encotrado solucion lo agradecería
A mí no me ha salido, de momento, con el Wemos D1 mini Pro (ESP8266). Lo seguiré intentando.
Tengo un ESP8266 y debería funcionar importando estas librerías