Un robot con su Raspberry Pi


En efecto , con un mando Wiimote de Nintendo (en Amazon  cuesta menos de 16€ ), junto con  su  Raspberry Pi 2 Model B  puede  crear su propio «robot mayordomo» eso si usando  una plataforma que le de movilidad al conjunto .

2016-03-27_18h23_36     2016-03-27_23h10_21

Evidentemente la forma del robot quedara sujeta a sus gustos, a los materiales que emplee y por supuesto a su creatividad ,pero el resultado siempre sera muy interesante sobre todo por el alto grado de personalización al que puede llegar  . Lógicamente, ademas  de la Raspberry  y el mando wiimote , también necesitará comprar un chasis  con las dos orugas motorizadas   para que el robot pueda moverse.

Aunque el resultado probablemente no este a la altura de los grandes desarrollos de   robots industriales , al hacer este robot aprenderá cómo utilizar Bluetooth para comunicarse con su Raspberry Pi, cómo conectar una tarjeta de robótica básica usando los pines GPIO ( y controlarlos con Python)  ,así como también cómo utilizar una Nintendo Wiimote para controlar su Raspberry Pi ( también usando  Python)

Para empezar ,siempre es bueno descomponer proyectos complejos en otros mas  pequeños proyectos  , ya que esto  hace que sea mucho más fácil de resolverlos. Es decir: si hace este proyecto de una sola vez y no funciona , ¿cómo saber si es la tarjeta del motor , los motores , la conexión Bluetooth o el programa el culpable del fallo?

Como referencia ,los pasos a  seguir en la construcción podrían ser los siguientes:

  1. Configurar y probar la tarjeta del motor y los motores
  2. Configurar y probar la conexión Bluetooth
  3. Configurar y probar el Wiimote
  4. Escribir el programa definitivo
  5. Construir el cuerpo de su robot  usando su creatividad

Montaje inicial

Para poder controlar los motores del grupo motor , necesitará un escudo  que tendrá que intercalar entre los pines del GPIO  de su Raspberry   y los cables de alimentación de los dos motores DC. Para ello simplemente  ponga la placa  encima de  los pines del GPIO de su Raspberry PI cuidando el orden . Debería  tener un aspecto como este:

 

2016-03-26_19h38_28

Un vez conectado el escudo, el siguiente paso es conectar los cables  de uno de los  motores al conector azul marcado J3 / M1 , utilizando cables pelados en cada extremo o cables  usando un conector macho – macho . Obviamente  también debe conectar el otro motor para J2 / M2 .

El Rover 5 utiliza 2 motores independientes , cada uno con un codificador de cuadratura óptica y la caja de cambios . El montaje de la caja de cambios completo puede hacerse girar a incrementos de 5 grados para diferentes configuraciones de despacho . Puede incluso sustituir a las orugas de los tanques con ruedas tradicionales .

Esto no es una base de robot endeble :con un peso de más de 2,5 libras sin baterías , esta base es resistente y puede pasar por encima de casi  todo.

No importa  en qué forma conecta cada motor individual en este punto (si es un motor gira en la dirección equivocada entonces simplemente puede intercambiar los cables de otro ). Ademas en este punto también puede conectar la alimentación  que simplemente puede  proporcionarse por un portapilas de 6 pilas AAA de 1,5V , el cual  proporcionara los 6V necesarios para el escudo Ahora tiene una batería conectada a los motores del robot a través de la tarjeta de control del motor .

Atención :tenga cuidado con la polaridad: el cable rojo del portapilas debe conectarlo al terminal +VCC   del escudo  y el cable negativo al terminal GND o 0V del escudo.

El aspecto final debería ser algo similar al siguiente :

2016-03-27_00h27_54

El ultimo paso es conectar  la Raspberry  Pi al escudo  con lo que ya tendríamos conectados   todos los elementos del  robot.

Ahora  lo siguiente que toca es dotar del sw necesarios en la  Raspberry Pi para controlar cómo y cuándo los motores reciben energía .


Prueba de motores

La placa  Ryanteck se controla mediante los pines  GPIO  17 , 18, 22 y 23 de la Raspberry  Pi . Si establece el pin  17 a nivel alto  , un motor va hacia la derecha , mientras que si se activa a nivel alto el pin 18 , el  motor  gira en sentido antihorario . Los  pines  22 y 23 dan  control del motor 2 funcionando de un modo idéntico a los pines 17 y 18 pero con el motor 2.

