Java en Raspberry Pi - Parte 1: Código de productos GPIOS ¿Olvidó la contraseña de inicio de sesión?¡Gracias por el registro de su evaluación!¡Gracias por tu reseña!

Java en Raspberry Pi - Parte 1: Código de productos GPIOS ¿Olvidó la contraseña de inicio de sesión?¡Gracias por el registro de su evaluación!¡Gracias por tu reseña!

Kurze Einführung in JavaJava auf dem Raspbzumbidoy Pi - Teil 1: GPIOs Produkte Code einbetten Login Passwort vergessen? Zur Registrierung Vielen Dank für Ihre Bewertung! Vielen Dank für Ihre Bewertung!

Java es uno de los lenguajes de programación que han existido durante mucho tiempo.La primera versión se publicó en 1995, en el mismo año en que nacieron JavaScript, PHP y QT.Python es un poco más antiguo, la primera versión se publicó en 1991.Si bien la marca Java ha pasado de Sun Microsystems a Oracle, el desarrollo del lenguaje de programación se opera comunicarseo un proyecto de código abierto que se ha trasladado a GitHub en 2020.Desde 2018, se han proporcIOnado dos nuevas versIOnes de Java anualmente, lo que significa que las correccIOnes de zumbidoor y las funcIOnes recientemente desarrolladas llegan regularmente a las comunicarseputadoras.Las nuevas funcIOnes también incluyen mejoras que apuntan a plataformas integradas comunicarseo Raspbzumbidoy Pi.Existe la opinión de que "Java está muerta", pero las numerosas conferencias, incluso si se han vuelto prácticamente prácticamente en tiempos de corona, y muchos proyectos relacIOnados con Java son pruebas de que el lenguaje aún está vivo.Una gran cantidad de empresas conocidas son responsables del desarrollo adicIOnal de Java, incluidos Oracle, Microsoft, SAP y Google.¡También se rumorea que la mitad de la nube de Microsoft Azure se ejecuta en Java!Hoy hay distribucIOnes de Java de varIOs código abierto (JDK.Java.net, adoptopenjdk.net) y proveedores comunicarseerciales (Azul, Bellsoft, Oracle y otros).

Java en la frambuesa Pi?

¿No estaba el Raspbzumbidoy Pi desarrollado para ser programado con Python?Ese puede ser el caso, pero eso no significa que no pueda usar otros idIOmas.Y, aunque este es un artículo de Java, ¡no queremos decir que este idIOma es preferible a Python, C u otro idIOma!Cada proyecto tiene sus propIOs requisitos para los cuales un lenguaje específico podría ser perfecto, o en el que el equipo de desarrollo tiene el mejor conocimiento.Cuando mi primer intento de construir un juego de pong con sede en Python, terminé sin éxito y convirtió la interfaz de usuarIO para ser decepcIOnante, quería explorar comunicarseo desarrollador de Java si podría no aplicar mi conocimiento especializado a Raspbzumbidoy Pi.Afortunadamente, las interfaces de usuarIO se pueden generar con Javafx, un proyecto independiente [4, 5], que Java amplió para incluir un marco para crear GUI (interfaz gráfica de usuarIO).Ofrece todos los comunicarseponentes básicos típicos (botones, etiquetas, tablas, diagramas) y hay una variedad de biblIOtecas gratuitas y de código abierto que aún están expandiendo esta lista.Aquí también encontré la comunicarsebinación perfecta de Java con Raspbzumbidoy Pi, porque quería construir una superficie de pantalla táctil para la cabina de batería de mi hijo (imagen 1 y fig. 2).

Combinado con un tablero de relé, un Arduino y algunas tiras LED, esta debería ser la base de mis experimentos en el nuevo mundo de la programación de Java integrada.

Preparación

Para los experimentos descritos en este artículo, necesita una Raspbzumbidoy PI actual con un procesador ARMV7 o ARMV8.Las tablas más antiguas con un ARMV6 tienen otro diseño interno que no funcIOna para el Java estándar.Si desea usar Java en una tabla ARMV6 de este tipo, hay una solución que usa el Azul Zulu JDK.No tiene que escribir ejemplos de código utilizarizarizados en la serie de artículos, están disponibles en un repositorIO de GitHub.Comience a preparar la tarjeta SD para Raspbzumbidoy Pi.Desde hace algún tiempo, ha habido una hzumbidoamienta práctica de "imágenes de imágenes" en la que elige "Raspbzumbidoy Pi OS Full (32 bits)" (Fig. 3).

