Ejemplo encender y apagar diodo LED con la Raspberry Pi en Java

Publicado por pico.dev el , actualizado el .
blog-stack gnu-linux java planeta-codigo planeta-linux programacion
Comentarios

Raspberry Pi
Java

El primer ejemplo que haré de un programa Java que usa los pines GPIO para realizar algo con el kit de inicialización a la electrónica con la Raspberry Pi consiste en un pequeño programa Java que hace parpadear un diodo LED. La librería Diozero ofrece a los programas Java el acceso a los pines GPIO de la diferentes versiones de la Raspberry Pi desde la 1 (rev 1 y rev 2) pasando por los modelos B+, 2 y 3. Otra librería que se puede usar con el lenguaje de programación Java es Pi4J aunque personalmente Diozero me ha gustado más por ser de más alto nivel.

Algunas de las características que ofrece la librería Diozero son:

Una de las primeras cosas a conocer es como se numeran los pines en la Raspberry Pi ya que hay varias nomenclaturas (header, wiringPi y Broadcom) y que nomenclatura utiliza la librería Diozero. También deberemos tener en cuenta el modelo de la Raspberry Pi que poseamos ya que según el modelo hay pequeñas diferencias en algunos pines. Además si usamos una placa de extensión para pruebas sin sodadura como la wiringPi deberemos identificarlos por su nombre. Yo que poseo una de las primeras Raspberry Pi (la 1, rev1) el correspondiente su esquema de pines Raspberry Pi 1 (rev. 1) es el del enlace. En ese esquema se define que el pin número 12 según el conteo del header corresponde a GPIO 18 según la nomenclatura Broadcom y la librería Diozero y al GPIO 1 en la librería Pi4J y en la placa de extensión wiringPi.

Placas modelos Raspberry Pi 1 B y 3 B
Breadboard y placa extesión GPIO wiringPi de 26 pines y 40 pines
Esquema del cableado

Como uso la placa de extensión wiringPi para conectar los pines de la Raspberry Pi a otra placa para hacer pruebas sin soldadura también conocidas como breadboard resultará que en el programa Java al usar Diozero uso la nomenclatura Broadcom para identificar los pines pero al conectar los cables en la placa de pruebas uso la nomenclatura de wiringPi.

Para el ejemplo utilizaré la placa de extensión sin soldadura, una resistencia de 200 ohmios (dadas sus bandas de colores rojo, negro, marrón y dorado) y un diodo LED además de un par de cables macho-macho para realizar las conexiones electrónicas entre el GPIO 18 (según la nomenclatura de la librería Diozero y Broadcom, 12 según la nomenclatura del header y 1 según la de wiringPi) y la resistencia además de entre el diodo y la línea de tierra. Los diodos LED poseen una orientación y hay que conectar la resistencia con el polo positivo del diodo LED, el polo positivo del diodo LED identifica porque es la patita larga y el negativo con tierra es la patita corta. Si realizamos la conexión al revés solo pasará que el diodo no se enciende pero no lo estropeará, la resistencia si es necesaria para no hacer que pase por el diodo una intensidad que lo estropee como se explica en ¿Qué resistencia ooner a un LED?.

Diodo blanco y resistencia de 200 ohmios

Las resistencias poseen cuatro bandas de colores que indican el valor en ohmios de esa resistencia, la tabla de colores es el siguiente:

Código de colores de las resistencias

El programa Java para hacer parpadear el diodo LED con la librería Diozero con el proveedor pigpio. El ejemplo consiste en activar y apagar el pin sucesivamente en un bucle y usar el método Thread.sleep para que pase unos segundos entre uno y otro y nos de tiempo a ver el encendido y apagado. El nada complejo programa Java para controlar el diodo y un vídeo de su funcionamiento están a continuación.

En un artículo anterior comento como disponer de un entorno para desarrollar, desplegar las librerías jar en la Raspberry Pi y como ejecutar los ejemplos desde la línea de comandos usando una combinación de herramientas de SSH, rsync y Ansible.

El código fuente completo del ejemplo puedes descargarlo del repositorio de ejemplos de Blog Bitix alojado en GitHub y probarlo en tu equipo ejecutando el comando ./gradlew executePinBlink.