Una plataforma para que cualquier robot basado en Arduino pueda almacenar información, compartirla con otros robots o controlarlos vía web usando un módulo wifi ESP-8266.
Permite programar tus robots de forma sencilla usando una librería para Arduino o una extensión para mBlock
· Un robot de Makeblock (el mBot o el Ranger por ejemplo) o cualquier otro con placa basada en Arduino
· Y un módulo wifi ESP-8266. Puede ser el módulo wifi de Makeblock o cualquier módulo con chip ESP-8266
Puedes conectar a Cloud tantos robots o placas como quieras. Una vez conectados cada robot podrá acceder a las siguientes funcionalidades:
En Cloud puedes guardar cualquier dato y recuperarlo cuando quieras
por ejemplo: tu robot podrá almacenar su última temperatura registrada
por ejemplo: tu robot podrá registrar la temperatura cada hora y dejarla almacenada en una lista
Cualquier robot podrá leer o modificar los datos que tú elijas. Igualmente si tu robot necesita acceder a datos de otros robots.
por ejemplo: podría almacenar todos sus movimientos para que otros robots los repliquen
Puesto que otro robot puede modificar tus datos, también podrás conocer quién lo ha hecho y cuándo.
por ejemplo: quién ha establecido y acertado la variable "numero" que creaste para un acertijo.
Hemos creado una interfaz muy sencilla para que puedas ver en tiempo real los datos que guardan en Cloud tus robots
Podrás enviar comandos a tus robots a través de la interfaz ver más...
por ejemplo enviarle una orden para que se ponga en marcha o encienda las luces
( Próximamente... )
por ejemplo: Soy un #robot y he conseguido superar el laberinto
Necesitas actualizar el firmware de tu módulo Wifi para que puedas conectarte al Cloud.
Sólo tendrás que grabarlo como indicamos a continuación:
· Para ME Wifi de Makeblock:
cloud-firmware-for-me-wifi.zip (258Kb)
· Para Wemos/ESP8266
cloud-firmware-for-esp8266-wemos.zip (258Kb)
.. y extrae el contenido en una carpeta de tu PC
Si usas el ME Wifi de Makeblock utiliza el FTDI y el cable RJ25-a-Dupont (incluidos) y conéctalo de la siguiente forma:
( Blanco -> RX ) ( Negro - TX ) ( Rojo - Vcc/5V ) ( Verde - GND )
Nota: Si necesitas los drivers del FTDI puedes descargarlos desde aquí CDM21228_Setup.zip (2.4Mb)
Pon el interruptor pequeño blanco del módulo Me Wifi en posición "PROG" para poder grabar el firmware
Vete a la carpeta donde has descomprimido el firmware descargado y ejecuta flash_firmware.cmd
Una vez finalizado vuelve a poner el interruptor del ME Wifi en posición "WORK"
Conecta el módulo ME Wifi de Makeblock em un puerto libre de tu robot.
Si usas otro módulo wifi ESP-8266 como el Wemos D1 mini, tendrás que conectarlo a tu robot mediante un cable RJ25-a-Dupont y conectar los cables:
Configura tu módulo para que se conecte a tu red Wifi ( configuración quedará guardada en el módulo )
· Enciende tu robot y el módúlo Wifi creará una nueva red wifi llamada "CloudBotWifi".
· La luz azul parpadeará lentamente
· Conéctate a ella desde tu móvil y configura las credenciales de tu router wifi:
· La luz azul ahora parpadeará más rápido indicando que se ha emparejado correctamente
· En el momento que el módulo se conecte al Cloud la luz azul quedará fija
Para que tus robots puedan acceder al Cloud necesitarás obtener tu clave de acceso Cloud-Key Accede a mi Cloud y verás tu Cloud-Key en la parte superior.
Si todo ha ido bien, podemos ejecurar el siguiente ejemplo que almacenanda un dato en el Cloud, para ello necesitarás instalar la extensión Cloud of Bots en tu mBlock (Scratch).
Puedes seguir los tutoriales básicos para crear tus primeros proyectos de interacción con Cloud usando mBlock ( Scratch ) o utilizando nuestra librería para Arduino
Puedes instalar o actualizar la extensión para mBlock desde el menú Extensiones -> Administrar Extensiones y buscando la extensión "Cloud of Bots"
Nota: También la puedes instalar de forma manual descargando cloudbot-mblock.zip (6Kb)
La librería cloudbot.h te permite acceder al Cloud desde Arduino sin complicaciones.El siguiente ejemplo muestra como acceder al Cloud para guardar y leer un dato.
Descargar previamente la cloudbot-arduino.zip (6Kb) y juega con el ejemplo completo que hemos incluido en el .zip
Desde mi Cloud http://cloud.makeblock.es/me podremos ver un listado de los robots que hemos creado usando nuestro Cloud-Key
Es importante que primero conozcas la base del cloud para que conozcas todo lo que vas a poder hacer, ten en cuenta que es proyecto muy ambicioso y en constante desarrollo por lo que iremos aumentando las funcionalidades poco a poco
Podemos acceder a cualquier robot conociendo su ID, que es un identificador que se le asigna en el momento que acceden al Cloud por primera vez ( ver tutoriales )
Este ID es necesario para:
Podremos ver el estado de nuestro robot y todos sus datos almacenados desde:
http://cloud.makeblock.es/robot/IDENTIFICADOR
Nuestro robot podrá leer o escribir datos en otros robots.
Próximamente ... podremos asignarle un alias (nombre) desde la zona de mi Cloud para que podamos acceder a otros robots por su Alias o por su Identificador.
La función principal del Cloud es poder almacenar datos de nuestro robot y poder compartirlos con otros robots.
Deberemos asignar un nombre a cada dato, es como generar una variable que reside en el Cloud.
Debe comenzar por una letra seguida de letras y/o números y se permite 1 sólo punto en medio del nombre:
Si el nombre de la variable termina por dos puntos ":" el cloud almacenará un histórico de los cambios que realicemos como si fuera una lista de datos (array)
Por defecto, cualquier variable que creemos en el Cloud de nuestro robot podrá ser leida o modifica por otros robots. Si queremos que una variable sea de sólo lectura bastará con que comience por un guón bajo "_" y así podrá ser leida, pero no modificada por otros.
Para usar el cloud siempre debes usar 2 instrucciones juntas:
Dispones de 2 bloques para indicar a tu Robot donde has conectado el módulo wifi.
Puedes usar el bloque donde indicas el puerto de la placa donde has conectado el módulo Wifi ( para robots de Makeblock)
O el bloque donde indicas los 2 pines a los que has conectado los pines RX y TX del módulo Wifi ESP-8266 ( para cualquier otra placa Arduino )
Imprescindible para poder usar cualquier función del Cloud, al que le prporcionarás tu Cloud-Key una clave única que puedes obtener en mi Cloud
Nota: La primera vez que inicies sesión se creará un espacio en el Cloud para almacenar toda la información de tu robot y podrás acceder a tu robot desde mi Cloud
Puede resultarte útil saber si has conseguido conectarte al Cloud de forma satisfactoria
Almacena un dato o listas de datos en el Cloud dentro del robot desde el que se llama
o Desde Arduinocon arduino
// Dato "estado" de sólo lectura para que otros lo vean
cloud::setData("_estado", "Hola Cloud");
// También puedo pasar datos numéricos
cloud::setData("temperatura", 25);
// Nuevo dato tipo lista "respuestas:" para que otros inserten una posible respuesta
cloud::setData("respuestas:", "1001");
// Añado otro dato a la misma lista
cloud::setData("respuestas:", "1002");
/*
La variable respuestas: contiene los valores
> 1001
> 1002
*/
Podemos almacenar un dato en otro robot de la red conociendo su ID y el nombre de la variable, siempre que esa variable NO sea de tipo "sólo lectura"
// Almaceno mi respuesta en la variable "respuestas:" del robot con ID HJ89YU78
cloud::setData('HJ89YU78', 'respuestas:', '2020');
Puedo leer cualquier dato del Cloud conociendo su nombre
// Obtengo mi estado
String estado = cloud::getData("_estado");
// Obtengo la última respuesta insertada en una lista
int ultima = cloud::getData("respuestas:").toInt();
Obtiene un dato de otro robot conociendo su ID
// Estado del robot con ID HJ89YU78
String estado = cloud::getData('HJ89YU78' ,'_estado');
// Obtengo la última respuesta de la lista de otro robot
Int ultima = cloud::getData('HJ89YU78', 'respuestas:').toInt();
Obtiene el número de elementos de una lista
// Obtengo el número de respuestas que han almacenado otros robots en mi lista
int respuestas = cloud::count("respuestas:");
Obtiene el número de elementos de una lista de otro robot conociendo su ID
int respuestas = cloud::count('HJ89YU78', 'respuestas:');
Obtiene un elemento de la posición deseada de una lista creada en mi robot
int respuestas = cloud::count("respuestas:");
for ( int pos=0; pos< respuetas; pos++ ) {
Serial.println( cloud::getDataAt("respuestas:", pos ) );
}
//En el siguiente ejemplo muestra los valores de la variable 'respuestas' del robot 'HJ89YU78'
int respuestas = cloud::count('HJ89YU78', 'respuestas:');
for ( int pos=0; pos< respuetas; pos++ ) {
Serial.println( cloud::getDataAt('HJ89YU78', 'respuestas:', pos ) );
}
Eliminar la variable y todos sus datos. Sólo podremos eliminar datos de nuestro robot
cloud::delData("temperatura");
cloud::delData("respuestas:");
Eliminar sólo el dato de una posición dada dentro de una variable de tipo lista
//- elimino la primera respuesta introducida
cloud::delData("respuestas:", 0);
En el panel online de cada robot hay botones de acción que podrás usar para controlar tu robot vía web. Cada acción tiene un nombre que podrás usar desde Scratch o Arduino
Primero el robot tiene que saber si le hemos enviado una acción vía web y posteriormente podrá conocer el estado de la misma (ON/OFF)
Almacenamos un nuevo dato con setData al que llamamos "estado"
#include "MeMCore.h"
#include "cloudbot.h"
void setup(){
// Indico que he conectado el WIFI en el puerto 1 de mi mBot
cloud::begin( PORT_1 );
// Me conecto al cloud con mi CLOUD-KEY privada que obtengo
// desde http://cloud.makeblock.es/me/
cloud::login('MY_CLOUD_KEY');
// Guardo mi primer dato en el Cloud que llamaré "estado"
cloud::setData("estado", "Hola Cloud");
}
void loop(){
}
Una vez ejecutado este ejemplo ya podremos ver nuestro robot en miCloud con el dato recién almacenado.
#include "MeMCore.h"
#include "cloudbot.h"
void setup(){
cloud::begin( PORT_1 );
cloud::login('MY_CLOUD_KEY');
//- Leemos el dato almacenado del primer ejemplo
String estado = cloud::getData("estado");
if(estado == "Hola Cloud"){
cloud::setData("estado", "Mi ejemplo funciona!");
}
}
El nombre de nuestra variable debe terminar con ":" y Cloud creará una una lista para que cada vez que llamemos a setData se almacenen los sucesivos valores.
#include "MeMCore.h"
#include "cloudbot.h"
void setup(){
cloud::begin( PORT_1 );
cloud::login('MY_CLOUD_KEY');
//- Almacenamos 10 datos en una variable llamada lista:
for(int x=1; x<=4; x++){
cloud::setData("lista:", "Dato número " + x);
}
}
/*
La variable "lista:" contiene:
> Dato número 1
> Dato número 2
> Dato número 3
> Dato número 4
*/
#include "MeMCore.h"
#include "cloudbot.h"
void setup(){
//- Usaremos el monitor serie para mostrar valores
Serial.begin(9600);
cloud::begin( PORT_1 );
cloud::login('MY_CLOUD_KEY');
//- Puedo acceder siempre al último dato con
Serial.println( cloud::getData("lista:") );
//- Conocer cuantos datos he almacenado
int cuantos = cloud::count("lista:");
//- Y mostrarlos uno a uno
for(int pos=1; pos<= cuantos ; pos++){
Serial.println( cloud::getDataAt("lista:", pos ) );
}
}
Nos conectamos con otro robot del que conocemos su ID. Si ha acertado la respuesta a la pregunta planteada en el concurso almaceno su ID en en una variable del Cloud de mi robot.
Nota: Usamos los bloques de manipulación de variables de texto de la extensión