Archivo de la etiqueta: Raspberry Pi

Raspberry y Arduino: un tándem perfecto

@cmdearcos
Grupo TIECs

 

Cada vez somos más los que utilizamos para diferentes soluciones y proyectos Arduino y Raspberry Pi. Hace unos días un antiguo compañero se puso en contacto conmigo para que le ayudara a iniciarse en este mundillo porque entendía, después de haber leído algunas cosas sobre estos entornos, que podría utilizar estas herramientas como solución en un problema. Le mande un correo con varios links que he convertido en artículo y que espero pueda ayudar a los que se introducen en este campo.

La plataforma Arduino es uno de los productos de hardware de código abierto más populares que han llegado al mercado. Consta de un una tecnología hardware de código abierto, un lenguaje de programación y un entorno de desarrollo.

Con poco conocimiento en electrónica (algunos habíamos pedido mucha habilidad con el paso de los años) se pueden desarrollar proyectos muy interesantes y ampliar funcionalidad gracias a los escudos (shields). Estos escudos son elementos hardware que amplían la funcionalidad de la placa Arduino.

La placa Arduino no dispone de un sistema operativo.

En cambio la placa Raspberry Pi es un ordenador como tal, con todo el potencial de un sistema operativo (Linux). Y, ¿qué pasa si combinamos una Raspbarry con Arduino?. Que se nos abre un mundo nuevo para abordar nuevos proyectos, como bien había deducido mi antiguo compañero.

Para poder utilizar los escudos de Arduino con la Raspberry Pi necesitamos el “raspberry pi to arduino shields connection bridge”. Aquí os dejo información de la placa.

¿Cómo instalar las librerías ArduPi para poder utilizar los escudos Arduinos con la Raspberry Pi?.

Lo primero que debemos hacer es bajar la librería. En el tutorial de la placa que os he dejado antes esta la última versión de la librería (1.5 en el momento de escribir este artículo). Para bajarse la librería a la Raspberry Pi podéis ejecutar el siguiente comando: “wget www.cooking-hacks.com/skin/frontend/
default/cooking/images/catalog/documentation/
raspberry_arduino_shield/arduPi_1-5.tar.gz
”.

Una vez tenemos el fichero en la Raspberry Pi desempaquetamos el fichero: “tar xzvf arduPi_1-5.tar.gz”.

Después de desempaquetar la librería veréis que esta solo tiene 3 ficheros: arduPi.cpp, arduPi.h y arduPi_template.cpp. Los dos primeros ficheros son la librería propiamente dicha, mientras que el último fichero es una plantilla para realizar los programas en c++ para utilizar la librería para acceder a los escudos arduinos. Para tener la librería debéis de compilarla: “g++ arduPi.cpp -o arduPi.o”.

Ahora es el momento de hacer un programa. Tenéis varios ejemplos en la página WEB de Arduino que podéis utilizar como ejemplo. Si utilizáis el ejemplo del parpadeo de un LED y llamáis al fichero blink.cpp (utilizando la plantilla arduPi_template.cpp) la compilación del programa en Raspberry sería: “g++ -lrt -lpthread blink.cpp arduPi.o -o blink”.

Ya solo queda ejecutar el programa: “sudo ./blink”.

No es objetivo de este artículo entrar en la programación sino ayudar a los programadores a acceder rápidamente a la información básica para que puedan empezar. Espero que os ayude a los que empezáis con Raspberry Pi.

 

@cmdearcos
Grupo TIECs

Bus I2C de Raspberry Pi II

@cmdearcos
Grupo TIECs

Empezaré este artículo intentando contestar a una pregunta que me habéis hecho llegar durante estos días: ¿Qué relación tiene la programación en C y el Rasperry PI con la factura eléctrica y las medidas de eficiencia energética?.

Las Tecnologías de la Información, Energía y Comunicaciones tienen dos aspectos básicos:

  • Tanto las TICs como la Energía son materias transversales a todos los sectores. Una solución TIEC tendrá en cuenta el gasto energético tanto de la solución como del resto de los sistemas que interactúen con la solución para conseguir un sistema que cumpla con los objetivos de diseño y que para ello consuma la menor cantidad de energía posible (eficiencia en todos los sentidos).
  • Todas las medidas de eficiencia energética necesitan de las TIC para su control y fiscalización y poder corregir errores en caso de producirse desviaciones de consumo no previstas. No se puede entender la eficiencia energética sin las TIC.

Dicho esto, un Raspberry Pi (RPi) gasta 2W. ¿Veis ahora la relación?. Si una misma aplicación (solución TIC) la podemos hacer “correr” en un RPi tenemos una solución TIEC.