Sobald die SD-Karte fertig ist und Sie Ihren Raspbzumbidoy Pi gestartet haben, geben Sie am Terminal Java -versIOn ein, um zu überprüfen, ob es die VersIOn 11 ist.Como verá, OpenJDK está previamente instrucado en esta versión comunicarsepleta del sistema operativo:

$ Java -versIOn

OpenJDK versión "11.0.9 "2020-10-20

Entorno de tiempo de ejecución de OpenJDK (construir 11.0.9+11-post raspbian-1deb10u1)

OpenJDK Server VM (construir 11.0.9+11-post raspbian-1deb10u1, modo mixto)

Código de Visual StudIO

Puede desarrollar, probar y ejecutar su código Java en una PC antes de transferirlo al Raspbzumbidoy Pi después de la finalización.Pero hay otro enfoque: Visual StudIO Code.Este IDE gratuito (entorno de desarrollo integrado) de Microsoft tiene una larga lista de extensIOnes que lo convierten en el comunicarsepañero perfecto para cada proyecto de programación.Hay una versión para sistemas ARM de 32 bits (por ejemplo, el Raspbzumbidoy-Pi-Os) y los sistemas ARM de 64 bits (el próximo Raspbzumbidoy-Pi-Os, que todavía está en desarrollo) o Ubuntu Desktop.¡También hay un "paquete de extensión de Java", que el IDE agrega varias extensIOnes de Java para que sea un IDE comunicarsepleto para los desarrolladores de Java (Fig. 4)!

¡Experimenta con Hello World!

Probemos nuestro primer programa Java en Raspbzumbidoy Pi.Escriba un nuevo archivo de texto llamado "Helloworld en un editor de texto o en un editor de texto o en el terminal.Java“ mit folgendem Inhalt:

Clase pública HelloWorld {

public static void main (string args []) {

sistema.afuera.Println ("¡Hola mundo!");

}

}

Nuestro código comunicarsepleto es parte de la clase Helloworld, que es igual al nombre del archivo por convención.Un programa de Java comunicarseienza con el método público void void (string args []).Lo único que tenemos que hacer aquí es "¡Hola mundo!" Como un problema del programa.Con Java 11 podemos hacer este programa simple sin comunicarsepilar el código. Geben Sie im Terminal im Verzeichniss der Java-Datei den Befehl Java HelloWorld.Java ein, um das folgende Ergebnis zu erhalten pi@raspbzumbidoypi:~/elektor $ Java HelloWorld.JavaHello World! Sicherlich ist print() in Python kürzer im Vergleich zu sistema.afuera.Println () en Java, pero perdonamos a Java esto comunicarseo un pecado juvenil.

Lea la temperatura de la CPU

Auf viele der sistemawerte, Ein- und Ausgaben kann über das Verzeichnis /sys/ des Linux-Dateisystems zugegriffen werden.Los valores almacenados allí simplemente se pueden leer comunicarseo un archivo de texto.Intentemos determinar la temperatura del procesador Raspbzumbidoy Pi de uno de los archivos en este directorIO SYS. Die Namensgebung in der Verzeichnisstruktur ist nicht immer sehr eindeutig und auch die InterpretatIOn der Werte ist nicht immer einfach, aber es ist ein guter Ausgangspunkt, um auch ein wenig das Linux-sistema kennenzulernen.Realice el siguiente comunicarseando:

$ ls -l /sys /

Total 0

DRWXR-XR-X 2 raíz raíz 0 dic 2 15:44 bloque

Drwxr-xr-x 29 raíz raíz 0 14 de febrero de 2019 bus

DRWXR-XR-X 64 Root Root 0 Feb 14 de 2019 Clase

DRWXR-XR-X 4 Root Root 0 Feb 14 de 2019 Dev

DRWXR-XR-X 10 Root Root 0 Feb 14 de 2019 Dispositivos

DRWXR-XR-X 3 Root Root 0 Feb 14 de 2019 Firmware

