Java en Raspberry Pi

Pi4J

Jan 15, 2024

Pi4J

Este proyecto está destinado a proporcionar una API de I/O orientada a objetos ,amigable, y bibliotecas de implementación para que los programadores de Java accedan a las capacidades de I/O completas de la plataforma Raspberry Pi. Este proyecto resume la integración nativa de bajo nivel y la supervisión de interrupciones para permitir que los programadores de Java se concentren en implementar su lógica de negocios de aplicaciones.

This project is destinated to give an API of I/O objects oriented, friendly, with implemented libraries for the Java's programmer can work with complete I/O capabilities of Raspberry Pi plaatform. This resume the native integration to low-level and supervised interrupts for let the Java programmer focus on business logic implementation of his applications. 

Caracteristicas--Features:

Instalemoslo--Get and Install:

V1:

V2:

Dependencias--Dependencies:

El  JAR Pi4j se encuentra en--The Pi4J JAR files are located at:

Los ejemplos están en la carpeta--Examples path:

Podemos listar los ejemplos con--We can list the examples typing:

Con el siguiente comando compilamos los 42 ejemplos--We can build the examples with:

Para ejecutar algún ejemplo debemos utilizar alguno de estos comandos--The following command syntax can be used to execute the sample projects:

o--or:

o--or:

./run BlinkGpioExample

Pin numbering:

Control de pin GPIO con Pi4J--Manage GPIO with Pi4J:

Código fuente--Source Code:

Documentación Java utilizada para controlar el estado de los pines GPIO--Java docs used for GPIO handling:

Diagrama--Diagram:

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

o

o

Veremos como nuestro led se enciende y apaga cada 5 segundos--We can see our LED blinking every 5 seconds:

Auditor de estado de pin GPIO con Pi4J--Listen GPIO State:

El siguiente ejemplo demuestra como configurar un auditor de cambios de estado del pin GPIO. Esta implementación de escucha es mucho más eficiente que el sondeo y la consulta constante del estado del pin GPIO. La implementación del auditor se basa en interrupciones de hardware GPIO, no en encuestas de estado.

In this example setup an auditor to listen GPIO states. This listen implementation is more efficient that a constant consult of a GPIO, is based on GPIO hardware interrupts.

Código fuente--Source Code:

Documentación Java utilizada para escuchar los cambios de estado de los pines GPIO:

Java docs used for Listen GPIO state:

Diagrama--Diagram:

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

o

o

En la Terminal veremos--On the Terminal we saw:

Cuando presionamos el botón--When we press the button:

--> GPIO PIN STATE CHANGE: 4 = HIGH

Cuando no presionemos el botón--When we don't press the button:

--> GPIO PIN STATE CHANGE: 4 = LOW

Apagado GPIO con Pi4J--Shutdown GPIO:

Demostración de como configurar el comportamiento de apagado de los pines al finalizar la aplicación.

Demo to show the shutdown behaviour of GPIO when the app is closed.

Código fuente--Source Code:

Documentación Java utilizada para realizar apagado automatizado de los pines GPIO--Java docs used for Shutdown GPIO:

Diagrama--Diagram:

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

      o

      o

Salida--Output:

Veremos el LED encenderse y apagarse cada 10 segundos hasta que presionemos Ctrl+C.

We can ssaw the LED turn on and turn off every 10 secs till we press Ctrl+C to stop the execution.

Disparadores GPIO con Pi4J--Trigger GPIO:

El siguiente ejemplo muestra cómo configurar los disparadores GPIO. Los disparadores GPIO escuchan los cambios de estado del pin y luego realizan alguna acción en un pin GPIO alternativo o realizan una devolución de llamada a un método especificado por el usuario. Pi4J incluye varias clases de implementación de activador predefinidas integradas o puede crear su propio activador implementando la interfaz GpioTrigger. Los disparadores se basan en la implementación del oyente GPIO y se basan en interrupciones de hardware GPIO y no en encuestas de estado.

In this example we see how to setup Trigger GPIO,  they will  listen the change state of GPIO then make an action in an alterrnative GPIO or make a callback to an specific method by the user. Pi4J include some implemented classes of integrated predefined activators or you can create your owns with Trigger GPIO.  

Código fuente--Source Code:

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

o

o

Salida--Output:

El LED conectado al pin GPIO 21 se encenderá cuando el botón sea presionado y apagado al dejar de presionarlo.

The LED connected to GPIO 21 will turn on when the button is pressed and turn off when isn't pressed.

El LED conectado al pin GPIO 22 se encenderá cuando el botón sea presionado y apagado al dejar de presionarlo.

The LED connected to GPIO 22 will turn on when the button is pressed and turn off when isn't pressed.

El LED conectado al pin GPIO 23 se encenderá por un segundo cuando el botón sea presionado al dejar de presionarlo no sucederá nada.

