Manejo de puertos en la RaspBerry Pi


GPIO (General Purpose Input/Output) es un puerto accesible por un conector  de 26  pines que sirve a la Raspberry Pi para comunicarse con dispositivos externos. Del puerto GPIO  algunos pines se pueden configurar como entradas o como salidas digitales.

Como el lector habrá comprobado , en efecto ,Raspberry  NO  Pi incluye ningun puerto analógico tanto  de entrada o de salida   como suelen disponer otras placas como Arduino  o Netduino

También incorpora pins de masa y alimentación de 5V y 3,3V, y pins de comunicación Serial, I2C y SPI pre-configurados.

Estos pins trabajan a un voltaje de 3,3V y, al contrario que un Arduino, los pins GPIO de la Raspberry Pi no tienen ninguna protección de circuitería, por lo que hay que ir con muchisimo  cuidado a la hora de conectar dispositivos a estos pins.
Lo que haremos a continuación será controlar un led que estará conectado a un pin del puerto GPIO de la Raspberry Pi de tres maneras distintas: a través del terminal, a través de un script Python y a través de la librería WiringPi.

Hay 2 sistemas de numeración de los 26   pines del GPIO: BCM y BOARD:

  • El sistema BCM usa el número de pin GPIO correspondiente. En nuestro caso usamos el GPIO4, por lo tanto ponemos el número 4.
  • El sistema BOARD la numeración se basa en el orden de los pins de arriba a abajo de la placa. En esta imagen se aprecia mejor la diferencia entre los dos sistemas:

Conectaremos un led con una resistencia de 220 ohms en serie entre el pin 4 y una masa del puerto GPIO. El esquema de conexión es  bastante simple  (  incluso se puede obviar la resistencia) bastando conectar entre el pin GPIO4 y  cualquier masa  un led

Controlar GPIO a través del terminal

Primero, vamos a controlar el puerto GPIO desde un terminal directamente a través de directorios. Consiste en exportar los pins de los directorios del puerto GPIO y controlarlos a través de comandos. Para esto nos tendremos que identificar como usuario root a través del siguiente comando:

sudo -i

Seguidamente, tenemos que exportar el pin que queremos controlar (en nuestro caso el número 4):

echo 4 > /sys/class/gpio/export

Indicamos si queremos que sea un pin de entrada (in) o salida (out):

echo out > /sys/class/gpio/gpio4/direction          

Finalmente, ponemos la salida a nivel alto para encender el led:

echo 1 > /sys/class/gpio/gpio4/value

Para volver a apagar el led, ponemos la salida del pin a nivel bajo:

echo 0 > /sys/class/gpio/gpio4/value

Una vez hemos terminado, tenemos que eliminar la conexión con el pin GPIO:

echo 4 > /sys/class/gpio/unexport

 

Controlar GPIO a través de un script Python

Para poder controlar el puerto GPIO a través de Python, primero tendremos que descargarnos una librería para Python con este comando:

sudo apt-get install python-dev

Luego, instalamos el modulo RPi.GPIO con el siguiente comando:

sudo apt-get install python-rpi.gpio

Después, creamos un archivo Python:

sudo nano led.py

Y escribimos el siguiente código para hacer parpadear el led:

import RPi.GPIO as GPIO #Libreria Python GPIO
import time #Libreria Time
GPIO.setmode(GPIO.BCM) #Establecemos el sisetma de numeracion de pins BCM
GPIO.setup(4, GPIO.OUT) #Ponemos el Pin GPIO4 como salida
while True:
    print"ON"
    GPIO.output(4, GPIO.HIGH)
    time.sleep(1)
    print"OFF"
    GPIO.output(4, GPIO.LOW)
    time.sleep(1)
GPIO.cleanup() #Reiniciar configuracion pins GPIO

 

 

 

Para guardar el script, pulsamos CTRL+X, luego S e INTRO. Finalmente ejecutamos el script Python escribiendo este comando:

sudo python led.py

El led irá parpadeando y en el terminal indicará el estado del led ON/OFF. Para salir del programa, pulsamos CTRL+C.

 

Controlar GPIO a través de la librería WiringPi

WiringPi es una librería para la Raspberry Pi creada por Gordon Henderson para acceder y usar el puerto GPIO a través de lenguaje C. De esta manera, programar los pins GPIO es muy parecido a programar un Arduino.  Esta librería soporta lectura y escritura analógica a través de módulos externos (recordemos que los pins GPIO no tienen entradas analógicas).  Esta librería tiene su propia numeración de los pins GPIO:

En su página web se encuentra más información sobre la librería.

http://wiringpi.com/

Para instalar la librería en la Raspberry Pi se debe descargar a través de GIT. Si aún no tenemos instalado GIT en la Raspberry Pi, escribimos el siguiente comando:

sudo apt-get install git-core

Ahora, decargamos WiringPi:

git clone git://git.drogon.net/wiringPi

I luego: 

cd wiringPi

git pull origin

E instalamos:

cd wiringPi

./build

Una vez instalada la librería, creamos un archivo:

sudo nano led.c

Escribimos el siguiente código:

#include //Importamos la libreria WiringPi
int main()
{
    wiringPiSetup () ;
    pinMode (7, OUTPUT); //GPIO4 corresponde al pin 7 de WiringPi
    for (;;)
    {
        digitalWrite (7, HIGH);
        delay (500);
        digitalWrite (7,  LOW);
        delay (500);
    }
}

 