Este artículo quiere ampliar la entrada que hice hace algunos días sobre la configuración del bus I2C. Una vez que tenemos nuestra RPi configurada y con un esclavo conectado a nuestro bus es el momento de comunicarse con dicho esclavo a través de un programa en C.

Todo programa que vaya a utilizar el bus I2C deberá incluir el fichero de cabecera wiringPiI2C.h y a la hora de “lincar” el programa la librería lwiringPi.

Esta librería tiene las siguientes funciones:

int wiringPiI2CSetup (int devId)

Esta función nos devuelve un “file descriptor” que utilizaremos para comunicarnos con el esclavo y que necesitaremos en el resto de funciones. devld es la dirección del esclavo que podemos sacar o de la documentación del mismo o al ejectutar el comando i2cdetect como explicamos en el artículo anterior.

add = 0x39;

fd = wiringPiI2CSetup (add);

Esta función devuelve -1 si no puede abrir las comunicaciones o el descriptor de fichero si todo ha ido correctamente.

Una vez que tenemos abierta las comunicaciones solo podemos hacer dos cosas: leer datos de los esclavos y escribir datos en los algunos registros del esclavos.

int wiringPiI2CRead (int fd)

Esta es la función básica de lectura. No todos los esclavos permiten esta función.

int wiringPiI2CWrite (int fd, int data)

Esta es la función básica para escribir un dato en un esclavo. data es el dato que se quiere escribir en el esclavo. No se especifica ningún registro del dispositivo y no todos los esclavos permiten esta función.

También es posible leer el valor de registros de los dispositivos. El valor de dichos registros y el dato que devuelve (especialmente su tamaño) deben venir especificados en la documentación del esclavo. Las funciones que lo posibilitan en casa caso son:

int wiringPiI2CReadReg8 (int fd, int reg)

int wiringPiI2CReadReg16 (int fd, int reg)

donde reg es la dirección del registro.

Por último también podemos escribir datos en un registro concreto, por ejemplo, para configurar el funcionamiento del esclavo. Al igual que ocurría con las de lectura tenemos dos funciones según el registro necesite 1 o 2 bytes. Las funciones son las siguientes:

int wiringPiI2CWriteReg8 (int fd, int reg, int data)

int wiringPiI2CWriteReg16 (int fd, int reg, int data)

La dirección de los registros son diferentes en cada esclavo y deben venir especificadas en la documentación para poder comunicarse con él.

Con estas 7 funciones podemos controlar y comunicarnos con un esclavo a través del bus I2C. A modo de ejemplo os dejo la documentación de un adaptador serie/I2C de un Nuchuck “de la Wii”, cuyo ejemplo en python podéis ver en esta entrada. En C habría que realizar el “mismo” programa pero con las funciones que os he comentado en este artículo.

Todo un nuevo mundo de posibilidad se abre a nuestra RPi con este bus. Ahora a disfrutar!!!.

@cmdearcos
Grupo TIECs

Bus I2C de Raspberry Pi I

@cmdearcos
Grupo TIECs

¿Qué es el bus I2C?. Empezaremos diciendo que I2C significa “Inter Integrated Circuits”.

Este bus fue desarrollado por la empresa Philips Semiconductors (ahora nxp semiconductors) a principios de los 80´s. Aquí os dejo las especificaciones del bus y el manual de usuario de fecha de 9 de octubre de 2012.

Este bus tiene una topología maestro-esclavo. En este caso el maestro es nuestro Raspberry pi (y los esclavos una multitud de dispositivos y sensores que podéis conseguir en el mercado). A continuación podéis ver un esquema del bus.

 

i2c_diagram

Las transferencias de datos se llevan a cabo mediante la línea serie de datos SDA. La línea SCL lleva la señal de reloj que sincroniza los datos de la línea SDA.

El dispositivo maestro (microcontrolador, en nuestro caso Raspberry pi) es quien siempre tiene la iniciativa de la comunicación. El maestro genera la señal de reloj y controla cuando se transmiten o reciben los datos.

Puede haber varios esclavos en la red I2C, pero el maestro solo se comunica con uno a la vez con un protocolo de pregunta/respuesta. Para poder localizar a cada dispositivo es necesario que cada uno tenga una dirección única dentro del bus.

En terminología I2C los datos se organizan en transferencias. Las transferencias comienzan con una señal de START y termina con otra de STOP. Los datos tienen una longitud de 1 byte y terminan con bit de ACK (o NACK). A continuación podéis ver una transferencia en la siguiente figura:

trama ack

Una condición START es una transición de Alto a Bajo en la línea SDA cuando SCL está en Alto. Después de Start el bus se considera ocupado.

