Tutorial del Internet de las Cosas y Bluetooth con el ESP32
Juan Antonio Villalpando
Volver al índice del tutorial
____________________________
117F.- Cayenne.
- Vamos a conectar nuestra tarjeta con un broker MQTT llamado Cayenne y le enviaremos datos para que cualquiera pueda consultarlo a través de Internet.
___________________________________________
1.- Nos damos de alta en Cayenne myDevices.
https://mydevices.com/cayenne/signup/
- Pulsamos en Cayenne API
- Se pone correo y contraseña, pero no pide confirmación.
- Anotamos nuestras claves de API.
- Bajamos la librería y la instalamos en nuestro IDE de Arduino ...\Arduino\libraries
https://github.com/myDevicesIoT/Cayenne-MQTT-ESP (o bien de aquí: Cayenne-MQTT-ESP)
- También podríamos haber instalado la librería mediante: Programa / Incluir Libería / Gestionar Liberías
- Copiamos este código en el IDE del Arduino.
cayenne.ino |
// Juan Antonio Villalpando.
// kio4.com
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
#define LED4 D4
// Nombre y contraseña de tu red WiFi.
const char* ssid = "Nombre_de_tu_Red_WiFi";
const char* password = "Clave_WiFi";
// Autentificación. API del Cayenne.
char username[] = "56395930-557e-11e9-8da4-359d3972629e";
char password[] = "d8c9fad4868e3e3807da7338536a79608c28814e";
char clientID[] = "fab5d960-557f-11e9-89d2-4b372b367592";
void setup() {
Serial.begin(115200);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
pinMode(LED4, OUTPUT);
}
void loop() {
Cayenne.loop();
}
// Enviar datos al servidor de Cayenne.
CAYENNE_OUT_DEFAULT()
{
// Envio de un número aleatorio al canal 0 de Cayenne.
int aleatorio = random(1,90);
Cayenne.virtualWrite(0, aleatorio);
}
// Recibo de respuesta de Cayenne.
CAYENNE_IN_DEFAULT()
{
// Obtenemos el Canal y el valor que ha variado mediante Botón, Deslizador,...
CAYENNE_LOG("Channel %u, value %s", request.channel, getValue.asString());
// Ponemos un Botón en el Cayenna (Channel 1), cuando lo pulsemos enviará un valor "1" y
// encenderá el LED4. Cuando no lo pulsemos enviará un valor "0" y apagará el LED4.
int canal = request.channel;
String valor = getValue.asString();
if(canal == 1 && valor == "1"){digitalWrite(LED4, LOW);}
else {digitalWrite(LED4, HIGH);}
}
|
- Comentarios al código anterior.
- Cuando pulsamos el Botón que estableceremos en el Channel1, el Cayenne enviará el valor "1", si el cualquier momento se recibe la llegada del Channel 1 y además el valor 1, el programa enviará al Cayenne el número 1 para que se active el icono del LED del Cayenne.
- Observa el Monitor Serie.
___________________________________________________________________________
- Cayenne.
- Vamos a la web de Cayenne y veremos aparecer los números aleatorios que se van generando, en este caso por el Channel 0.
- Previamente debes haber cargado el sketch de Arduino con la Key de Cayenne, y conectar mediante tu WiFi.
- Vamos a la parte derecha de la zona azul, cambiamos el nombre a "Nuestro ESP8266".
- También debemos darle un nombre al proyecto, por ejemplo NuevoProyecto.
- En la zona verde (a la izquierda) desde Device/Widget añadimos (baja al fin de página) un Gauge, State, Button y un Slider.
- Debemos establecer los canales. Esto lo hacemos en modo edición, pulsando el icono de tornillo.
- Quedará así:
__________________________________________________________
- Aplicación del Cayenne en el móvil.
- Bajamos desde nuestro móvil de la Play de Google Cayenne: https://play.google.com/store/apps/details?id=com.mydevices.cayenne&hl=es
- Podemos observar los valores de los elementos y desde el mísmo móvil mediante el Botón y el Deslizador podemos cambiar los valores.
- Esta aplicación gratuita presenta publicidad mediante notificaciones.
__________________________________________________________
- Notificaciones.
- Esto consiste en enviar un mensaje de correo o un SMS cuando ocurra cierta condición.
- Vamos a configurar nuestra aplicación para recibir un mensaje de correo cada vez que pulsemos el Botón alternativamente.
- Pulsamos en Trigger.
- Arrastramos "Nuestro ESP8266" a la derecha del if, como se indica en la imagen.
- Ponemos el Botón, marcamos On (1) y escribimos un correo.
- Cada vez que pulsemos el Botón y enviemos se asigne el 1, se enviará un correo a la dirección indicada.
- Si pulsas muchas veces, obtendrás un correo cada vez que el Botón envíe un 1.
- Leer:
Notification trigger (SMS and email) are currently limited to 300 per day.
https://community.mydevices.com/t/sending-mqtt-messages-within-notification-limit/11569
- También tenemos la limitación de enviar 60 mensajes por minuto y de 50 conexiones cada 10 minutos.
- Para que las notificaciones no se repitieran contínuamente, habría que modificar el código del IDE, del ESP8266.
- Por ejemplo, podríamos modificar el código para que una vez superado un valor, no se vuelva a enviar notificación hasta que no pase una hora.
___________________________
- Propuesta.
- Modifica el código anterior para que solo podemos enviar una notificación al pulsar un Botón, una vez cada minuto.
cayenne.ino |
// Juan Antonio Villalpando.
// kio4.com
#define CAYENNE_PRINT Serial
#include <CayenneMQTTESP8266.h>
// Nombre y contraseña de tu red WiFi.
const char* ssid = "Nombre_de_tu_Red_WiFi";
const char* password = "Clave_WiFi";
// Autentificación. API del Cayenne.
char username[] = "56395930-557e-11e9-8da4-359d3972629e";
char password[] = "d8c9fad4868e3e3807da7338536a79608c28814e";
char clientID[] = "fab5d960-557f-11e9-89d2-4b372b367592";
void setup() {
Serial.begin(115200);
Cayenne.begin(username, password, clientID, ssid, wifiPassword);
}
void loop() {
Cayenne.loop();
}
// Enviar datos al servidor de Cayenne.
CAYENNE_OUT_DEFAULT()
{
// Envio de un número aleatorio al canal 0 de Cayenne.
int aleatorio = random(1,90);
Cayenne.virtualWrite(0, aleatorio);
}
// Recibo de respuesta de Cayenne.
CAYENNE_IN_DEFAULT()
{
// Obtenemos el Canal y el valor que ha variado mediante Botón, Deslizador,...
CAYENNE_LOG("Channel %u, value %s", request.channel, getValue.asString());
// Cuando pulsemos el Botón (Channel 1), recibiremos su número de canal y su valor.
// En caso que llege el canal 1 y el valor 1, enviará al Cayenne un 1 por el Channel 2
// Para que se encienda el icono Statud_LED del Cayenne.
int canal = request.channel;
String valor = getValue.asString();
if(canal == 1 && valor == "1"){Cayenne.virtualWrite(2, 1);}
else {Cayenne.virtualWrite(2, 0);}
}
|
_______________________________
|