Para guardar pulsamos CTRL+X, luego S e INTRO. Ahora tenemos que compilar el código:

gcc -Wall -o led led.c -lwiringPi

I lo ejecutamos:

sudo ./led

Para salir del programa, pulsamos CTRL+C.

Sin duda  manejar los puertos digitales nos servirá para futuros proyectos donde queramos conectar dispositivos externos en la Raspberry Pi, pero usar  cshell para controlar nuestra Raspberry P nos puede servir para comprobar funcionalidades, pero  hay un método mucho mas potente  y flexible que además nos permite  controlar esta placa desde Internet  desde una app sin tener que instalar nada de forma manual en la RP,  si le interesa probar  mire este otro post  donde veremos el potente entorno de Cayenne  

 

 

Servidor web con Arduino


Arduino al igual que  otras placas  pude usarse como servidor web alojando en el  una simple página web,para lo cual Arduino debe poderse conectar a la red LAN (Local Area Network) con tarjetas Ethernet, ya bien con  escudos Arduino o bien  conectándolo  por medio de cables , permitiendo así poder  ejecutar programas de comunicación de red en Arduino, por ejemplo un pequeño servidor web.

Ambas tarjetas que vemos en la imagen superior   se basan en el conector RJ45 de HR911105A HanRun y controlador ENC28J60 10BASE-T Ethernet de Microchip . Las tarjetas se controlaban mediante Peripheral Interface serie (SPI).

Ethernet-Shield para Arduino Nano

Este escudo Ethernet tiene un regulador de tensión interno en la placa  para convertir 5 V a 3,3 V – 3,3 V con el  circuito ENC28J60 . Opcionalmente también este escudo se puede conectar a Arduino mediante cables con clavijas siguientes: 5V, GND, D10, D11, D12, D13

Detalles de clavijas de conexión

Tarjeta de Ethernet conectado con cables (sin escudo para  Arduino)

Esta tarjeta tiene que ser alimentada por 3.3V (del pin de Arduino o al adaptador de alimentación de 3,3 V). La tarjeta se conecta con los pines  siguientes:

Arduino Nano tarjeta Ethernet
3.3V VCC
GND GND
D10 CS
D11 SI
D12 SO
D13 SCK

Configuración de un servidor web en Arduino

Hay varias bibliotecas que se pueden conectar a la red de Arduino. Algunos de ellos dan más características (por ejemplo, soporte de DHCP) y mas estabilidad, pero también necesitan más esfuerzos para aprender  a usarlas y hacer el programa compilado más grande.

Muy fácil de usar para empezar es la biblioteca «ETHER_28J60» Ethernet por Simon Monk ,la cual esta concebida  como un contenedor de la biblioteca «etherShield» Nuelectronics para simplificar el trabajo con él.

Instalar bibliotecas ETHER_28J60 y etherShield

Después de instalar las bibliotecas – reiniciar el IDE Arduino, seleccione el punto de menú Archivo >> >> Ejemplos ETHER_28J60 >> HelloWorld

El sketch es corto y bastante claro. Sólo pueden necesitar  las  siguientes líneas para personalizar a cada uso particular:

  • uint8_t MAC estática [6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
  • IP estática uint8_t [4] = {192, 168, 1, 15};

IP es  la dirección IP de un dispositivo de red – en este caso las direcciones de una placa Arduino conectado a una red a través de una tarjeta Ethernet.

MAC – es la dirección MAC  que se puede dejar como esta si no hay otros dispositivos con la misma dirección dentro de la red.

Ambas direcciones (IP y MAC)  deben ser únicas dentro de la red (por ejemplo, red local detrás del router de red doméstica).

Suba el skech ya explicada   en su placa de Arduino, y conecte  la tarjeta Ethernet a un router mediante un cable de red.

Compruebe si funciona Arduino (LED de alimentación está encendido), el LED en el conector Ethernet está encendido (LED segundo en el conector puede parpadear), el router está encendido y el LED está activado para el puerto al que la tarjeta Ethernet está conectado.

La biblioteca «EtherShield» desde este repositorio (sugerido para ser utilizado antes) utiliza la dirección IP estática – cuando la dirección necesita ser configurado en un router de forma manual.

La  bibioteca»EtherShield» biblioteca desde este repositorio, además, cuenta con el apoyo de DHCP ( Dynamic Host Configuration Protocol ) al servidor DHCP (por lo general existente en el router) asigna una dirección IP a dispositivos de red automáticamente.

Ahora  ya puede abrir  un navegador web y escriba la dirección http:// 192.168.1.15 , es decir la dirección IP que hayamos definido  (o la dirección indicada en el croquis y configurado en el router como se muestra en la instrucción anterior), pulse la tecla Enter  y  una página web con «Hello World» se carga desde Arduino.

Asimismo también puede probar con la url http://arduino/  desde la barra de dirección del nombre:la  misma página web se cargara desde Arduino

En algunos casos que no funcione  comprobar si Arduino está conectado a una fuente de energía (por ejemplo, a USB), los LED señalen la actividad (reiniciar  Arduino – que debe comenzar a parpadear por un tiempo), y compruebe los cables  pies aunque algunos de ellos se vean  bien, puede que en realidad no conecten por los contactos.

 

 

 

Fuente  aqui