DRWXR-XR-X 8 Raíz Raíz 0 1 de enero de 1970 FS

DRWXR-XR-X 12 Raíz Raíz 0 1 de enero de 1970 Kernel

DRWXR-XR-X 122 Root Root 0 Feb 14 de 2019 Módulos

DRWXR-XR-X 2 raíz raíz 0 dic 15 11:39 potencia

¡Parece que podemos encontrar mucha información aquí!Considere algunos de ellos un poco más de cerca:

$ Cat/sys/firmware/deviceTree/base/cpus/cpu@0/comunicarsepatible

Brazo, Cortex-A72

$ cat/sys/class/net/wlan0/dirección

DC: A6: 32: C5: B7: 9d

$ cat/sys/class/bluetooth/hci0/uevent

DevType = host

$ Cat/Sys/Class/Thermal/Thermal_zone0/Temp

30667

¡La última indicación en realidad parece una temperatura en Grad Celsius si comunicarsepartiéramos el valor en 1000!Escribamos un programa simple que lea este valor cada segundo y calcule la temperatura promedIO.

El código en el Listado 1 utilizarizariza algunos métodos Java adicIOnales que se importan al principIO.Los métodos IO leen un archivo SYS comunicarseo un archivo de texto.List and ArrayList crea una lista de todos los valores medidos.En el método main () llamamos un método separado de verificación de velocidad () que captura la temperatura y los guarda en la lista.Es una buena práctica aislar cualquier funcIOnalidad en su propIO método para mantener el código limpIO.

Listado 1: el CPUTMP.Java code to read the Raspbzumbidoy Pi processor temperature.import Java.IO.BufferedReader;import Java.IO.File;import Java.IO.FileReader;import Java.utilizarizar.List;import Java.utilizarizar.ArrayList; public class cputemp {private static final string file = "/sys/class/thermal/thermal_zone0/temp";Lista final estática privada

values = new ArrayList<>(); public static void main(String[] args) throws IntzumbidouptedExceptIOn { while(true) { checkTemp(); Hilo.Dormir (1000);}} private static void checkemp () {try (bufferedReader br = new Buffered Reader (new FileReader (file))) {int value = Integer.Valor de (br.readline ());valor.añadir valor);Int total = valores.Corriente ().Maptoont (Integer :: Valuef).sum(); sistema.afuera.Println ("ahora:" + valor + " - promedio:" + (total / valores.Size ()) + " - Número de mediciones:" + valores.size()); } catch (ExceptIOn ex) { sistema.zumbido.Println ("Error durante la verificación de temperatura:" + EX.GetMessage ());}}}

Hilo.El sueño (1000) asegura que un segundo pase entre cada determinación de temperatura.El valor promedio se calcula dentro del método calculando la cantidad total de la lista de valor utilizando una transmisión.Las corrientes se introdujeron en Java 8 y son una forma muy poderosa de trabajar con listas de elementos.Aquí, también, el nombre del archivo también es el nombre de la clase "CPUTEMP.Java“.Como antes, esta es una clase Java simple sin dependencias adicionales, para que podamos hacerlo sin comunicarsepilación.La salida se puede detener con "Ctrl+C":

pi@raspbzumbidoypi:~/elektor $ Java CPUTemp.Java

Ahora: 36998 - Promedio: 36998 - Número de medidas: 1

Ahora: 34563 - Promedio: 35780 - Número de medidas: 2

Ahora: 35537 - Promedio: 35699 - Número de medidas: 3

Ahora: 36024 - Promedio: 35780 - Número de medidas: 4

Ahora: 35537 - Promedio: 35731 - Número de medidas: 5

Controlar un LED y leer un botón

Permítanos crear otra aplicación Java de un solo archivo que cambie dos LED y pueda leer la condición de un botón.El circuito para conectar dos LED y un botón para separar GPIOS es bastante simple. Der Taster benötigt 3,3 V, nicht 5,0 V, verwenden Sie also den richtigen Power-Pin des Raspbzumbidoy Pi! In diesem Aufbau sind die LEDs an die Pins BCM 14 und BCM 15 angeschlossen, der Taster an BCM 18 (Bild 5).

Prueba en la terminal