Con todo el conjunto conectado a  su Raspberry Pi  vamos a escribir un pequeño script en Python para probar  el  funcionamiento de la base motorizada .

En la línea de comandos  escriba  test_motors.py tipo nano .

Ahora escriba en el siguiente programa:

import RPi.GPIO as io
import time

io.setmode(io.BCM)
pins = [17, 18, 22, 23]
for pin in pins:
  io.setup(pin, io.output)

#Los motores de prueba  giran a  un lado y luego al otro con retardo de 0,5 segundos .
for pin in pins:
  print ('Testing pin ' + str(pin))
  io.output(pin, 1)
  time.sleep(0.5)
  io.output(pin, 0)

Presione Ctrl-O y luego Enter para guardar . Pulse CTRL – X para salir de la línea de comandos . Ahora ejecute el programa de prueba : sudo test_motors.py pyton .

Si la prueba no se ejecuta como se esperaba , compruebe todas las conexiones así como la batería y vuelva a intentarlo .

 

Prueba  bluetooth

Otro modulo que usted necesitará es un adaptador Bluetooth . Teniendo conectividad Bluetooth se puede utilizar para transferir archivos y para la comunicación , pero  también le permite utilizar dispositivos de juego como en la Nintendo Wiimote y el controlador de PS3 para aplicaciones de  robótica .No todos los adaptadores funcionan en el Pi ; no se puede recomendar específicamente cualquier Inateck pero el adaptador de Bluetooth 4.0 que estamos utilizando funciona muy bien.

Para la prueba  del mando de  la Nintendo es habitual usar  el dongle Inateck Bluetooth Adaptador USB 4.0 con LED | Dongle inalámbrico con inactivo inteligente y Wake-Up | Compatible con Windows XP / Vista / 7/8 / 8.1 | Soporte EDR y A2DP estéreo | Broadcom Chipset – Negro , el cual usa un chip Broadcom 20702, el chip Bluetooth más reconocida en Europa y América; Nivel 1, la distancia de transmisión de hasta 10 m; Velocidad de transmisión máxima de 3 M / S.Ademes.Este dongle emite una señal de Bluetooth 4.0, es estable y fuerte,  usa modo dúplex  y  tiene un  bajo consumo de energía.Ademas cuenta con  ahorro de energía a través de los modos inteligentes de sueño y despertar, evita la interferencia de monitoreo CRC de 24 bits y usa  modulación de frecuencia automática contra superposiciones

2016-03-27_18h41_12

 

Enchufe el adaptador Bluetooth en el puerto USB de la Raspberry Pi , arránquela y   conectese  a esta  .

Procedeamos a instalar el sw necesario,para ello desde línea de comandos debería instalar el driver usando el siguiente comando:

>sudo apt-get install –no-install-recommends bluetooth

Una vez instalado el software ,debería ver el bluetooth está en marcha,para ello escriba:

>sudo service bluetooth status

Deberia dar el mensaje bluetooth is running.

Si no es así, reinicie la Raspberry Pi   y vuelva a intentarlo .

Para probar el dongle  escriba

>hcitool  scan

Cualquier dispositivo detectable  por  Bluetooth en la zona aparecerá en la pantalla ; lo cual indicará  que ahora está listo para usar Bluetooth en el Raspberry Pi . Si no se ve nada , asegúrese de que usted tiene un teléfono u otro dispositivo compatible con Bluetooth cerca del Pi y pruebe a  detectarlos.

 

Prueba de conexión  del mando  .

Antes de continuar,  debe tener Bluetooth instalado y funcionando en su Raspberry Pi  ( habiendo seguido todos los pasos  anteriores ).  El hecho de que el servicio de Bluetooth esté en funcionamiento y pueda ver otros dispositivos no significa que el dongle bluetooth sea capaz de ver el Wiimote( de hecho también puede tener problemas si está utilizando un mando Wiimote diferente del oficial).Así que no hay reglas seguras y rápidas; puede que tenga que probar diferentes configuraciones si tiene problemas.

Escriba desde linea de comandos:

>hcitool scan

