10 cosas que necesitas saber para utilizar Arduino desde Java

Arduino, una poderosa plataforma de hardware libre, ideal para poyectos de electrónica que van desde el encendido de un LED hasta un complejo sistema de domótica para controlar una casa entera. Java, uno de los lenguajes de programación más extendidos del mundo. ¿Podemos utilizar Arduino desde Java? ¡Por supuesto!

Veamos 10 aspectos que necesitamos comprender para crear proyectos de alto nivel combinando estas dos grandes tecnologías.

1. No se puede programar Arduino utilizando el lenguaje Java

Arduino y Java son dos entes independientes. Arduino es una plataforma de hardware libre con su propio lenguaje, mientras que Java es un lenguaje de programación de alto nivel. Java necesita para su ejecución la Máquina Virtual de Java, la cual, hasta ahora no puede ser ejecutada desde Arduino. Al menos no la máquina virtual que utilizamos en nuestras computadoras.

Hay personas que han dedicado su tiempo a crear máquinas virtuales especiales para microcontroladores. Uno de estos proyectos es HaikuVM, el cual permite efectivamente programar Arduino en lenguaje Java. Sin embargo, el espacio de memoria con el que contamos para programar se ve drásticamente reducido y según la opinión de algunos usuarios, el performance no es muy bueno que digamos. Programar Arduino en lenguaje Java sí es posible, pero no es eficiente.

Sin embargo esto no significa que no podamos crear programas en Java que le envíen instrucciones a Arduino entregándonos el control de circuitos electrónicos desde una interfaz en la computadora.

2. Arduino se comunica con la computadora por medio de Comunicación Serial

monitor serial

Uno de los primeros aportes que escribí para este blog fue como establecer comunicación entre la computadora y Arduino por medio de comunicación serial.

Esta es la forma más sencilla de comunicación que existe entre Arduino y la computadora, ya que aprovecha el puerto USB por medio de un convertidor USB-Serie.

Resulta que para poder comunicar nuestras aplicaciones en Java con Arduino debemos aprovechar la comunicación serial, lo cual es perfectamente posible si se implementan las librerías adecuadas.

3. Para permitirle a Java establecer comunicación con el Puerto Serie se requiere instalar los drivers de la librería RXTX

La librería RXTX es una compilación de código que le permite a los programadores en Java establecer comunicación con el Puerto Serie. Alguna vez escribí un post que hace referencia a los requisitos para comunicar Arduino con Java.

Desde dicho post es posible descargar los Archivos JAR para 32 y 64 bits (Windows) que se deben importar a los proyectos Java para hacer posible lo que deseamos hacer. Algunas personas presentan problemas a la hora de instalar estos archivos en sus computadoras, por lo que en algún momento decidí crear un post exclusivo para resolver estas dificultades.

4. Usar la librería RXTX es un poco difícil… ya existe una librería especial para Arduino en Java

La librería Arduino para Java es una compilación de código que facilita mucho la comunicación Arduino-Java, Java-Arduino.

Es posible lograr esta comunicación utilizando la librería RXTX, como mostré en uno de mis aportes. Sin embargo, si hacemos un análisis comparativo entre lo que se requiere con una u otra librería, nos damos cuenta que la diferencia es muy marcada. Yo diseñé la librería Arduino para Java a partir de la RXTX creando algunos métodos que comprimen los comandos que se requieren para establecer una conexión, enviar y recibir datos.

Para poder lograr esta comunicación, es necesario importar ambas librerías, la Arduino y la RXTX ya que la primera depende de la segunda.

5. Al crear un programa en Java y establecer comunicación con Arduino, se está remplazando el Monitor Serial por una interfaz gráfica

Cuando se crea un programa en Arduino que requiera de la intervención del usuario por medio del Monitor Serial lo que hacemos es enviarle caracteres, sean letras o números. Estos caracteres se leen en Arduino, se interpretan y devuelven un resultado, si es necesario.

Un ejemplo de esto es cuando encendemos un LED desde el teclado de la computadora. En dicho código se lee un caracter. Si el caracter recibido es un 1, se enciende un LED. De lo contrario, se apaga.

Para lograr el mismo resultado con un programa en Java, pues se crea una interfaz con dos botones, uno para encender y otro para apagar. Cuando se presiona el botón de encender, se le indica a Java que envíe un “1” a Arduino. La librería Arduino cuenta con un método, SendData(), con el cual es posible hacer esto. En el botón de apagado, se envía un “0” o cualquier otro caracter. Al presionar cualquiera de los dos botones, estamos emulando lo que haríamos con el Monitor Serial, enviando un 1 o un 0 para encender o apagar.

