Java en Raspberry Pi
Pi4J
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:
Pines GPIO no exportados y exportados.
Configurar la dirección del pin GPIO
Configurar la detección de borde de pin GPIO
Controlar/escribir estados de pin GPIO
Estado del pin GPIO de pulso
Lectura de stado del pin GPIO
Escuche los cambios de estado del pin GPIO (basado en interrupciones; no sondeo)
Establecer automáticamente los estados de GPIO en la finalización del programa (apagado de GPIO)
Disparadores para la automatización basados en cambios de estado del pin
Envio y recepcion de datos via comunicación serial RS232
Comunicación I2C
Comunicación SPI
Interfaz de proveedor GPIO extensible para agregar capacidad GPIO a través de placas de expansión
Acceda a la información del sistema y la información de red desde la Raspberry Pi
Clases de envoltura para acceso directo a la biblioteca WiringPi desde Java
Instalemoslo--Get and Install:
V1:
curl -sSL https://pi4j.com/install | sudo bash
V2:
curl -sSL https://pi4j.com/v2/install | sudo bash
Dependencias--Dependencies:
sudo apt install -y openjdk-17-jdk
El JAR Pi4j se encuentra en--The Pi4J JAR files are located at:
/opt/pi4j/lib
Los ejemplos están en la carpeta--Examples path:
/opt/pi4j/examples
Podemos listar los ejemplos con--We can list the examples typing:
ls /opt/pi4j/examples
Con el siguiente comando compilamos los 42 ejemplos--We can build the examples with:
sudo /opt/pi4j/examples/build
Para ejecutar algún ejemplo debemos utilizar alguno de estos comandos--The following command syntax can be used to execute the sample projects:
sudo pi4j --run BlinkGpioExample
o--or:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' BlinkGpioExample
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:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ControlGpioExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ControlGpioExample
o
sudo pi4j --run ControlGpioExample
o
./run ControlGpioExample
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:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ListenGpioExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ListenGpioExample
o
sudo pi4j --run ListenGpioExample
o
./run ListenGpioExample
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:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . ShutdownGpioExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' ShutdownGpioExample
o
sudo pi4j --run ShutdownGpioExample
o
./run ShutdownGpioExample
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:
Documentación Java utilizada para configurar disparadores para cambios de estado de los GPIO--Java docs used for Trigger GPIO:
Diagrama--Diagram:
Nos movemos a la carpeta examples--Move to the examples folder:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . TriggerGpioExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' TriggerGpioExample
o
sudo pi4j --run TriggerGpioExample
o
./run TriggerGpioExample
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:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . SerialExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' SerialExample
o
sudo pi4j --run SerialExample
o
./run SerialExample
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:
CURRENT TIME: <Date/Time>
Second Line
Third Line
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:
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:
cd /opt/pi4j/examples
Compilamos desde la Terminal--Compile:
javac -classpath .:classes:/opt/pi4j/lib/'*' -d . SystemInfoExample.java
Ejecutamos--Run:
sudo java -classpath .:classes:/opt/pi4j/lib/'*' SystemInfoExample
o
sudo pi4j --run SystemInfoExample
o
./run SystemInfoExample
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
Hardware soportado--Supported Hardware:
Pi4J V2 with Maven
Install Maven:
sudo apt install maven -y
Check with:
mvn -v
Clone pi4j-example-minimal:
git clone https://github.com/Pi4J/pi4j-example-minimal.git
cd pi4j-example-minimal
mvn clean package
Now:
cd target/distribution
ls -l
Run:
sudo ./run.sh
Pi4J With JBang:
curl -Ls https://sh.jbang.dev | bash -s - app setup
jbang --version
Get examples from GitHub:
cd
git clone https://github.com/Pi4J/pi4j-jbang
cd pi4j-jbang
Shows how to use dependencies, can be executed on any computer.
Run with:
cd
cd pi4j-jbang
sudo `which jbang` JsonParsing.java
Basic example with Pi4J and a LED (DigitalOutput) and button (DigitalInput).
Run with:
cd
cd pi4j-jbang
sudo `which jbang` Pi4JMinimalExample.java
Use a Pixelblaze to control a LED strip.
Run with:
cd
cd pi4j-jbang
sudo `which jbang` Pi4JPixelblazeOutputExpander.java
Reading temperature, humidity and pressure from a BME280 sensor via I2C.
Run with:
cd
cd pi4j-jbang
sudo `which jbang` Pi4JTempHumPressI2C.java
Reading temperature, humidity and pressure from a BME280 sensor via SPI.
Run with:
cd
cd pi4j-jbang
sudo `which jbang` Pi4JTempHumPressSpi.java
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)