Ahora pulse los botones ‘1’ y ‘2’ en su Wiimote al mismo tiempo:los LEDs azules deben parpadear en el Wiimote y debería ver algo como esto en la pantalla:

Scanning … 00:1E:02:8A:CD:A1 Nintendo RVL-CNT-01

También puede ver otros dispositivos Bluetooth que están dentro del alcance, pero obviamente  puede hacer caso omiso de ellos.

Si todo ha ido correctaemmnte ,ahora se sabe que la función Bluetooth está funcionando y  puede comunicar el Wiimote con su Raspberry Pi.

El último paso es asegurarse de que podemos hablar con el Wiimote usando Python.,para lo cual debe instalar el módulo CWIID ,con objeto de que desde Python puede hablar con el Wiimote. 

>sudo apt-get install python-cwiid.

 

El siguiente programa probará que el Wiimote puede comunicarse con el Raspberry Pi. En la línea de comandos teclee

>nano wii_remote_1.py

Luego escriba o copie y pegue el código siguiente:

#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# wii_remote_1.py
# Connect a Nintendo Wii Remote via Bluetooth
# and  read the button states in Python.
#
# Project URL :
# http://www.raspberrypi-spy.co.uk/?p=1101
#
# Author : Matt Hawkins
# Date   : 30/01/2013

# -----------------------
# Import required Python libraries
# -----------------------
import cwiid
import time
#import RPi.GPIO as io

#io.setmode(io.BCM)
#pins = (2,3,4,17)
#for i in pins:
#  io.setup(i,io.OUT)

button_delay = 0.1

print 'Press 1 + 2 on your Wii Remote now ...'
time.sleep(1)

# Connect to the Wii Remote. If it times out
# then quit.
try:
  wii=cwiid.Wiimote()
except RuntimeError:
  print "Error opening wiimote connection"
  quit()

print 'Wii Remote connected...\n'
print 'Press some buttons!\n'
print 'Press PLUS and MINUS together to disconnect and quit.\n'

wii.rpt_mode = cwiid.RPT_BTN
 
while True:

  buttons = wii.state['buttons']

  # If Plus and Minus buttons pressed
  # together then rumble and quit.
  if (buttons - cwiid.BTN_PLUS - cwiid.BTN_MINUS == 0):  
    print '\nClosing connection ...'
    wii.rumble = 1
    time.sleep(1)
    wii.rumble = 0
    exit(wii)  
  
  # Check if other buttons are pressed by
  # doing a bitwise AND of the buttons number
  # and the predefined constant for that button.
  if (buttons & cwiid.BTN_LEFT):
    print 'Left pressed'
    time.sleep(button_delay)         
    #io.output(2, True)

  if(buttons & cwiid.BTN_RIGHT):
    print 'Right pressed'
    time.sleep(button_delay)          
    #io.output(3, True)

  if (buttons & cwiid.BTN_UP):
    print 'Up pressed'        
    time.sleep(button_delay)          
    #io.output(4, True)
    
  if (buttons & cwiid.BTN_DOWN):
    print 'Down pressed'      
    time.sleep(button_delay)  
    #io.output(17, True)
    
  if (buttons & cwiid.BTN_1):
    print 'Button 1 pressed'
    time.sleep(button_delay)          

  if (buttons & cwiid.BTN_2):
    print 'Button 2 pressed'
    time.sleep(button_delay)          

  if (buttons & cwiid.BTN_A):
    print 'Button A pressed'
    time.sleep(button_delay)          
    #for i in pins:
      #io.output(i, False)    

  if (buttons & cwiid.BTN_B):
    print 'Button B pressed'
    time.sleep(button_delay)          

  if (buttons & cwiid.BTN_HOME):
    print 'Home Button pressed'
    time.sleep(button_delay)           
    
  if (buttons & cwiid.BTN_MINUS):
    print 'Minus Button pressed'
    time.sleep(button_delay)   
    
  if (buttons & cwiid.BTN_PLUS):
    print 'Plus Button pressed'
    time.sleep(button_delay)

 

 

Cuando haya terminado: Presione Ctrl-O y luego Enter para guardar Presione CTRL-x para salir de la línea de comandos .

Ahora ejecute el programa de prueba tecleando

>sudo python wii_remote_1.py