The LED connected to GPIO 23 will turn on by one second when the button is pressed and when isn't pressed nothing happen.

Se verá el siguiente mensaje en la terminal cada vez que el botón sea presionado y se deje de presionar:

We see the next message on the Terminal every time the button is pressed and released:

--> GPIO TRIGGER CALLBACK RECEIVED

Comunicación Serial con Pi4J--Serial Port RS232:

El siguiente ejemplo demuestra como transmitir y recibir datos usando el puerto serie.

In the next sample we can see how to transmit and receive data using a seria port through rs232:

Guía completa para construir e instalar un puerto serie rs232--How to build and install a rs232 serial port

http://www.savagehomeautomation.com/projects/raspberry-pi-installing-a-rs232-serial-port.html)

Prerequisitos--Pre-Requirements:

De forma predeterminada, el puerto serie en la Raspberry Pi está configurado como un puerto de consola para comunicarse con el shell del sistema operativo Linux. Si desea usar el puerto serie en un programa de software, debe deshabilitar el sistema operativo para que no use este puerto. Consulte este artículo de blog de Clayton Smith para obtener instrucciones paso a paso sobre cómo deshabilitar la consola del sistema operativo para este puerto:

By default, the serial port on Raspberry Pi  is configured like a console por to communicate with the Shell of Linux. If you wish use the serial port in a software application, we need to disable this port so the OS will not use it, and can make used by the software application. See this article by Clayton Smith for better instructions:

Código fuente--Source Code:

Documentación Java utilizada para comunicar via los puertos serie--Java docs used for RS232 Serial:

Diagrama--Diagram:

Articulo completo sobre construcción e instalación un puerto serie RS232--Complete guide to build and install RS232 Serial Port

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

o

o

Salida--Output:

Para probar este programa, necesitará conectar su computadora a través de un cable en serie y usar una herramienta de comunicaciones en serie como Hyperterminal o Indigo Terminal Emulator, Putty. Establezca una conexión usando la velocidad en baudios 34800 con la paridad establecida en NINGUNO, los bits de datos en 8 y los bits de parada en 1. (38400, N, 8,1) Una vez conectado, debería ver los siguientes datos en el software del terminal:

To test this program, we ned connect a PC though a Serial Cable connector and use apps like Hyperterminal or Indigo Terminal Emulator, Putty. Establish a connection to Speed:34800 baud with Flow Control:NONE, data bits: 8, Stop bibts: 1(38400, N, 8, 1). Once connected, we  should see the next message on the Terminall app we use:

Estos datos se verán cada 1 segundo. This data will refresh every second.

Información del sistema con Pi4J--System Info:

El siguiente ejemplo muestra cómo usar Pi4J para acceder a la información del sistema y la red desde la Raspberry Pi.

In this example we learn how to see system info about our Raspberry Pi OS.

Código fuente--Source Code:

SystemInfoExample.java

Documentación Java utilizada para acceder al sistema y a información de red--Java docs used for System:

Nos movemos a la carpeta examples--Move to the examples folder:

Compilamos desde la Terminal--Compile:

Ejecutamos--Run:

o

o

Salida--Output:

Ejemplo de salida--Example of output:

Serial Number : 0000000043xxxxxx

CPU Revision : 7

CPU Architecture : 7

CPU Part : 0xb76

MIPS : 697.95

Processor : ARMv6-compatible processor rev 7 (v6l)

Hardware Revision : 0002

Hostname : raspberrypi

IP Addresses : 10.1.1.194

IP Addresses : 10.1.1.161

FQDN : raspberrypi.mydomain.local

Nameserver : 10.1.1.1

Pi4J V2 with Maven

Install Maven:

Check with:

Clone pi4j-example-minimal:

Now:

Run:

Pi4J With JBang:

Get examples from GitHub:

Basic Java example.

Run with:

Shows how to use dependencies, can be executed on any computer.

Run with:

Basic example with Pi4J and a LED (DigitalOutput) and button (DigitalInput).

Run with:

Use a Pixelblaze to control a LED strip.

Run with:

Reading temperature, humidity and pressure from a BME280 sensor via I2C.

Run with:

Reading temperature, humidity and pressure from a BME280 sensor via SPI.

Run with:

Pi4j with JBang

Pi4J OS

Support for building 100% pure Java applications using Pi4J, JavaFX

Can be used for all kind of Pi4J- , or JavaFX-projects

Use Pi4J Component Catalogue and corresponding GitHub project to experiment with popular hardware components attached to your RaspPi.

Use RaspiFX template project to start your own JavaFX/Pi4J or plain Pi4J project

All of Pi4J-Basic-OS

Support for CrowPi

Comes with lirc preinstalled to run the IR receiver component

Use CrowPi template project to start your CrowPi experiments


All of Pi4J-Basic-OS

Support for Picade Console and Picade X HAT USB-C

Use link:[FXGL template project] to start your Picade project (available soon)