Sei sulla pagina 1di 11

3/4/2019 3.2.5.

14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

Práctica de laboratorio: interacción con el mundo


físico de Cisco Spark
Topología

Objetivos
Crear un circuito de prototipo
Usar la API de RESTful de Cisco Spark
Crear un “robot” de mensajería simple para interactuar con el mundo físico

Aspectos básicos/situación
En esta práctica de laboratorio aprenderá a crear un "robot" de mensajería simple. El robot de mensajería
detectará los comandos de Cisco Spark y controlará el mundo físico representado por los pines de GPIO de
Raspberry Pi.

Recursos necesarios
PC con acceso a Internet
Conexión a Internet por Wi-Fi o Ethernet con DHCP y sin filtro de tráfico
Raspberry Pi configurado para el acceso a PL-App
Placa de prueba, resistores, LED, cables

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 1/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

Parte 1: Construcción del circuito electrónico

Paso 1: Construya el circuito de prototipo en la placa de prueba.


1. Seleccione 1 resistencia de 330 Ohm (Ω), 1 LED, 1 cable de acoplamiento rojo, 1 cable de
acoplamiento negro del kit básico de Raspberry Pi.
2. Inserte el LED en la placa de prueba. La pata del cátodo se conecta a c13 y la pata del ánodo se
conecta a c14.
3. Inserte el resistor en la placa de prueba en los conectores b9 y b13.

Paso 2: complete el circuito de prototipo conectándolo a Raspberry Pi.


Nota: los pines GPIO en Raspberry Pi son machos. Si está disponible, use cables de acoplamiento macho a
hembra para conectar la placa de prueba a Raspberry Pi. Por otro lado, use el cable plano GPIO, provisto
en el kit básico, para convertir los pines GPIO a conectores femeninos.

1. Conecte un extremo del cable de acoplamiento negro al conector a9 de la placa de prueba y el otro
extremo al pin 9 GPIO físico en Raspberry Pi.
2. Conecte un extremo del cable de acoplamiento rojo al conector a14 de la placa de prueba y el otro
extremo al pin 11 GPIO físico (BCM17) en Raspberry Pi.

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 2/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 3/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

Paso 3: Haga parpadear el LED


1. Importe el módulo de Python RPi.GPIO para interactuar con los pines de GPIO de Raspberry Pi.
2. Configure el esquema de numeración de pines en BCM.
3. Configure el pin con LED para que sea la salida.

En [ ]:

# Import the GPIO modules to control the GPIO pins of the Raspberry Pi
import RPi.GPIO as GPIO
# Set the desired pin numbering scheme:
GPIO.setmode(GPIO.BCM)

# GPIO PIN where the LED is connected


# pin numbering based on the BCM scheme
LEDPin = 17

# Setup the direction of the GPIO pin - either INput or OUTput


GPIO.setup(LEDPin, GPIO.OUT)

1. Ejecute la celda siguiente para verificar que el LED esté parpadeando y que funcione el acceso de
GPIO.

En [ ]:

import time

for i in range(5):
print("ON")
GPIO.output(LEDPin, True)
time.sleep(1)
print("OFF")
GPIO.output(LEDPin, False)
time.sleep(1)

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 4/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

Parte 2: Conexión a una sala de Cisco Spark

Paso 1: Obtenga la clave de token de API de Cisco Spark


La API de RESTful de Cisco Spark autoriza todas las solicitudes con una clave de token. Para obtener la
clave de token asociada con su cuenta, siga estos pasos:

1. Navegue a la Página Web https://developer.ciscospark.com (https://developer.ciscospark.com) y