Siga las instrucciones y debería ver la pantalla respuestas a todas sus pulsaciones de botón  así que ha llegado hasta aquí, ya sólo le queda probar todo el conjunto.

 

A continuación  vamos  a ver  el programa principal que le permitirá controlar el vehículo con el Wiimote

En la línea de comandos escriba lo siguiente:

>nano robot.py

Ahora puede  escribir  , o cortar y pegar, el siguiente  programa .

#!/usr/bin/python
#based on Matt Hawkins' code http://www.raspberrypi-spy.co.uk/?p=1101
#Re written by Ryan Walmsley

import cwiid
import time
import RPi.GPIO as io

io.setmode(io.BCM)
#Motor 1 is designed to be the motors on the left, Motor 2 is designed to be on the right
#If one motor is in the wrong direction you can swap the pins around to save you having to re-wrire the robot.
m1a = 17 #Motor 1 Forwards
m1b = 18 #Motor 1 Backwards
m2a = 22 #Motor 2 Forwards
m2b = 23 #Motor 2 Backwards
pins = (m1a,m1b,m2a,m2b)
for i in pins:
  io.setup(i,io.OUT)

for i in pins:
  io.output(i,False)

button_delay = 0.1

print 'Press 1 + 2 on your Wii Remote now ...'
time.sleep(1)

# Try to connect to the Wiimote & quit if not found
try:
  wii=cwiid.Wiimote()
except RuntimeError:
  print "Can't connect to Wiimote"
  quit()

print 'Wiimote connected'
wii.rpt_mode = cwiid.RPT_BTN
 
while True:
  buttons = wii.state['buttons']
  if (buttons & cwiid.BTN_UP):
    #Forwards
    time.sleep(button_delay)    
    io.output(m1a, True)      
    io.output(m2a, True)
   
  elif (buttons & cwiid.BTN_DOWN):
    time.sleep(button_delay)  
    io.output(m1b, True)
    io.output(m2b, True)
  
  elif (buttons & cwiid.BTN_LEFT):
    time.sleep(button_delay)         
    io.output(m1a, True)
    io.output(m2b, True)
   
  elif(buttons & cwiid.BTN_RIGHT):
    time.sleep(button_delay)          
    io.output(m1b, True)
    io.output(m2a, True)
  
  else:
    io.output(m1a, False)
    io.output(m1b, False)
    io.output(m2a, False)
    io.output(m2b, False)
   

    
#press button A to stop all motors
  if (buttons & cwiid.BTN_A):
    time.sleep(button_delay)          
    for i in pins:
      io.output(i, False)    

 

Cuando haya terminado : Presione Ctrl-O y luego Enter para guardar pulse CTRL – x para salir de la línea de comandos .

Ahora ejecute el programa :

>sudo python robot.py.

Si todo funciona correctamente usted debería ser capaz de controlar su vehículo con el Wiimote . Si no es así , vuelve a atrás y compruebe que cada paso está funcionando correctamente ..

Ahora usted ya tiene un robot con control remoto , que es completamente funcional  , pero obviamente acaba de empezar , pues tendrá que pensar en el contenedor  donde lo va a ubicar  ( tendrá que usar su imaginación ) así  como si le va a añadir algún accesorio más :por ejemplo sonido, algún tipo de luz, sensores ultrasonidos , etc

 

2016-03-27_23h10_21

Por cierto  el código completo esta disponible en su pagina oficial de Github

 

Fuente  aqui  

Tutorial IoT con Fiware


Gracias a  Telefónica R&D Chile( Telefónica I + D Chile) nos  ofrecen   un interesantisimo tutorial  intruductorio sobre  IOT   concretamente usando la plataforma Orion Context Broker  (FIWARE ) con Arduino aunque puede extrapolarse  a otras placas de IoT ( por ejemplo Netduino ,Intel Edison o Raspberry Pi)

 

Un punto interesante para analizar el IoT (Internet of Things  )es el uso de las normas. Para el caso concreto vamos a revisar más adelante en la sección Orion Context Broker, una adaptación basada en la especificación OMA (Open Mobile Alliance) NGSI (Next Generation Service Interface).  En términos simples, esto significa que las peticiones HTTP o acciones que deben utilizarse son los que están actualmente empleados por los navegadores tales como GET, POST, DELETE y PUT para interactuar con el contexto Broker.