Una condición STOP es una transición de Bajo a Alto en la línea SDA mientras SCL está en Alto. Después de Stop las dos líneas están en Alto y el bus se considera libre.

Siendo una comunicación serie donde cada dato por la línea SDA esrá sincronizado con el reloj, es este último quien marca la velocidad de transmisión. Una velocidad de 100 kbits/s implica que cada bit se transmite en 1s/100k = 10µs. Estos datos se detallan en el Estándar I2C y también suelen ir indicados en los datasheets de los dispositivos I2C.

El estándar del bus I2C soporta cuatro modos de operación:

  • Standard Mode, con una velocidad de hasta 100 kbit/s.
  • Fast mode, con una velocidad de hasta 400 kbit/s.
  • Fast mode plus, con una velocidad de hasta 1 Mbit/s.
  • High-speed mode, con una velocidad de hasta 3.4 Mbit/s.

Ahora pasamos a configurar nuestro Raspberry para poder programar aplicaciones donde se comuniquen diferentes dispositivos.

¿Dónde se encuentra el bus I2C en nuestra Raspberry?. Se encuentra en nuestra en el pin 3 (SDA) y el pin 5 (SCL).

Para poder acceder desde un programa en C es necesario instalar la librería wiringPi.

wiringPi se mantiene bajo GIT, por ello, si no está instalado es necesario instalarlo. Si este fuera el caso, lo podéis instalar con el siguiente comando:

sudo apt-get install git-core

Si este comando diera error es aconsejable actualizar el Raspbian a la última versión disponible. Para ello ejecutad:

sudo apt-get update

sudo apt-get upgrade

Una vez instalado GIT es necesario descargarse la librería wiringPi:

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

Este comando creará el directorio en el directorio actual llamado wiringPi donde se encuentra la librería. Para poder utilizarla es necesario “construirla”:

cd wiringPi

./build

Una vez ejecutado el script de construcción podemos comprobar que se ha instalado adecuadamente con los siguientes comandos:

gpio -v

gpio readall

Una vez instalada la librería debemos instar las i2c-tools:

apt-get install i2c-tools

Para poder acceder a la librería en un primer momento podemos ejecutar el siguiente comando:

gpio load i2c

En el caso de los que los dispositivos esclavos lo permitieran se puede poner la velocidad del bus a 400 kbps de la siguiente forma:

gpio load i2c 400

Para que se cargue el modulo i2c una vez que arranque el sistema es necesario incluir los módulos i2c-bcm2708 y i2c-dev en el fichero /etc/modules y por otro lado comentar las entradas con un # del fichero /etc/modprobe.d/raspi_blacklist.conf:

  • blacklist spi-bcm2708
  • blacklist i2c-bcm2708

Una vez cargados los modulos de I2C se podrá ejecutar el siguiente comando donde nos muestra la dirección del dispositivo conectado a nuestra bus (si es que tenemos alguno):

  • i2cdetect -y 0 (para la Rev 1)
  • i2cdetect -y 1 (para la Rev 2)

Aquí os dejo la salida de mi Raspberry donde tengo conectado un esclavo con dirección 0x39.

Ahora ya tenéis vuestra Raspberry preparado para empezar a utilizar el bus I2C en vuestros programas.

@cmdearcos
Grupo TIECs

Instalar Raspberry pi desde windows

@cmdearcos
Grupo TIECs

Después de tantos años trabajando con él, todavía no me he encontrado con mucha gente que diga aquello que decía la niña de Parque Jurasico en 1993 (cuando yo empecé a utilizarlo): “Unix, lo conozco”.

Por desgracia no tengo un Unix en casa, si no un Linux (Linux is not Unix), pero me apaño.

Este artículo quiere ser una pequeña introducción al mundo Raspberry pi aunque ya hace algunas semanas escribí algo sobre este tema.

¿Qué sistema operativo tiene un Raspberry pi?. El sistema operativo de un Raspberry pi se llama Raspbian y, al igual que pasa con los Android, son Linux (en el caso de Raspbian es Debian).

Podéis descargaros el Raspbian de la siguiente dirección.

Y ahora viene el problema que alguno me ha planteado. ¿Necesito saber Linux para utilizar un Raspberry?. Como usuario no, al igual que ocurre con el Android, porque tienen un interface de usuario. ¿Cuántos usuarios de Windows conocen Windows?. Proporcionalmente, muy pocos.

Si por el contrario vas a instalar la Raspberry y a configurarlo es muy “conveniente” que sepas Linux.

