Translate

martes, 4 de marzo de 2014

Raspberry Pi y Tornado Puerto GPIO

En este tutorial se agrega el control del puerto GPIO al proyecto que integra Arduino y Pic con Raspberry Pi midiendo y controlado variables físicas a través de WebSockets.

Instrucciones en video:



Prueba de Funcionamiento:



Código Fuente en:  /charlesrct/Tornado-RasberryPi

NOTA: Al hacer uso del puerto GPIO, este código solo se puede ejecutar en un Raspberry Pi. Al contrario de los anteriores turoriales, este ejemplo no funciona en Windows.


Primero se debe instalar el módulo GPIO con el comando:


sudo apt-get update
sudo apt-get install python-rpi.gpio

Agregar las siguientes líneas de código al archivo tutotor.py


#libreria para usar el puerto GPIO
import RPi.GPIO as GPIO

#configurando GPIO
#pines por el numero impreso en la tarjeta,numeracion distribucion fisica 
#GPIO.setmode(GPIO.BOARD)    
#pines por el numero canal de las etiquetas.
GPIO.setmode(GPIO.BCM)     

#Configurando el pin de salida
GPIO.setup(11, GPIO.OUT)
GPIO.output(11, False)

#Configurando el pin de entrada
swichtPin = 10

GPIO.setup(swichtPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)

Se importa la librería GPIO y se configura el pin 11 del puerto GPIO como salida y el pin 10 como entrada.

#Interrupcion por hardware
def pinkCall(channel):
    pulsador = Raspberry()
    inputValue = GPIO.input(11)
    
    if(inputValue == True):
        GPIO.output(11, False)
        
        pulsador.notifyCallbacks(0, 'El Led fue apagado por Hardware')

    if(inputValue == False):
        GPIO.output(11, True)
        
        pulsador.notifyCallbacks(1, 'El Led fue encendido por Hardware')

    print('Interrupcion por hardware')


GPIO.add_event_detect(swichtPin, GPIO.RISING, callback=pinkCall, bouncetime=500)

Se configura el pin 10 para que al presionar un pulsador, se produzca una interrupción y llamar la función "pinkCall". Después de disparar este evento, se deben esperar 500 mili segundos para dispararlo de nuevo.

La función "pinkCall" detecta si el Led conectado en el pin 11 se encuentra encendido o apagado, para invertir el estado actual y enviar el mensaje vía WebSockets a todos los clientes conectados a la web.

Las funciones "ledON" y "ledOFF" de la clase "Raspberry" se modifican así:

 def ledON(self):
            #Encendemos el Led conectado en el pin 11
            GPIO.output(11, True)
            self.notifyCallbacks(1, "Led Encendido")

 def ledOFF(self):
            #Apagamos el Led conectado en el pin 11
            GPIO.output(11, False)
            self.notifyCallbacks(0, "Led Apagado")


Al llamar estas funciones desde los botones de la interfaz web, se activa o desactiva el Led conectado al pin 11 del puerto GPIO y se envía un mensaje a vía WebSockets a todos los clientes conectados.

Prueba de funcionamiento.


Actualizar la variable ipDir con la dirección IP, asignada por el router, del Raspberry Pi en el archivo /static/scripts/raspberry.js


Iniciar el servidor web.


Ingresar desde un navegador de internet, no olvidar el puerto.

 

Dar clic en los botones de la interfaz web y presionar el pulsador conectado al Rasberry Pi.


Diagrama del Circuito

(Creado en Fritzing



Resultados

(Clic para ampliar las imágenes)

En el próximo tutorial se conecta Arduino con Raspberry Pi para medir distancia por ultrasonido y mostrar el resultado en tiempo real.

No hay comentarios.:

Publicar un comentario