Configuración de hardware

Los componentes que vamos a utilizar son:

  •  Una placa Arduino (hay muchas alternativas, pero una versión con WiFi es esencial)
  •  Una placa protoboard
  •  LEDs
  •  Cables de conexión
  • Un router o un dispositivo celular que pueden ofrecer Wi-Fi (tethering)

Como se ha comentado en este blog , Arduino tiene su propia interfaz de desarrollo utilizando el lenguaje C ++ y se integra una serie de librerías para facilitar la  aplicación de prototipos. Esto no quiere decir que Arduino no se puede utilizar en entornos industriales o de alta demanda. Sin embargo, en estos escenarios cuestiones de costos por lo general conducen a la utilización de componentes ad-hoc.

Al observar la estructura, se puede reconocer algunos pines digitales en la parte superior y analógicas pines en la parte inferior (idéntico  a muchas otras placas como Netduino). Además, en la parte inferior, también  hay una  fila de conectores para alimentar al propia  placa u otras que se conecten. Por supuesto la  placa   también  tiene un conector a una toma de corriente y un conector mini USB, entre otros componentes, dependiendo de la versión de la tarjeta y si se utiliza add-on «escudos» o no.

Si conectamos un LED a la placa podemos hacerlo directamente, conectando el ánodo LED de pin digital 13 y el cátodo del   led  al pin de   GND como se ve aquí.  Hay que señalar que es interesante conectar  entre el pin digital 13 con una resistencia de 220 ohmios para proteger el diodo led , pero estrictamente podría omitirse dicha resistencia.

led.jpg

 

Por último, este mismo esquema se puede usar para agregar más LEDs o sensores de nuestra placa Arduino para que pueda añadir más funcionalidades. Para ello hay que recordar que en un tablero de alimentación corre horizontalmente en los puntos exteriores y vertical en los puntos interiores

 

Arduino, software and communications Arduino, software y comunicaciones

En este ejemplo  vamos a aprender cómo programar la placa Arduino con el fin de activar el LED se instaló en la segunda parte y se apaga. A continuación, vamos a utilizar una conexión a Internet con WIFI  en  la placa.

Como requisito previo, hay que ya hemos configurado el software de Arduino según nuestro sistema operativo. Además, hay que tener USB de la placa conectada a nuestro ordenador para cargar el programa a nuestra placa (  consulte  aquí para ver cómo instalar el software en una placa Intel Edison).

Debe onviamente seleccionar la versión del software que corresponde a su sistema operativo.  Una vez que el software está configurado e instalado abrimos nuestra IDE hasta el comienzo de la codificación.

sketc

 

Vamos  a ver  un ejemplo de la IDE Arduino.  Este ejemplo es específicamente para el IDE para los conjuntos de Intel, aunque los conceptos son los mismos. En la segunda fila de menú (donde el icono de comprobación es), encontrará los comandos para compilar y cargar nuestros desarrollos a la placa.   Si examina el código, tenemos dos funciones.  Uno es de configuración, donde las variables se inicializan y el bucle en el que se ejecutan las operaciones según se requiera. En el menú Archivo tenemos los ejemplos de opciones – 01 Básico – Blink. Esto mostrará una nueva ventana con el código necesario para poner a prueba nuestra LED:

/*

Blink Parpadeo

Se enciende un LED durante un segundo, luego se apaga durante un segundo, en repetidas ocasiones.

Este código de ejemplo está en el dominio público.

*/ Pin 13 tiene un LED conectado en la mayoría de las placas Arduino.

// Darle un nombre:

int led = 13;

// La instalación se ejecuta de rutina una vez cuando se presiona RESET:

void setup() { 

// Inicializar el pin digital como salida.

pinMode (led, OUTPUT);

}

// La rutina de bucle se ejecuta una y otra vez para siempre:

void loop() {

digitalWrite(led, HIGH);  //  Enciende el LED (ALTA es el nivel de tensión)

delay(1000);  // Espera un segundo

digitalWrite(led, LOW);  //  Apagar el LED haciendo que la tensión BAJA

delay(1000);  // Espera un segundo

}

