INTRODUCCIÓN

¿ Qué es Cloud ?

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

Tan sólo necesitas...

· 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

Funcionalidades

Puedes conectar a Cloud tantos robots o placas como quieras. Una vez conectados cada robot podrá acceder a las siguientes funcionalidades:

Almacenar datos

En Cloud puedes guardar cualquier dato y recuperarlo cuando quieras
por ejemplo: tu robot podrá almacenar su última temperatura registrada

Almacenar listas de datos

por ejemplo: tu robot podrá registrar la temperatura cada hora y dejarla almacenada en una lista

Compartir tus datos con otros robots

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

Conocer quién y cuándo han modificado tus datos (públicos)

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.

Visualizar via web los datos de tus robots

Hemos creado una interfaz muy sencilla para que puedas ver en tiempo real los datos que guardan en Cloud tus robots

Controlar tus robots via web

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

Hacer que tus robots publiquen en tus redes sociales

( Próximamente... )
por ejemplo: Soy un #robot y he conseguido superar el laberinto

PRIMEROS PASOS

1.- Actualiza el firmware de tu módulo wifi

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:

1.1- Descarga la últma versión del Firmware (v3)

· 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

1.2- Conecta el módulo Wifi en un puerto USB 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)

1.3- Graba el firmware en tu módulo wifi

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"

2.- Conecta el wifi en tu robot

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:

  • Blanco - TX
  • Negro - RX
  • Verde - GND
  • Rojo - 5V

3.- Configurar tu red Wifi

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

4. Tu primer ejemplo

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

Extensión para mBlock

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)

Librería de Arduino

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

Acceder a los robots via Web

Desde mi Cloud http://cloud.makeblock.es/me podremos ver un listado de los robots que hemos creado usando nuestro Cloud-Key

Acceder a los datos de nuestro robot

En cualquier momento podremos ver los datos almacenados en el Cloud de nuestro robot ( o de otro robot si conocemos su ID )

Visualizar todos los datos históricos de una lista

Si hacemos click en un dato almacenado de tipo lista podrás ver todos los datos almacenados en ésta, y si es un dato público ( compartido con otros robots) también podrás ver qué robots almacenan datos en tu lista.

MANUAL DE USO

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

Identificar robots

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:

Acceder a él online

Podremos ver el estado de nuestro robot y todos sus datos almacenados desde:
http://cloud.makeblock.es/robot/IDENTIFICADOR

Acceder a datos compartidos de otros robots

Nuestro robot podrá leer o escribir datos en otros robots.

Cambiar el Alias de nuestro robot

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.

Tipos de datos

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.

Sintaxis general

Debe comenzar por una letra seguida de letras y/o números y se permite 1 sólo punto en medio del nombre:

  • estado
  • numero1
  • coordenada.x
  • robot.parado

Listas de datos

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)

  • posiciones:
  • robots.amigos:

Datos de sólo lectura

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.

  • _miestado
  • _temperatura
  • _movimientos:

Iniciar sesión en Cloud

Para usar el cloud siempre debes usar 2 instrucciones juntas:

Iniciar el Wifi

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 )

Inicio de sesión

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

Comprobar si estamos conectados

Puede resultarte útil saber si has conseguido conectarte al Cloud de forma satisfactoria

Almacenar datos

En mi Robot

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
*/

En otros Robots

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');

Leer datos

De mi Robot

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();

De otro Robot

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();

Contar valores de una lista

De mi Robot

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:");

De otro Robot

Obtiene el número de elementos de una lista de otro robot conociendo su ID

int respuestas = cloud::count('HJ89YU78', 'respuestas:');

Leer datos de una Lista

De mi Robot

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 )    );
}

De otro Robot

//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 datos

De un dato o de una lista completa

Eliminar la variable y todos sus datos. Sólo podremos eliminar datos de nuestro robot

cloud::delData("temperatura");
cloud::delData("respuestas:");

De una posición concreta en una lista

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);

Controla tu robot vía Web

Acciones

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

Ver el estado de una acción

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)

TUTORIALES

Hola Cloud

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.

Leyendo datos


#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!");
	}
}

Crear listas de datos

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
*/

Leer datos de una lista


#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 )   );
	}
}


Conectarnos con otros robots del Cloud

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