Raspberry PI 3 model B y Raspbian: evaluando los lenguajes

Es un buen momento para recapitular el estado en el que nos encontramos.

El sistema con el que contamos lo componen:

  • La Raspberry Pi  cuyo modelo podemos comprobar con el comando de terminal cat /proc/cpuinfo y después buscar el modelo concreto en  esta lista de modelos y fabricantes. (Por ejemplo Hardware : BCM2835 corresponde a la  Pi 3 Model B 1GB a02082 Sony, UK).
  • El Sistema Operativo Raspbian iy para saber la versión con la que contamos podemos usar el comando de terminal uname -a  (Por ejemplo Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux) o el comando cat /etc/os-release (Por ejemplo PRETTY_NAME=”Raspbian GNU/Linux 9 (stretch)” )

Los lenguajes de programación que hasta el momento hemos probado su correcto funcionamiento con el clásico programa “Hola mundo” y después su trabajo con el módulo GPIO para controlar un sencillo LED son los siguientes:

Software Version IDE Version Ejecución GPIO
Java 1.8.0_65 Bluej 3.1.7b Terminal Completo
Python 3.5.3 Integrado 3.5.3 Integrada Completo
Scratch 2 Integrado 2 Integrada Limitado
LUA 5.1.5 No Terminal Incompleta

Para futuros ejemplos en Raspberry Pi  usaré Python y para enseñar y disfrutar con los más pequeños Scratch.

Control de circuitos eléctricos con Raspberry Pi: Java

Después de hacer nuestro primer programa en Java, vamos a pasar a controlar un circuito eléctrico a través del GPIO de Raspberry PI.

Previamente hay que descargar las librerías de Java necesarias para trabajar con GPIO que están bajo el proyecto pi4j. En este caso además de poder usar el comando apt-get install pi4j‘ puede hacerlo directamente con el navegador en la URL http://get.pi4j.com/download/pi4j-1.2-SNAPSHOT.deb (Versiones anteriores dan el error “Unable to determine hardware version. I see: Hardware : BCM2835” ) descargándola y ejecutando.

Hay que comprobar que la libreria gpio ya está en el sistema mediante el comando  gpio -v

En JAVA la numeración de los PIN varía y así el 18 pasa a ser el 1 ver aquí.

El programa en JAVA quedaría así:

/**
 * led.java
 * Parpadea el LED 18
 */

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class led
{
 public static void main(String[] args) throws InterruptedException {
 System.out.println("GPIO LED");
 // Crea controlador GPIO
 final GpioController gpio = GpioFactory.getInstance();
 // Pone PIN 18 como salida y ON
 final GpioPinDigitalOutput ledPin = 
 gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01,"LED");
 ledPin.high();
 System.out.println("LED ON");
 Thread.sleep(2000);
 // Pone PIN 18 como salida y OFF
 ledPin.low();
 System.out.println("LED OFF");
 gpio.shutdown();
} 
}

Algunos comentarios:

  • EN JAVA los comentarios pueden ir bloque entre /* y */  o en la linea a continuacion de //
  • Los métodos de la libreria GPIO controller pueden ser consultados en la documentación en linea.
  • Puede ajustarse el estado inicial (p.e. apagado) con gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, “LED”,ledPin.LOW); 
  • Puede programar parpadeo con la instrucción ledpin.blink(1000, 15000);
  • Puede cambiar el estado con  ledPin.toggle();
  • Puede tener un estado un tiempo determinado con ledPin.pulse(1000,true);
  • Para terminar gpio.shutdown();

Para ejecutar la clase led.class necesita ir al terminal y teclear java -classpath .:/opt/pi4j/lib/’*’ led

Programo en Java desde hace más de 15 años y mi conclusión es que en JAVA es muy dificil programar tareas sencillas (Por ejemplo Hola mundo)  pero muy fácil programar tareas complejas (Observe a potencia de los comandos).

 

 

Java en Raspberry Pi

En un lenguaje orientado a objetos como JAVA, todos el conocimiento (datos y algoritmos) se tienen que representar por medio de: clases, objetos, instancias, etc.

Una clase es un modelo de un objeto, pero sin existencia física (“no reserva memoria”). En el mundo real, cuando hablamos del café, estamos hablando de una idea, de una “clase”.

La materialización o instanciación de una clase se llama objeto. De nuevo volviendo al mundo real, el café que tengo en el armario de la cocina es un objeto real. Lo puedo oler, moler, … , se me puede caer y desparramarse por el suelo.

Para desarrollar un programa en JAVA primero comprobaremos que está instalado JAVA y la versión que tenemos (Teclear el comando java -version) y después podemos usar   uno de los IDE disponibles en Rapbian (p.e. BlueJ o Greenfoot de la Universidad de Kent) un nuevo proyecto o escenario por nombre “Hola”, en el creamos una nueva clase (Una clase es la unidad de programación en Java) con el mismo nombre y escribimos el programa:

/**
 * Hola.java
 * Escribe Hola mundo en la consola
 */
public class Hola
{
 public static void main(String[] args) {
 System.out.println(
 "Hola mundo");
 }
 }

Vamos a analizar un poco el programa:

  • JaVAa Es SenSiBle A LaS MaYuScUlAs
  • El nombre de la clase y el del fichero deben coincidir.
  • class: indica que se define una clase, por nombre “Hola” y que va entre llaves
  • public indica que la clase / método puede ser llamado por cualquier objeto
  • static: indica que es un método de tipo clase
  • void indica que el método no devuelve valores
  • main: indica que es el primero que se ejecuta
  • string es la forma en la que se le pueden pasar datos al método, en este caso no se pasan
  • System.out.println es una clase del sistema que permite la escritura en el terminal.

El programa fuente .java para ser ejecutado debe ser compilado previamente, creándose un elemento .class o un paquete .jar.

Para ejecutarlo hay que ir al terminal y teclear

Para ejecutar la clase: java  Hola

Para ejecutar el JAR: java -jar Hola.jar

En una próxima entrada controlaremos el GPIO con JAVA

Java

¿Qué es Java? No lo dude, Java es una isla del océano Índico. Pero por  Java también se conoce coloquialmente en USA a “una taza de café de Java” (a java coffe cup). Un Java Bean, no es otra cosa que “un grano de café de Java”.

Pero, para los informáticos Java es un lenguaje de programación orientado a objetos (object oriented) que permite desarrollar programas y “applets” (programas descargables y ejecutables en un navegador o con Java Web Start). Muchos desarrollos próximos a Java toman términos cafeteros o del desayuno (coffebreak, cafeaulait, visualcafe, etc.).

Un  programa Java (extensión .java) se puede ejecutar en cualquier sistema operativo que tenga una JVM (Java Virtual Machine) , en la actualidad todos, incluido Raspbian para Raspberry Pi. Esta idea de máquina virtual que permita la portabilidad del código es la base de los sistemas Android (Usan una maquina java específica llamada ART)

Debemos diferenciar:

  • JRE: entorno de ejecución
  • Java SE: entorno de desarrollo básico para escribir programas y applets
  • JDK (Java Development Kit): entorno más completo
  • Java IDE: BlueJ (Windows, xOS, RASpbian, etc) , Greenfoot (Windows, xOS, RASpbian, etc) …

Para conocer si Java está instalado en un ordenador, y  su versión, basta con ejecutar en la consola correspondiente lel comando “java – version”

pi@raspberrypi:~ $ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

El lenguaje JAVA fue un desarrollo original de Sun y que al adquirirla pertenece ahora a Oracle.

Para otra entrada nuestro primer programa en Java.