El ejemplo que genera Arduino es bastante simple.  En la línea 10 se establece una variable con el número pin correspondiente en la placa . Posteriormente, el pasador la variable se  configura  como salida y se inicializa. Y, en el bucle, el LED se enciende y se apaga separado por un retraso de un segundo .

Antes de cargar el código anterior en la placa , el IDE se debe configurar para que sepa la placa  y qué puerto se  está utilizando:

Select Tools> Board> Intel Edison Seleccione Herramientas> Junta> Intel Edison ( para el caso de una placa Intel Edison)

Select Tools> Port> dev / ttyACM0 Seleccione Herramientas> Puerto> dev / ttyACM0

Ahora bien, si la tarjeta está correctamente conectada al puerto USB, podemos ‘Subir’ el código de la tarjeta (Ctrl + U) y deberíamos ver nuestra LED encendido y apagado de cada segundo.

 

Ahora para usar el wifi, tenemos que trabajar un poco más.  Por suerte, en los ejemplos de Arduino, tenemos una sección de WIFI con diferentes alternativas utilizando las soluciones de redes.  Entre ellos se encuentran los servidores Telnet y clientes, servidores Web y clientes, e incluso un cliente de Twitter.

CONSEJO: En nuestro caso, por motivos de simplicidad, podemos utilizar un cliente Web ya que vamos a enviar solicitudes posteriormente al corredor Orion Contexto utilizando el protocolo HTTP.  Tenga en cuenta que hay mejores soluciones, pero para los propósitos educativos vamos a tratar de minimizar el código tanto como sea posible.

#include <SPI.h>

#include <WiFi.h> >

/ ************************** /

/ * * Configuración de la instalación /

/ ************************ /

char ssid[] = «YourWifiSSID»;//Nombre de la red

char pass[] = «WifiPassword»; //Contraseña de red

char server[] = «130.206.80.47»;  // ORION IP address -> Create in /lab/ // Dirección IP ORION -> Crear en / lab /

int status = WL_IDLE_STATUS; int estado = WL_IDLE_STATUS; // we predefine the status as On but not connected // Nos predefinimos la condición pero no conectada

int led = 13; int LED = 13; // We initialize a variable to assign the pin number to which the led will be connected // Inicializamos una variable para asignar el número de identificación personal al cual se conectará el LED

/**

* Configuración Configuración Arduino

* (Ejecutar una sola vez)

**/

void setup() {

// Inititialization del puerto serie Arduino

Serial.begin(9600);

while (!Serial) {

// Esperar para el puerto serie para conectar. y Necesario para Leonardo solamente

}

// Comprobar que la placa tiene un escudo WiFi

if (WiFi.status() == WL_NO_SHIELD) {

Serial.println(«Wifi shield is not available»);

// No continúe con la instalación, o en otras palabras, se quedan aquí para siempre

while(true);

}

El código completo está disponible en:

https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

FIWARE  y Orion Context Broker

Como se ha discutido anteriormente en este ejemplo, el Broker de Orión define un contexto como un servicio que en base al stándar  OMA NGSI 9/10 puede manejar el envío y recepción de información contextual.  ¿Qué significa esto?  En primer lugar, para manejar un gran número de mensajes de entidades y administrar las actualizaciones, consultas, y también se encargan suscripciones de datos de las entidades. Recordemos que, según la NGSI 9 y 10 estándares, nos ocupamos de las entidades como una abstracción de los nodos físicos o dispositivos utilizados en las soluciones de la IO.

En el ejemplo anterior, hemos hecho una solicitud de actualización a una entidad ya creada.  Pero primero vamos a revisar cómo trabajar con Orión. . Una manera simple de probar el servicio OCB es crear una cuenta en https://account.lab.fiware.org/ y crear una máquina virtual con Orion preconfigurada en la sección de la nube. Alternativamente, el sitio y el acceso GitHub de Orión descargar una máquina virtual para ejecutar en nuestro entorno local

Otra herramienta útil es un cliente REST, pero podemos usar cURL si parece más sencillo. RESTClient es un cliente para Firefox que es bastante fácil de usar.

Los aspectos de configuración de la OCB están fuera del alcance de este tutorial, ya que requeriría demasiados detalles.  En cuanto al Laboratorio fiware, es importante tener en cuenta que fiware proporciona máquinas virtuales en la nube de forma gratuita para probar fiware compontents. Sólo tiene que crear una cuenta para acceder a los servicios. Sólo una advertencia rápida. . A partir de hoy (19-03-2015) y temporalmente, España no tiene recursos disponibles, pero hay otras regiones en las que las máquinas virtuales se pueden crear.

Cuando tengamos las herramientas necesarias, la forma más básica para interactuar con la OCB es:

1. Creando una entidad:Para ello hay que tener en cuenta varios factores.  En primer lugar, la llamada se envía como una solicitud HTTP POST, por ejemplo, http://myhost.com:1026/v1/updateContext.  Con esto queremos decir que estamos ocupando la versión 1 del API con la operación updateContext.

También tenemos que definir varias variables en la cabecera de la solicitud:

Accept: application/json

Content-Type: application/json

X-Auth-Token: [TOKEN AUTHENTICATION]

En cuanto a la generación de tokens, la forma más sencilla es utilizar un script en Python creado por Carlos Ralli en GitHub. Se necesita una cuenta FIWAREy ejecutar el ‘get_token.py  se requiere la escritura’.

Después de configurar el encabezado de la solicitud, configurar el «cuerpo» de la solicitud mediante el siguiente código JSON:

{

«contextElements»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″, «

«attributes»:[

{

«name»:»switch»,

«type»:»bool»,

«value»:»false»

}

]

}

],

