Una de las plataformas que más prometen en el panorama actual es Cayenne myDevices. Desde hace tiempo la llevo siguiendo y poco a poco va incorporando nuevas funcionalidades y mejoras.
Además de lo típico que podemos hacer con una plataforma para el IoT, Cayenne myDevices tiene una APP para iOS y para Android bastante potente. Cuenta con widget preconfigurados que con tan sólo arrastrar y soltar, están listo para usar.
Pero quizás la funcionalidad más interesante sean los triggers. Se trata de un sistema que nos avisa en el caso de que se cumpla una regla. Funciona de una forma parecido a como funciona IFTTT, el servicio de servicios.
En este tutorial te voy a mostrar cómo configurar un Arduino MKR1000 con Cayenne myDevices para hacer un sistema de detección con un sensor PIR. Por último te enseñaré diferentes alternativas para controlar Arduino desde un móvil ya sea Bluetooth o WiFi.
Ponte cómodo, saca la placa de la caja y empecemos el tutorial.
Indice de contenidos
¿Qué es Cayenne My Devices?
Cayenne myDevices es una plataforma de prototipado de dispositivos del IoT. Una de la mayores ventajas que tiene es que es una solución visual, arrastrar y soltar es decir, nos permite configurar el sistema sin programar.
La ventaja está a la vista, no hace falta programar ni una línea de código del lado del servidor. Sin embargo, como ocurre con este tipo de herramientas, nos limita bastante ya que tenemos que adaptarnos a lo que nos ofrecen.
Sin embargo, Cayenne myDevices ofrece un amplio abanico de posibilidades. Tiene apoyos de grandes empresas de la industria tecnológica como Microchip y Smetch y del hardware libre como Arduino.
Nos permite crear paneles de control de una forma muy sencilla arrastrando y soltando widgets para visualizar, gestionar y controlar dispositivos conectados del IoT o domóticos todo a través de un broker MQTT.
Entre todos los servicios que nos ofrece caben destacar el control y monitorización remoto, alertas, avisos, programación de eventos, tratamientos de datos, seguimiento de dispositivos, código personalizado, una API MQTT y compatibilidad con redes LoRaWAN.
Soporta varios tipos de placas y hardware: Raspberry Pi, Arduino, ESP8266 y varias redes y dispositivos LoRaWan. Vamos, que podemos conectarnos con nuestras placas favoritas :)
Por último cabe destacar las cajas del IoT o IoT in a Box. Se trata de un paquete completo donde viene el hardware necesario y paneles de control personalizados para monitorizar ese hardware.
Hay cajas específicas para diferentes sectores como los restaurantes o servicios de comida, farmaceúticas, invernaderos o centros de datos. Se pueden comprar en el Marketplace de su página web e incluye un Gateway LoRa, sensores y el panel de control y APP móvil configuradas.
Por último existe el programa IoT Ready Program para fabricantes de hardware. Se trata de un servicio para integrar el hardware dentro de la plataforma de Cayenne y así hacer accesible dicho hardware para todo el mundo.
Limitaciones del servicio y planes
Si entras en la web de Cayenne myDevices verás que no encuentras ninguna opción donde se vean los planes disponibles, no hay mucha información. Sin embargo, te puedes dar de alta y comenzar a utilizar sus servicios.
Todo se comunica a través de una API MQTT y la única limitación que he encontrado es a la hora de hacer llamadas a la API.
- Cada cliente sólo puede enviar 60 mensajes por minuto por IP.
- Cada cliente sólo puede intentar 50 conexiones cada 10 minutos por IP.
Estas limitaciones no hacen referencia al número de dispositivos pero si al cómputo global de mensajes enviados y de intentos de conexión.
Parece ser que el modelo de negocio de esta plataforma se sustenta en su Marketplaces con soluciones terminadas para los clientes. De momento, los Makers estamos de suerte ya que podemos utilizar esta plataforma para crear nuestros proyectos.
Así que vamos a ello, veamos cómo comenzar con Cayenne myDevices.
Comenzando con Cayenne myDevices
Esta plataforma es muy completa y nos ofrece un montón de servicios. En este tutorial nos vamos a centrar en cómo comenzar a utilizar Cayenne myDevices para crear un dispositivo del IoT.
Dentro de la plataforma hay dos componentes que nos permitirán controlar y manejar nuestros dispositivos hardware:
- Aplicaciones móviles para iOS y Android para control remoto de los dispositivos.
- Panel de control online para la gestión total de nuestros dispositivos.
Para crear un proyecto del IoT o domótico sólo necesitarás una placa o hardware compatible (Raspberry Pi, Arduino, ESP8266, etc…) y un navegador o un móvil. En este tutorial voy a utilizar un Arduino MKR1000.
Hay diferencias entre las diferentes placas. La compatibilidad de Cayenne myDevices con Arduino es alta y con placas basadas en el ESP8266 es media, lo veremos a lo largo de este tutorial.
Respecto al software, necesitaremos instalar una librería y también una APP en Android o iOS. Pero empecemos por el principio, creando una cuenta gratuita en Cayenne myDevices e instalando la librería para Arduino.
Crea una cuenta en Cayenne myDevices
Esta cuenta nos va a servir para conectar múltiples placas con múltiples sensores. Accede a Cayenne myDevices y crea una cuenta. Sólo necesitas tu nombre y apellidos, un email y una contraseña.
Sencillo ¿no? Una vez que te das de alta ya puedes acceder al panel de control de tu cuenta, luego volveremos a él. Antes vamos a instalar la librería Cayenne MQTT con el IDE de Arduino.
Instalando la librería Cayenne MQTT
Esta librería nos va a permitir conectar nuestras placas, ya sean Arduino MKR1000 o cualquier placa ESP8266, a la plataforma del IoT en la nube Cayenne myDevices. Lo haremos a través del gestor de librerías.
Entra en la opción del menú Programar>Incluir Librería>Gestionar Librerías y busca cayennemqtt.
Esto instalará tanto el código como los ejemplos de esta librería. Con esto ya tenemos todo preparado para empezar a configurar Arduino MKR1000 con Cayenne myDevices.
Cómo conectar Arduino a Cayenne myDevices
Arduino MKR1000 es una de mis placas favoritas. Aunque su coste es bastante más elevado que cualquiera de las placas basadas en el ESP8266, su facilidad y fiabilidad lo compensan con creces.
Cayenne myDevices es totalmente compatible con Arduino y es muy sencillo de configurar. Si no has añadido ningún dispositivo o placa a Cayenne myDevices, la primera pantalla que sale es esta.
Selecciona Arduino. En la siguiente pantalla nos está indicando que debemos hacer 5 cosas:
- Conectemos el shield WiFi a la placa. Con Arduino MKR1000 esto no hace falta ya que está integrado dentro de la propia placa.
- Asegúrate que la placa Arduino MKR1000 está conectada al PC o Mac con el cable USB.
- Instala el IDE de Arduino.
- Instala la librería Cayenne MQTT.
- Selecciona la placa y el puerto correctos en el IDE de Arduino.
Todo esto ya está hecho y si no lo está, tendrás que hacerlo para seguir el tutorial. Una vez esté configurado haz click en Next.
En el tercer paso tenemos que seleccionar la placa entre todos los modelos de Arduino. Arduino MKR1000 está dentro del grupo Arduino Due. Despliega y selecciona la placa Arduino MKR1000.
Nada más seleccionar la placa saldrá una ventana donde te muestra un código. Copia y pega ese código en un nuevo programa en el IDE de Arduino. Puedes copiar haciendo click en el botón superior derecha.
Cargando el código a la placa
En este código ya viene configurado el username, password y el clientID necesarios para conectar a Cayenne myDevices. Sin embargo, nos queda rellenar el nombre de la red WiFi (ssid) y la contraseña (wifiPassword).
Ahora sólo nos queda cargar el código a la placa. Abre el monitor serie y tendrás algo parecido a esto.
Si todo ha ido bien, aparecerá algo parecido a esto dentro de la plataforma Cayenne myDevices.
Ahora ya tenemos configurado nuestro primer dispositivo. Sólo nos queda una cosa, cambiar el nombre a través de la opción configuración.
Configurar dispositivo en Cayenne myDevices
Si haces click en el engranaje de la derecha, puedes entrar en la configuración del dispositivo.
En la siguiente pantalla podrás modificar el nombre y otros parámetros del dispositivo. Haz click en el lápiz para editar el nombre.
Pon un nombre descriptivo, luegos das al check verde y listo.
Puedes comprobar cómo ha cambiado el nombre del dispositivo. Por ejemplo yo he puesto Sensor presencia Arduino.
Y con esto ya lo tenemos todo listo para configurar el primer widget.
Detector de presencia con Arduino y Cayenne myDevices
Quizás una de las aplicaciones más interesantes sea utilizar un Arduino MKR1000 como detector de presencia. Para ello voy a utilizar un sensor PIR. En este tutorial me voy a centrar en cómo configurarlo con Cayenne myDevices y no en cómo funciona en sensor de presencia PIR.
Si quieres profundizar más te aconsejo que leas el artículo que tienes en la web de Adafruit. Es el mismo sensor con el que voy a trabajar en este artículo.
Imagen obtenida de Adafruit
Sensor PIR
El sensor PIR detecta la presencia de un ser un humano o cualquier cosa que se mueva delante del sensor. La precisión y distancia dependen de cada modelo. El que voy a utilizar yo permite regular la sensibilidad y el tiempo entre mediciones.
Tiene un precio muy económico, lo puedes encontrar por unos 2,5€ con gastos de envío incluídos. Además este sensor te permite configurarlo con un disparo único o múltiples disparos.
Para un buen funcionamiento, deberías configurar la sensibilidad y el tiempo entre mediciones para unas condiciones concretas. Ves regulando los dos potenciómetros hasta que el resultado sea el deseado.
Esquema eléctrico
Es un esquema muy sencillo, sólo vamos a utilizar 3 pines de Arduino MKR1000.
El pin de Vcc (rojo) va conectado al pin de 5 V de Arduino MKR1000. El pin de GND al pin de GND de Arduino y el pin de la señal al pin 5 de Arduino.
Sensor PIR con Cayenne myDevices
En principio, y tras las pruebas realizadas para este artículo, los widgets por defecto no son muy útiles ya que la gran mayoría no funcionan correctamente. Creo que es debido a que la plataforma está sufriendo grandes cambios.
Sin embargo, podemos hacerlo de una forma alternativa. Vamos a programar el código que subiremos a la placa. Cayenne myDevices detectará que se está enviando un nuevo dato y generará un widget automáticamente.
Por lo tanto, los pasos que vamos a seguir son los siguientes:
- Programar el código y subirlo a la placa.
- Configurar el widget
Código para detectar presencia con Arduino MKR1000
Ya sabes que cuando tenemos un gran problema que resolver, será más fácil si lo dividimos en diferentes partes. Así que vamos a ello.
Importación de librerías y declaración de variables
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Importación librería Cayenne myDevices #include <CayenneMQTTMKR1000.h> // Pines: sensor pir, led integrado en la placa y canal virtual #define SENSOR_PIN 5 #define LED_PIN 6 #define VIRTUAL_CHANNEL 1 // Configuración red WiFi char ssid[] = "SSID-WIFI"; char wifiPassword[] = "PASS-WIFI"; // Claves del dispositivo en Cayenne myDevices char username[] = "USERNAME-CAYENNE-MYDEVICES"; char password[] = "PASSWORD-CAYENNE-MYDEVICES"; char clientID[] = "CLIENT-ID-CAYENNE-MYDEVICES"; // Variable para detectar cambio de estado en el PIR byte pirState = LOW; |
Comienzo importando la librería CayenneMQTT. Luego declaro 3 constantes que contienen los pines donde están conectados el sensor PIR, SENSOR_PIN, el LED integrado en la placa, LED_PIN y el canal o pin virtual de Cayenne myDevices, VIRTUAL_CHANNEL.
Un canal o pin virtual es diferente a un pin de entrada y salida de Arduino, no tienen propiedades físicas. Sirven para enviar información desde Cayenne myDevices a Arduino y viceversa. Con estos pines se pueden hacer cosas muy potentes.
En este programa hemos creado un pin virtual en Cayenne myDevices que lo utilizaremos para mostrar información del sensor PIR.
Luego he declarado dos arrays de char para almacenar la SSID (ssid) y la contraseña (wifiPassword) de la red WiFi. También necesitamos otros 3 array del tipo char para los datos de conexión con la plataforma Cayenne myDevices: username, password y clientID.
Por último, la variable pirState del tipo byte nos servirá para detectar si ha cambiado de estado y lanzar la alerta a Cayenne myDevices.
Ahora pasamos a la función setup().
Función setup()
1 2 3 4 5 6 7 8 9 10 |
void setup() { // Configuración comunicación serie Serial.begin(9600); // Modo de los pines pinMode(SENSOR_PIN, INPUT); pinMode(LED_PIN, OUTPUT); // Iniciamos comunicación con Cayenne myDevices Cayenne.begin(username, password, clientID, ssid, wifiPassword); } |
En la función setup hacemos lo típico, configurar la comunicación serie y el modo de los pines. Para el sensor PIR en modo INPUT y para el LED modo OUTPUT.
Luego iniciamos la comunicación con Cayenne myDevices con la función Cayenne.begin() que admite 5 parámetros. Los tres primeros son los datos para comunicarnos con Cayenne myDevices: username, password y clientID.
Los dos siguientes son la configuración de la red WiFi: ssid y wifiPassword.
Ahora vamos con la función loop() donde implementaré la lógica.
Función loop()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
void loop() { // Gestión de comunicación con Cayenne myDevices Cayenne.loop(); // Obtenemos valor del sensor PIR byte val = digitalRead(SENSOR_PIN); // Si ha detectado movimiento if (val == HIGH) { // Encendemos el LED digitalWrite(LED_PIN, HIGH); // Sólo si viene del estado bajo lanzamos alerta if (pirState == LOW) { // Mostramos información por el monitor serie Serial.println("Motion detected!"); // Actualizamos el estado pirState = HIGH; // Enviamos la información a Cayenne myDevices Cayenne.virtualWrite(VIRTUAL_CHANNEL, HIGH); } } else { // Apagamos el LED digitalWrite(LED_PIN, LOW); // Sólo si viene del estado alto lanzamos alerta if (pirState == HIGH) { // Mostramos información en el monitor serie Serial.println("Motion ended!"); // Actualizamos el estado pirState = LOW; // Enviamos la información a Cayenne myDevices Cayenne.virtualWrite(VIRTUAL_CHANNEL, LOW); } } } |
La función loop() aunque tenga más código es bastante sencilla. Lo primero es llamar a la función Cayenne.loop() donde se gestionará toda la comunicación con la plataforma en la nube.
Es importante no bloquear la función loop() para evitar que se pierda conexión con Cayenne myDevices así que no utilices delay ni ningún código que bloquee.
En la siguiente sentencia, leo el pin digital donde está conectado el sensor PIR y lo almaceno en la variable var de tipo byte.
Las siguientes sentencias if comprueban el estado del pin, HIGH o LOW. Dentro de cada sentencia que detecta cada estado, se comprueba si ha habido un cambio de HIGH a LOW o de LOW a HIGH.
Sólo en alguno de estos casos, mostrará un mensaje por el monitor serie y enviará los datos a Cayenne myDevices. Así evitaremos que esté enviando datos constantemente. Para regular cada cuánto se envían datos puedes regular el potenciómetro del tiempo entre medidas.
Para enviar los datos a la plataforma del IoT utilizo la función Cayenne.vritualWrite() que admite dos parámetros, el pin virtual (VIRTUAL_CHANNEL) y el valor que queremos enviar, HIGH O LOW.
Con esto ya tendríamos nuestro código. Si lo cargas en la placa y abres el monitor serie verás algo parecido a lo siguiente.
Ya tenemos todo preparado y funcionando ahora vamos a ver qué sucede en Cayenne myDevices.
Comprobando datos en Cayenne myDevices
Abre el panel de control y ahora si que estará recibiendo datos. Verás que ha aparecido un nuevo widget. Vamos a configurarlo para que muestre datos digitales. Entra en Settings haciendo click sobre el engranaje.
También puedes entrar en la configuración haciendo doble click sobre el widget, donde pone Channel 1.
En esta nueva ventana configuramos los 4 parámetros:
- Widget Name: Utiliza un nombre descriptivo para identificar el widget.
- Channel: debe ser el mismo que has puesto en el código que has cargado a Arduino.
- Choose Icon: Selecciona un icono, por ejemplo el de Motion (movimiento).
- Number of decimals: número de decimales. Como es un valor digital pon 0.
Ahora pulsa en Save y mira el resultado. Ya tenemos nuestro sensor de movimiento. Comprueba que al pasar la mano por delante, detecta el movimiento y cambia el valor que se muestra.
Pero claro, esto no sería muy útil si no nos mandara algún tipo de mensaje para avisarnos de que se ha producido una detección. Gracias a los disparadores o triggers esto es posible.
Creando un trigger o disparador en Cayenne myDevices
Una de las herramientas más potentes que tiene Cayenne myDevices son los triggers o disparadores. ¿Recuerdas cuando hablé de IFTTT? Pues con Cayenne myDevices podemos hacer algo muy parecido.
Necesitamos que cuando ocurra algo, haga algo. Para configurar un trigger haz click en el engranaje que se encuentra en el widget y pulsa sobre trigger.
Esto abre una nueva pantalla donde tenemos que configurar qué desencadena el trigger y qué es lo que hace. Lo primero pon un nombre descriptivo al trigger. Luego arrastra y suelta el dispositivo Sensor presencia Arduino encima del panel donde pone if Drag your device here.
En la nueva pantalla debemos de seleccionar el desencadenador. Abre el menú desplegable y selecciona el widget PIR.
En el siguiente panel de configuración configura el trigger de la siguiente manera.
Luego pulsa sobre setup notification, selecciona Send Email y rellena el email.
Por último le das a Save.
Ya tenemos nuestro primer trigger creado. Ahora cada vez que detecte la presencia de algo, enviará un email notificando.
Sólo quedaría probar la APP móvil, eso te lo dejo a ti. Tienes una para iOS y otra para Android.
Por último lo que vamos a ver son diferentes alternativas a esta plataforma para controlar desde el móvil una placa de Arduino.
Alternativas a Cayenne myDevices
Hay diferentes alternativas para controlar un Arduino desde un móvil. Primero tenemos que distinguir entre la tecnología de comunicación. Podemos hacerlo por Bluetooth o por WiFi.
Bluetooth puede resultar interesante para utilizar la APP como un control remoto. WiFi es más para monitorizar, gestionar y controlar un sistema.
Así que vamos a ir viendo cada una de ellas.
Arduino Bluetooth Controller
Aplicación para Android con una interfaz de usuario muy simple y fácil de usar y configurar. Sólo tienes que emparejar tu móvil con el módulo Bluetooth y ya está, lista para usar. Permite conectarse con 4 modos diferentes:
- Modo controlador: se trata de una interfaz como si fuera el mando de una consola. Es muy útil para controlar robots por ejemplo
- Modo conmutación: esta interfaz es muy simple. Consiste en un único botón para conmutar entre On y Off.
- Modo progresivo: permite enviar valores dentro de un rango. Útil para cambiar, por ejemplo, el brillo o la velocidad de un robot.
- Modo terminal: a través de una terminal envíamos comandos a Arduino. Esto nos obliga a decodificar los comandos en el programa que cargamos en la placa.
Bluetooth Controller 8 Lamp
Es una aplicación específica que nos permite controlar un módulo de 8 relés por ejemplo. Presenta una interfaz muy sencilla donde tenemos 8 botones con dos estados: on y off. Dispone de una versión premium con más capacidades.
Arduino Voice Controller
Arduino no tiene suficiente memoria ni capacidades para el procesamiento de voz. Esta aplicación usa las capacidades de Android para procesar la voz y enviar los comandos pertinentes a la placa de Arduino.
RemoteXY: Arduino Control
La APP RemoteXY es muy interesante. Permite conectarnos a una placa de Arduino a través del Bluetooth pero además, nos permite crear nuestras propias interfaces gráficas a través de su web.
Además de conexión Bluetooth con Arduino, también permite WiFi. Es compatible con muchas placas entre ellas, ESP8266.
Virtuino
Es una aplicación muy versátil que además de controlar Arduino con Bluetooth, también tenemos posibilidad de controlar vía WiFi, SMS o ThingSpeak. Nos permite crear una interfaz gráfica personalizada para controlar LEDs, interruptores, reguladores o lo que sea.
Muy sencilla de usar y requiere muy poco código del lado de Arduino. También es compatible con el ESP8266 vía WiFi.
Blynk
Blynk fue fundada en una campaña de Kickstarter. Es una plataforma del IoT con aplicaciones para iOS y Android que nos permite controlar Arduino, Raspberry Pi, ESP8266, etc…
Podemos configurar una interfaz gráfica a nuestro gusto, desde la propia APP móvil. Lo hacemos arrastrando y soltando widgets. Tiene una interfaz muy llamativa y con un diseño muy cuidado.
Además, dispone de un servidor en la nube que es de código abierto. Podemos descargar el software e instalarlo en una Raspberry Pi por ejemplo. Sin duda alguna esta una gran alternativa.
Me apunto esta plataforma para escribir un artículo más adelante :)
Conclusiones sobre Cayenne myDevice con Arduino
Se trata de una plataforma que está evolucionando poco a poco. Aunque todavía quedan mucha cosas por pulir, puede ser uno de los referentes dentro de las plataformas del IoT gracias a dos factores.
Por un lado el apoyo de diferentes empresas como Microchip o Arduino. Esto hace que los productos, ya sean software como hardware, evolucionen día a día. Por otro lado la facilidad de uso.
Es importante que la tecnología esté al alcance de todo el mundo y no sólo de gente con conocimientos técnicos. Democratizar el acceso del IoT hará que llegue al público en general.
En este sentido, Cayenne myDevices, es una alternativa a tener en cuenta. Sólo falta una cosa, pulir lo que ya tienen y hacerlo crecer hasta límites insospechados.
¿Qué opinas de Cayenne myDevices?
¿Tienes experiencia en otras plataformas del IoT?
Agradezco tus comentarios aquí abajo :)