entre en su cuenta de Spark.
2. Si no tiene una cuenta, por favor cree una (https://web.ciscospark.com/signin).
3. Obtenga la clave de API de Cisco Spark (token de acceso personal)

4. Obtenga más información sobre las API de SPARK en la Guía de referencia rápida de API de Spark
(https://developer.ciscospark.com/quick-reference.html)
5. Ingrese su clave de token en la celda de abajo y ejecútela para definir la variable
sparkAuthorizationKey que se usará para autenticar las solicitudes en los próximos pasos.

En [ ]:

# Define a local variable in Python that will hold our Authentication API KEY:
sparkAuthorizationKey = 'Bearer YjcxZDkxMTItMWFhMy00NjQ1LTxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx';

Nota: El Token de acceso de Cisco Spark vence en 2 años y se inactiva inmediatamente cuando cierra sesión
en developer.ciscospark.com. Si el código devuelve un código de error 401
(https://developer.ciscospark.com/errors.html), puede que necesite crear un nuevo token y modificar el
código para que funcione correctamente.

Paso 2: importe los módulos de Python necesarios


El módulo requests de Python ofrece una biblioteca de HTTP fácil de usar para enviar y recibir mensajes a
servidores web. Dado que los servicios de API de RESTful, como las API de Cisco Spark, se implementan
como pequeños servidores web, se trata de un módulo esencial.

La mayoría de los mensajes que intercambian el cliente de API y el servidor de API tienen un formato
especial. Los más comunes son XML y JSON. La API de Cisco Spark usa JSON para codificar mensajes.
Para trabajar con los datos cifrados de JSON, importe en Python el módulo json.

En [ ]:

import requests
import json
import time

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 5/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

Paso 3: acceda a los terminales de API (salas)


1. Use el siguiente código de Python para acceder al terminal de API rooms. La solicitud HTTP GET
muestra todas las salas de Spark de las que es miembro.
2. El objeto local r tendrá la respuesta.

En [ ]:

# Using the requests library, create a new HTTP GET Request against the Spark AP
I Endpoint for Spark Rooms:
# the local object "r" will hold the returned data:
r = requests.get( "https://api.ciscospark.com/v1/rooms",
headers={'Authorization':sparkAuthorizationKey}
)

# Check if the response from the API call was OK (resp. code 200)
if(r.status_code != 200):
print("Something wrong has happened:")
print("ERROR CODE: {} \nRESPONSE: {}".format(r.status_code, r.text))
assert()

1. Use el siguiente código para ver el contenido de los datos devueltos. Los datos devueltos de la API
de Spark usualmente están formateados con el cifrado JSON. La función json.dumps() genera
una salida de más fácil lectura.

En [ ]:

# See what is in the JSON data:

jsonData = r.json()

print(
json.dumps(
jsonData,
indent=4
)
)

1. Para revisar de manera programática la lista de salas, puede usar el código siguiente:

En [ ]:

rooms = r.json()['items']
for room in rooms:
print ("Room name: '" + room['title'] + "' ID: " + room['id'])

1. Para identificar de manera programática una sala con un nombre específico, puede usar el código
siguiente.

NOTA: no olvide actualizar la variable roomNameToSearch con un nombre de sala válido de su


cuenta de Spark

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 6/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

En [ ]:

# Replace contents of this varialble with a real room name from your Cisco Spark
account
roomNameToSearch = 'Jozef'

# Define a variable that will hold the roomId


roomIdToMessage = None

rooms = r.json()['items']
for room in rooms:
#print "Room name: '" + room['title'] + "' ID: " + room['id']
if(room['title'].find(roomNameToSearch) != -1):
print ("Found rooms with the word " + roomNameToSearch)
print ("Room name: '" + room['title'] + "' ID: " + room['id'])
roomIdToMessage = room['id']
roomTitleToMessage = room['title']
break

if(roomIdToMessage == None):
print("Did not found any room with " + roomNameToSearch + " name in it.")
else:
print("A valid room has been found and this is the room id: " + roomIdToMess
age)

1. Verifique que roomIdToMessage tenga un ID válido de sala:

En [ ]:

print(roomIdToMessage)

Paso 4: acceda a los terminales de API (mensajes)


1. Use el siguiente código de Python para acceder al terminal de API messages. La solicitud HTTP
GET muestra todos los mensajes de la sala especificada en los parámetros GET.
2. El objeto local r tendrá la respuesta.

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 7/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

En [ ]:

# define the mandatory or optional GET parameters for the `messages` API endpoin
t:
getMessagesUrlParameters = {
# mandatory parameter - the room ID
"roomId": roomIdToMessage,
# optional parameter - number of the last messages to return
"max": 8
}

# Using the requests library, create a new HTTP GET Request against the Spark AP
I Endpoint for Spark Messages:
# the local object "r" will hold the returned data:
r = requests.get( "https://api.ciscospark.com/v1/messages",
params=getMessagesUrlParameters,
headers={'Authorization':sparkAuthorizationKey}
)

if(r.status_code != 200):
print("Something wrong has happened:")
print("ERROR CODE: {} \nRESPONSE: {}".format(r.status_code, r.text))
assert()

1. Use el siguiente código para ver el contenido de los datos devueltos. Los datos devueltos de la API
de Spark usualmente están formateados con el cifrado JSON.

En [ ]:

# See what is in the JSON data:

jsonData = r.json()

print(
json.dumps(
jsonData,
indent=4
)
)

1. El código siguiente creará un bucle para buscar en los mensajes hasta identificar un mensaje con
un comando (por ejemplo, mensaje /Turn On o /Turn Off). Una vez detectado dicho mensaje,
el bucle se rompe y se muestra un mensaje informativo.
2. Intente ejecutar la celda de código siguiente. Si usted u otra persona de la sala de Spark anterior
ingresaron el mensaje /Turn On o /Turn Off, lo verán aquí.

NOTA: si no ingresó el mensaje /Turn On o /Turn Off en la sala de Spark antes de este paso,
vuelva a ejecutar la celda de código del Paso 4 para obtener todos los mensajes nuevos de la sala
de Spark.

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 8/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

En [ ]:

messages = jsonData['items']
for message in messages:
print("Message: " + message['text'])
if(message['text'] == '/Turn On'):
messageId = message['id']
print("Found a command message to TURN ON the LED!")
break
if(message['text'] == '/Turn Off'):
messageId = message['id']
print("Found a command message to TURN OFF the LED!")
break

Paso 5: Bucle continuo para mensajes nuevos


1. Para obtener los mensajes nuevos de la sala de Spark de manera continua, un bucle while
ejecuta los comandos anteriores repetidamente.
2. En cada iteración del bucle de while, se buscan mensajes nuevos. Limite la cantidad de mensajes
devueltos a 1 (por ejemplo, mensaje más nuevo)
3. Para procesar solo mensajes nuevos, verifique que el ID del mensaje actual sea igual al de la
iteración anterior.
4. Según el texto del mensaje, controle los pines de GPIO de Raspberry Pi.
5. Para interrumpir el bucle, haga clic en el icono de STOP (parada) junto a la celda.

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 9/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark

En [ ]:

lastMessageId = None

while True:
# the code should not hammer the API service with too many reqeuests in a sh
ort time
# to limit the number of requests in the while loop, begin with a short 1 s
econd delay:
time.sleep(1)
print("Next iteration is starting ...")

# define the mandatory or optional GET parametrs for the `messages` API endp
oint:
getMessagesUrlParameters = {
# mandatory parameter - the room ID
"roomId": roomIdToMessage,
# optional parameter - number of the last messages to return
# only interested in the very last message in the room
# thefore max = 1
"max": 1
}

# Using the requests library, creare a new HTTP GET Request against the Spar
k API Endpoint for Spark Messages:
# the local object "r" will hold the returned data:
r = requests.get( "https://api.ciscospark.com/v1/messages",
params=getMessagesUrlParameters,
headers={'Authorization':sparkAuthorizationKey}
)
if(r.status_code != 200):
print("Something wrong has happened:")
print("ERROR CODE: {} \nRESPONSE: {}".format(r.status_code, r.text))
assert()

# Store the json data from the reply


jsonData = r.json()

# Get the items (array of messages) from the jsonData.


messages = jsonData['items']
# since the request specified max=1, only one message should be returned:
message = messages[0]

# Verify if this is a new message:


if(lastMessageId == message['id']):
#this is the same message as before, no new messages
print("No New Messages.")
else:
# this is a new message, its ID is different from the one in the previou
s iteration
print("New Message: " + message['text'])
# save the message id for the next iteration:
lastMessageId = message['id']
if(message['text'] == '/Turn On'):
messageId = message['id']
print("Found a command message to TURN ON the LED!")
# Turn on the LED:
GPIO.output(LEDPin, True)
#break
if(message['text'] == '/Turn Off'):
https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 10/11
3/4/2019 3.2.5.14 Práctica de laboratorio: interacción con el mundo físico de Cisco Spark
messageId = message['id']
print("Found a command message to TURN OFF the LED!")
# Turn off the LED:
GPIO.output(LEDPin, False)
#break

Reflexión:
Intente actualizar el código y el circuito electrónico para poder controlar el mundo físico y los sensores de
Cisco Spark. En ese caso, podría hacer preguntas como esta en Cisco Spark: “¿Cuál es la temperatura?”.

© 2017 Cisco y/o sus filiales. Todos los derechos reservados. Este documento es información pública
de Cisco.

https://static-course-assets.s3.amazonaws.com/IoTFCT201/es/course/files/3.2.5.14 Lab - Interacting with a physical world from Cisco Spark.html 11/11

Potrebbero piacerti anche