«updateAction»:»APPEND»

}

Esta es la estructura de un «contexto Elementos», que es un grupo de entidades con ciertos atributos, tales como, «isPattern» e «id», «tipo». » type »  se refiere a un tipo definido y permite la búsqueda de entidades por un tipo particular. «Id» es un atributo que debe ser único para cada entidad para ejecutar búsquedas en base a este ID. «IsPattern» se explicará más adelante en el punto No. 2.

También puede agregar una serie de atributos de la entidad en la propiedad «atributos», donde cada atributo se define por el «nombre», «tipo» y «valor». Por último, «updateAction» define si vamos a realizar un «añadir» o y «UPDATE».

Si todo va bien, vamos a recibir una respuesta 200 OK desde el servidor y que nos dará los detalles de la entidad creada:

{

«contextResponses» :

{

«contextElement» : {

«type» : «LED»,

«isPattern» : «false»,

«id» : «LED001», «

«attributes» :

{

«name» : «switch»,

«type» : «bool»,

«value» : «»

}

]

},

«statusCode» : { «

«code» : «200»,

«reasonPhrase» : «OK»

}

}

]

}

2. Consultar la entidad: Para consultar una entidad, la operación estándar es ‘queryContext’ que sería http://myhost.com:1026/v1/queryContext.También aplicamos las cabeceras que se describen en el punto No. 1 y el uso post.

El JSON utilizado en el cuerpo de la petición sería la siguiente:

{

«entities»:[

{

«type»:»LED»,

«isPattern»:»false»,

«id»:»LED001″

}

]

}

Aquí es donde puede utilizar «isPattern» en «verdadero» y trabajar bien en el campo «tipo» o el campo «id» con expresiones regulares si queremos ejecutar una búsqueda un poco más compleja. En el ejemplo anterior sólo estamos buscando la misma entidad creada a través de la «id».

También hay una manera más sencilla de hacer la misma consulta utilizando la siguiente solicitud: GET http://myhost.com:1026/v1/contextEntities/LED001 donde LED001 es el «id» de la entidad a buscar.

3. Actualización de la entidad: Esto es idéntico al punto No. 1, pero cambiando el atributo «updateAction» de «añadir» a «UPDATE».

Por último, la integración de todo lo que hemos revisado, seremos capaces de generar una acción desde una página Web sencilla que se puede implementar en un servidor remoto y, de hecho demostrar que el LED de la aplicación se activa de forma remota utilizando la OCB.

Para ello vamos a utilizar el LED001 de reciente creación, estableciendo el atributo «interruptor» de verdadero a falso y viceversa para comprobar la acción.

Nuestra web se vería así:

 

ejemplño

Para ello, el código html, css y js se comparten en:   https://bitbucket.org/tidchile/ecosystem/src/ https://bitbucket.org/tidchile/ecosystem/src/

 

 

 

Fuente    aqui