Raspberry PI orientado a IoT


Bien, ahora se usará una Raspberry PI para poder conectarse con nuestro backend creado anteriormente con Node.js (click aquí) y así poder interactuar con nuestra aplicación de frontend y los dispositivos conectados.

Para mayor agilidad en el taller se conectarán por medio de USB ya que esto no requiere de ninguna configuración ni dispositivos externos.

Conectarse por escritorio remoto

  • Conociendo la IP asignada a la Raspberry presione en su teclado las teclas Windows + R, tener en cuenta que la tecla Windows tiene la bandera de Windows y por lo general está al lado del botón ALT, este comando ejecutará un ventana y allí escribir “mstsc

  • Esto ejecutará el programa de conexión a escritorio remoto de Windows, en el campo de texto escribir la IP de la Raspberry PI (tener en cuenta que debe estar en red local o tener una IP pública asignada)
  • Cuando la conexión sea exitosa aparecerá una pantalla parecida a la siguiente
  • Como usuario se ingresará “pi” y como contraseña “raspberry”, luego de eso podrá visualizar un escritorio parecido al de Windows.
  • En la parte inferior izquierda podrá ver el botón de “inicio”, allí podrá navegar a “Accesories” y “File Manager”,
  • En ese directorio inicial encontrará una carpeta llamada “IoT_ExpertDay” (si no se usa la Raspberry PI usada en el taller presencial tendrá que crear la carpeta), en esta carpeta se trabajará durante todo el taller.
  • Navegar a la carpeta mencionada y crear un archivo vacío llamado “App.py”

Hola Mundo en Python

  • En el archivo creado anteriormente escribir el siguiente código
print "Hola mundo!, esta es mi primera aplicación en Python"
  • Ejecutar un terminal, en el escritorio hay un acceso directo llamado LXTerminal y ejecutar los siguientes comandos
cd /home/pi/IoT_ExpertDay/
sudo python2 App.py

Crear aplicación que se conecta con Node.js

  • Ahora en el código de App.py reemplazar por el siguiente
# -*- coding: utf-8 -*-
from socketIO_client import SocketIO
import json
import serial

device=['/dev/ttyACM0','/dev/ttyACM1','/dev/ttyACM2','/dev/ttyACM3']

# Intenta conectar los 4 arduino
try:
    arduino1 = serial.Serial(device[0], 9600)
except:
    print "Error al conectar Arduino 1"

try:
    arduino2 = serial.Serial(device[1], 9600)
except:
    print "Error al conectar Arduino 2"

try:
    arduino3 = serial.Serial(device[2], 9600)
except:
    print "Error al conectar Arduino 3"

try:
    arduino4 = serial.Serial(device[3], 9600)
except:
    print "Error al conectar Arduino 4"

# Función para notificar que fue conectado exitosamente a Node.js
def Welcome_response(*args):
    print "Conectado exitosamente a Node.js en Microsoft Azure"
    print "El servidor dice: "
    for mensaje in args:
    	mensajeDecodificado = json.loads(mensaje)
    	print mensajeDecodificado['Message']

def led_event(*args):
    for data in args:
        decoded = json.loads(data)
        print "Comando recibido: " + decoded['Command']
        if decoded['Command'] == 'node.led':
            dataValues = json.loads(json.dumps(decoded['Values'][0]))
            if dataValues['on'] == True:
            	if dataValues['duino'] == 1:
                    arduino1.write('1')
                elif dataValues['duino'] == 2:
                    arduino2.write('1')
                elif dataValues['duino'] == 3:
                    arduino3.write('1')
                elif dataValues['duino'] == 4:
                    arduino4.write('1')
            else:
            	if dataValues['duino'] == 1:
                    arduino1.write('0')
                elif dataValues['duino'] == 2:
                    arduino2.write('0')
                elif dataValues['duino'] == 3:
                    arduino3.write('0')
                elif dataValues['duino'] == 4:
                    arduino4.write('0')

socketIO = SocketIO('localhost', 3000)
socketIO.on('Welcome', Welcome_response)
socketIO.on('node_led', led_event)
socketIO.wait()
  • Tener en cuenta que el parámetro “localhost” en SocketIO debe ir la IP pública que nos proporciona la máquina virtual de Microsoft Azure que contiene Node.js, exactamente en la línea 63.
  • Para que funcione la aplicación creada es necesario instalar la siguiente librería de Python https://github.com/invisibleroads/socketIO-client, el cual es un cliente de Socket.io