El siguiente problema, cuando os vais a lanzar al mundo Raspbian (un entorno Linux Debian) es que me preguntáis si para instalar la Raspberry en una tarjeta SD que compráis en la tienda del barrio necesitáis tener un Linux (porque si no estaís metidos en el universo Linux no tenéis un Linux en casa). La respuesta es no. A continuación os indicó como instalar el Raspbian en una tarjeta SD desde un Windows.

El primer paso es descargaros desde la dirección que os he dado antes la versión de Raspbian que deseéis instalar. Una vez tengáis el zip en vuestro Windows hay que extraer el fichero img. Este fichero es una imagen del sistema operativo Raspbian.

La tarjeta SD tiene que tener formato FAT 32. Aunque podéis formatear vuestra tarjera con las herramientas de vuestro Windows, aquí os dejo la dirección de una aplicación para formatear tarjetas SD.

Ahora el problema es grabar la imagen en vuestra tarjeta SD. Con el programa Win32 Disk Imager podéis realizar la copiar la imagen del sistema operativo en la tarjeta SD.

Ojo, seleccionar correctamente en “Devices” la unidad donde se encuentra la tarjeta SD!!!!.

Una vez grabado, ya podéis arrancar vuestra Raspberry (con la tarjeta SD insertada, por supuesto). Y ¿cómo entro?.

Si tienes conectado una pantalla, un teclado y un ratón podrás entrar en tu Raspberry con:

  • Usuario: pi
  • Contraseña:  raspberry.

Si no tienes conectada una pantalla, un teclado y un ratón debes conectarte vía SSH al dispositivo. Puedes saber la IP en las tablas DHCP de tu router (el dispositivo se llama raspberrypi). Como estas desde un Windows y necesitas un cliente SSH, puedes descargarte el programa PuTTY para poder conectarte a tu Raspberry.

A partir de aquí a jugar con tu equipo de solo 5W de potencia.

Espero que os haya servido esta introducción básica.

@cmdearcos
Grupo TIECs

Sistemas empotrados: Raspberry pi una solución

@cmdearcos
Grupo TIECs

 

Antes del boom de las .com poca gente en España hablaba de sistemas empotrados, aunque a finales de los 90 ya se hablaba mucho de Linux y empezabamos a conocer sus versiones para sistemas empotrados, al menos en los entornos más técnicos (universidad).

Mi primera experiencia con sistemas empotrados fue en un proyecto para la Armada Española, donde la electrónica era propietaria, al igual que los sistemas operativos (en realidad librerías con funcionalidades básicas) y los entornos de desarrollo. Mirando hacia atrás vemos que se ha evolucionado con este tipo de sistemas y ahora hablamos de Arduino, hardware libre y Raspberry pi, todo un ordenador que se puede encontrar por 25,00 €.

¿Para qué queremos un sistema empotrado?. Un sistema empotrado es un sistema que sirve para realizar unas pocas funciones dedicadas, a diferencia de un ordenador que es un sistema de propósito general. Actualmente hay muchos sistemas de control y gestión de la eficiencia energética que tienen sistema hardware de propósito general, que encarecen el producto final y del que no se aprovecha más del 20 o el 30% de su potencialidad. Todos estos sistemas son susceptibles de mejorarse con sistemas empotrados al menos en dos líneas diferentes:

  • Disminución del coste de la solución final.
  • Menos consumo eléctrico de los dispositivos (el tamaño hardware es acorde a los usos). Estos sistemas suelen estar encendidos 24×7 por lo que un menor consumo supone un ahorro importante.

Raspberry pi es una herramienta que permite desarrollos potentes con un coste mínimo para proyectos de todo tipo, incluidos proyectos TIECs. Esta placa consume como máximo 5W (1A/5V) y dispone de toda la funcionalidad de un sistema operativo Linux. Aquí os dejo una quick-start para aquellos que no conocen este “nuevo” ordenador y quieren ampliar información.

Uno de los problemas actuales de los proyectos TIECs es el elevado coste de algunas soluciones hardware del mercado. En estos momentos, junto con AICE, estoy desarrollando una solución domótica basada en Raspberry pi para comunidades de vecinos.

Me consta que ideas para desarrollar nuevos productos y servicios en este tipo de herramientas existen. Personalmente tengo diferentes ideas para distintos sectores que por falta de inversión no he podido desarrollar. Actualmente estamos utilizando estas herramientas como soluciones low cost para la integración de sistemas, lo que nos ha permitido adquirir el Know how suficiente para proponer productos y servicios a la espera de que la mejora económica permita al usuario final adquirirlo.

En próximas entradas ampliaremos información sobre Arduino, Raspberry pi y las nuevas herramientas que vayan apareciendo.

 

@cmdearcos
Grupo TIECs