Función ArduinoConnection(): Comunicar Arduino con Java

15
311

Para poder comunicar una aplicación en Java con Arduino se necesita declarar las siguientes variables:

Estas variables funcionan de la siguiente forma:

Output: Es un OutputStream que se utiliza para enviar datos Utilizando el puerto Serie.

serialPort: Con esta variable iniciamos el Puerto Serie.

PORT_NAME: El nombre del puerto COM. En mi caso es COM 3 para Arduino Mega y COM 6 para Arduino Nano que son los 2 microcontroladores que tengo bajo mi poder.

TIME_OUT y DATA_RATE: son variables que utiliza el Puerto Serie para su funcionamiento. Generalmente se utilizan los valores 2000 y 9600, respectivamente.

Ahora veamos la función que llamaremos ArduinoConection:

Si copiamos esta función en el código de cualquier programa que estemos construyendo en Java, podremos enviarle datos a Arduino.

Una última función, EnviarDatos, será la función que recibirá los parámetros que desemos enviar.

Con las variables declaradas en el inicio de un programa en Java, junto con estos 2 métodos podremos hacer miles de cosas interesantes con Arduino.

  • José Luis Zelaya E.

    Que tal, buen trabajo amigo.

    Pero he tenido problemillas al querer implementarlo bajo windows con un arduino nano clonado.

    Problema 1. vi que el método

    serialPort.addEventListener((SerialPortEventListener) events);

    No está trabajando bien, ya que nunca me regresa el evento de que se ha recibido datos desde el arduino.
    Solución 1:
    Investigando un poco llegué a esta dirección donde dan la respuesta, quizá sea bueno agregarlo a la libreria que has creado.
    http://embeddedfreak.wordpress.com/2008/08/12/serial-port-event-in-rxtx/

    Problema 2. Cuando el arduino me devuelve una cadena de datos (“por ejemplo”) las líneas de codigo siguiente

    PanamaHitek_Arduino device = new PanamaHitek_Arduino();
    device.arduinoRXTX(“COM2”,9600, null); //ignorado el tercer parametro a proposito
    device.sendData(“0”);
    String response=null;
    if (device.isMessageAvailable()){
    response = device.printMessage();
    }

    específicamente siempre dice falso, aunque haya recibido el primer valor “p” del ejemplo que el arduino esta devolviendo.

    Yo lo cambie así:

    PanamaHitek_Arduino device = new PanamaHitek_Arduino();
    device.arduinoRXTX(“COM2”,9600, null); //ignorar el tercer parametro
    device.sendData(“0”);
    String response=null;
    while(device.isMessageAvailable()==false);
    response = device.printMessage();
    }

    Obviamente no es la mejor forma de hacerlo pero me sirvio para salir del paso.

    Bueno, este ha sido mi aporte, sigamos mejorando.

    Un abrazo desde Bolivia.

  • Mamen Gil

    Felicitarte por el trabajo que realizas, es genial, y esperando tus tutoriales sobre como creaste la libreria de Arduino, me interesa mucho el tema, porque es genial y como funciona a la mayoria, te doy un 10. Un saludo

  • Mauricio

    tengo una duda tengo un ARDUINO UNO con su driver hecho por mi, si me funciona con otra app para controlar el puerto serial, en java segui tu tutorial para utilizar tu libreria, pero al comunicar mi micro con java al ser compilado se queda ahi… porque ?? solo me aparece running y necesito detenerlo porque no realiza nada

    • Debe estar pasando algo con el initComponents() o quizas no le indicaste a la clase principal que tiene que hacer el Frame visible

  • chema131

    Cuales son las librerias que tendriamos que importar?
    Gracias excelentes tutoriales

    • Te recomiendo que visites el post donde publico mi librería Arduino para Java. Ahí he juntado algunos métodos útiles y fáciles

  • Q tal, oye ya instalé la librería RXTX, pero no sé de donde sacas la clase SeriaPort, ya que no encuentro de que paquete se obtiene.

    • No entiendo a que te refieres.

      Podría ser un poco más específico por favor?

    • Tadeo

      Lo que illuminatus18 pregunta es que de donde se saca “SerialPort” que usaste en “OutputStream Output = null; SerialPort serialPort; private final String PORT_NAME = “COM3″ private static final int TIME_OUT = 2000; private static final int DATA_RATE = 9600; “

      • El serial port se declara como un tipo de variable SerialPort. Para poder usar este tipo de variables hay que importar gnu.io.SerialPort; lo cual forma parte de la librería RXTX.
        Es una variable que se debe usar en cualquier método de comunicación serial utilizando RXTX

        • Tadeohb

          Disculpa, me podrías decir lo que tenemos que importar, ósea lo que importaste para este proyecto?

  • Tadeo

    Espero que leas esto ¿Es dificil poder crear mi propia libreria de arduino? si es posible que pudieras publicar un post de como hacerlo (digo, solo si el trabajo no es muy cargado). Muchisimas gracias! EXCELENTES TUTORIALES!

    • Hola.

      Sí es posible para mi hacer un tutorial de cómo crear librerías para Java sin embargo esto tendría que quedarse en Stand By durante algunas semanas ya que estoy creando un proyectos a nivel superior y preparándome para una conferencia que dictaré pronto. Cuando me deshaga de esos compromisos preparo el tutorial.

      Saludos.

  • Javier Rey

    Hola he seguido todos los pasos de play ground:

    http://playground.arduino.cc//Interfacing/Java

    Pero nada que logro recibir datos:
    Es un arduino Leonardo, sobre Windows 7.

    El programa se ejecuta correctamente, pero no recibe nada de nada.