¿La ventaja de las interfaces? Tenemos botones gráficos estilizados, lo que hace nuestros proyectos más interesantes, interactivos y profesionales. Un ejemplo de esto lo mostré en el post Arduino y Java: Encendiendo LEDs desde un programa en nuestra PC.

6. Para cada tipo de comunicación existen métodos especiales

Se pueden dar tres tipos de situaciones…

  1. Cuando se necesita transmitir datos de Java a Arduino
  2. Cuando se necesita transmitir datos de Arduino a Java
  3. Cuando se necesita enviar y recibir datos entre Arduino y Java

Para esto, la librería Arduino para Java posee tres tipos de conexiones: ArduinoRX(), solamente para recibir datos en Java. ArduinoTX(), solamente para transmitir datos en Java ArtuinoRXTX(), para transmitir y recibir datos en Java

Los tres métodos tienen parámetros que se deben establecer a la hora de utilizarlos. En todos hay que establecer el puerto COM al que está conectado Arduino (ejemplo: “COM6”), el baudRate (que debe ser igual al establecido en el Serial.begin() en Arduino), un timeOut (tiempo de espera entre el inicio de la conexión y el envío/recepción de datos) y en algunos casos un SerialPortEventListener para detectar cuando se han enviado datos de Arduino a Java.

7. Java se da cuenta cada vez que Arduino le envía datos

Cuando es necesario enviar datos de Arduino a Java, se utiliza un SerialPortEventListener, el cual requiere de la implementación de un método abstracto, SerialEvent().

El SerialEvent() se ejecuta cada vez que se recibe un dato en el Puerto Serie. Los datos en el Puerto Serie se reciben caracter por caracter, lo que significaría un problema ya que si enviamos un mensaje de texto, recibiremos el mensaje letra a letra. Usando el método ReceiveData() obtenemos estos caracteres. Sin embargo, también existe el método MessageAvailable() que devuelve un valor true cuando se haya finalizado la recepción de cualquier mensaje enviado desde Arduino con el método Serial.println().

Cuando el método MessageAvailable() devuelve un valor true, entonces se recibe el mensaje con PrintMessage(). El mensaje será recibido como un String y podrá ser usado como desee el usuario dentro de Java.

8. En Java es posible graficar los datos que leemos en los sensores conectados a Arduino

jfreecharts

Existe la librería JFreeCharts. Podemos crear una interfaz que recibe, procesa y grafica los datos en tiempo real, como ya mostramos en el post “gráficas de sensores en tiempo real con Arduino, Java y JFreeChart“.

9. Las interfaces gráficas en Java le agregan versatilidad a los proyectos en Arduino

rgb

Utilizar Arduino desde Java

grafica fluidos

Utilizar Arduino desde Java Los elementos de programación de alto nivel disponibles en Java permite manipular las interfaces electrónicas con mayor versatilidad, como se muestra en los siguientes aportes:

  10. Utilizar Arduino desde Java: El límite es el infinito

Las posibilidades que nos brinda la programación en Java para interactuar con Arduino son infinitas. Está en cada quien desarrollar sus capacidades en programación y electrónica para empezar a crear proyectos más y más exigentes. Los contenidos que hay en este blog se han tratado de confeccionar de la manera más atinada para asegurar que los conceptos que deseamos transmitir lleguen a nuestros lectores de manera clara, precisa y concisa.

Espero que esta información sea de utilidad para ustedes. Saludos.

 

¿Te gustó? ¡Comparte!Share on LinkedInShare on FacebookTweet about this on TwitterEmail this to someoneShare on RedditShare on TumblrShare on Google+Pin on PinterestBuffer this page
  • Ezequiel Fatala

    Hola Antony, muchas gracias por esta información. Ya conozco JAVA y estaba buscando una forma de unir esto con programación de microcontroladores.

    • Antony García González

      (Y)

  • jime castellon

    disculpe puede hacer un tutorial de como puedo instalar la libreria de arduino en eclipse kepler o spring tools que tambien utiliza java??

    • Antony García González

      No utilizo dichas herramientas

  • Mariana Ruiz

    Hola Antony, muchas gracias por subir este post, justo estoy pensando en utilizar arduino con java para mi tesis, pero no se si se pueda utilizar tambien los modulos wifi de arduino?

    • Antony García González

      Sí se puede. Recomiendo el Arduino Yún o el Linkit Smart Duo si lo que quieres es WiFi