Mit den im Raspbzumbidoy-Pi-OS integrierten Befehlen können wir vom Terminal aus auf die GPIOs zugreifen.Usamos esto para probar nuestro cableado.Realice los siguientes comunicarseandos para configurar el pin 14 comunicarseo giro inicial (cirugía) y cambiarlo a alto (es decir) o bajo (DL).Pruebe lo mismo para el otro LED de BCM 15:

$ raspi-gpIO set 14 op

$ raspi-gpIO set 14 dh

$ raspi-gpIO set 14 dl

Podemos usar un enfoque similar para probar el botón configurando el PIN comunicarseo un giro de entrada y consultar la condición de la entrada:

$ raspi-gpIO set 18 ip

$ raspi-gpIO get 18

GPIO 18: nivel = 0 fsel = 0 func = input pull = down

$ raspi-gpIO get 18

GPIO 18: nivel = 1 fsel = 0 func = input pull = down

Cuando se presiona el botón, el valor de "nivel" cambia a 1.

Haciéndolo en Java

¡Hazlo en Java!

Utilizamos el mismo enfoque básico que en "Cputemp.Java“ und nutzen die Terminalbefehle in einem Java-Programm, indem wir Runtime.Trío ().Ejec (cmd) especificar.Si agregamos el escáner de clase de entrada de usuario, también podemos registrar el resultado del comunicarseando y usarlo para verificar la condición del botón.Esto se muestra en el Listado 2.

Der Code nutzt ein ActIOn-Enum, um die Verarbeitung des Befehls zu vereinfachen.En su forma más simple, un enum es solo una lista de nombres predefinidos, pero en este ejemplo agregamos un valor a cada nombre.Esta es una gran ventaja de enums, ya que permiten que el código haga que el código sea mucho más legible y, por lo general, lo simplifique al mismo tiempo.. Wie in der doActIOn-Methode zu sehen ist, wird das ActIOn-Enum als Parameter genutzt und sein Wert verwendet, um den auszuführenden Befehl zu generieren.Los comunicarseentarios en el código deben aclarar todo, ya que esto es solo Java simple para ilustrar el uso de GPIOS de entrada y salida.La parte más comunicarsepleja es el método RunCommand que utiliza algunos métodos comunicarsebinados para llevar a cabo el comunicarseando, leer el resultado y tratar posibles errores.Si esto no es claro para usted en este momento, no se preocupe, ¡lo será tan pronto comunicarseo el código va! Dado que este ejemplo no tiene dependencias, podemos hacerlo sin comunicarsepilación.La salida muestra lo que está sucediendo, por lo que debería ver cómo se encienden y apagan sus LED a diferentes intervalos.Si los LED dejan de parpadear, puede presionar el botón que se verifica diez veces a una distancia de un segundo.La edición esperada es la siguiente:

$ Java RaspiGpIO.Java

Executing: raspi-gpIO set 14 op

Executing: raspi-gpIO set 15 op

Executing: raspi-gpIO set 18 ip

Blink Loop: 0

Executing: raspi-gpIO set 14 dh

Executing: raspi-gpIO set 15 dh

Bucle de parpadeo: 1

Executing: raspi-gpIO set 14 dl

Executing: raspi-gpIO set 15 dl

...

Executing: raspi-gpIO get 18

Button check 0: GPIO 18: nivel = 0 fsel = 0 func = input pull = down

- Empujado: falso

...

Button check 3: GPIO 18: nivel = 1 fsel = 0 func = input pull = down

- Empujado: verdadero

...

¡Tarea para la próxima vez!

Mit einigen Grundlagen haben wir eine kleine Einführung in Java auf dem Raspbzumbidoy Pi gegeben.Puede jugar con el código de ejemplo y leer los antecedentes en los enlaces dados para profundizar su comunicarseprensión.Con suerte, esto facilitará los próximos pasos en el próximo artículo si desarrollamos una aplicación Java comunicarsepleta y vinculamos nuestros GPIOS a un sitio web.(200617-02)

Haben Sie Fragen oder Kommentare?Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Dann kontaktieren Sie den Autor direkt über Javaonraspbzumbidoypi@webtechie.be oder die RedaktIOn über ditor@elektor.comunicarse.