***A partir de la versión 2.2.0 no es necesario el uso de la librería RXTX para que la librería Arduino librería PanamaHitek_Arduino trabaje. Ahora solo es necesario importar la librería PanamaHitek_Arduino a los proyectos en Netbeans, sin tener que preocuparse por la RXTXcomm. Luego de la versión 2.6.0, esta librería ha sido nombrada PanamaHitek_Arduino.
Desde la versión 2.7.0 no es necesaria la instalación de los archivos dll, ya que la librería crea automáticamente la ruta C:/JavaRXTX (sólo en Windows), donde almacena estos archivos y los pone a disposición de nuestra aplicación.
En la versión 2.8.0 se ha reemplazado la librería RXTX en favor de Java Simple Serial Connector y se ha agregado compatibilidad para sistemas operativos Linux, Mac y Solaris, además de Windows.
En la versión 3.2.0 he agregado soporte para el uso de esta librería con JDK 11, lo cual elimina la limitación de no poder usarla por encima del JDK 1.8.
____________________________________________________________
Aquí les presento mi librería Arduino PanamaHitek_Arduino en su versión 3.2.0.
La librería está disponible en nuestro repositorio en GitHub y en SourceForge. También pueden agregar nuestra librería a sus proyectos Maven agregando el repositorio de Jitpack:
1 2 3 4 |
<repository> <id>jitpack.io</id> <url>http://jitpack.io</url> </repository> |
La librería PanamaHitek_Arduino debe ser agregada como una dependencia:
1 2 3 4 5 |
<dependency> <groupId>com.github.PanamaHitek</groupId> <artifactId>PanamaHitek_Arduino</artifactId> <version>3.0.0</version> </dependency> |
En este post publicaré los métodos que contiene la librería y los parámetros de los mismos.
Métodos de la versión 1.1.0 |
|
Método |
Descripción |
arduinoRX(string nombre del puerto |
Este método se utiliza para iniciar la conexión de Java con Arduino SOLAMENTE PARA LA RECEPCIÓN DE DATOS. En el nombre de puerto se coloca el COM#, o sea el puerto COM donde esté conectado Arduino, el time out es el tiempo de espera (yo uso 2000), el baud rate debe ser el mismo que se usa en Arduino IDE (generalmente 9600) y el Serial PortEventListener debe ser una variable declarada antes de utilizar este método. */ |
arduinoTX(string nombre del puerto |
Este método se utiliza para iniciar la conexión de Java con Arduino SOLAMENTE PARA LA TRANSMISIÓN DE DATOS. */ |
arduinoRXTX(string nombre del puerto |
Este método se utiliza para iniciar la conexión de Java con Arduino PARA LA TRANSMISIÓN Y RECEPCIÓN DE DATOS. */ |
sendData(String data) | Método utilizado para enviar datos a Arduino. Los datos se deben enviar como cadena de texto (string). */ |
receiveData() | Devuelve un dato recibido a través del puerto serie. Este dato será numérico en formato ASCII por lo que se debe traducir de decimal a caracter. */ |
Devuelve un valor boolean que nos indica si hay algún mensaje disponible para imprimir. Dicho mensaje DEBE ser enviado desde Arduino utilizando Serial.println(); */ | |
printMessage() | Devuelve una cadena de caracteres que contiene el mensaje que ha sido enviado desde Arduino, pero traducido a caracteres. SE DEBE UTILIZAR DENTRO DE UNA ESTRUCTURA CONDICIONAL UTILIZANDO MessageAvailable(). Cuando haya un mensaje disponible, se imprime utilizando este método. */ |
Métodos de la versión 1.3.0 |
|
Método |
Descripción |
killConnection() |
Permite finalizar la conexión entre Arduino y la computadora sin tener que finalizar la aplicación que se esté ejecutando, como en versiones anteriores. |
getPortsAvailable() |
Devuelve un valor tipo int con la cantidad de dispositivos conectados a la computadora por medio del Puerto Serie. |
|
|
Métodos de la versión 2.5.0
sendByte(int data) | Similar a sendData, solo que en este método se envía un Byte en vez de una cadena de caracteres. |
Métodos de la versión 2.6.0
getSerialPorts() | Devuelve una lista con los puertos disponibles. Reemplazo de NameSerialPortAt(); |
setParity(int input_Parity) | Se establece la paridad (nula por defecto) |
setStopBits(int Bytes) | Se establecen los StopBits (1 por defecto) |
setByteSize(int Bits) | Se establece la cantidad de Bytes que se manejará (8 por defecto) |
setTimeOut(int time) | Se establece el TimeOut (2000 milisegundos por defecto) |
Métodos de la versión 2.8.0
flushSerialPorts() | Se limpia los buffer de entrada y salida del puerto serie |
getInputBytesAvailable() | Devuelve la cantidad de bytes disponibles para ser leídos en el buffer de entrada del puerto serie |
getEventListener() | Devuelve el event listener que se agrega al serialPort cuando se utilizan los métodos arduinoRX() y ardunoRXTX() |
A partir de la versión 2.1.0 se agrega soporte para la lectura de múltiples mensajes enviados desde Arduino. Esto se ha hecho por la dificultad que presenta algunos usuarios con la lectura de múltiples sensores en Arduino y desean enviar estos datos a Java. Ahora se ha creado una nueva clase, llamada MultiMessage.
Si deseamos leer varios sensores, necesitamos instanciar MultiMessage en nuestra aplicación de la siguiente manera:
MultiMessage nombre_del_objeto = new MultiMessage(numero de sensores a leer, instancia de la clase PanamaHitek_Arduino)
Si se desea, por ejemplo, leer 3 sensores, se trabajaría se la siguiente manera.
1 2 3 4 5 6 7 |
//Se crea un obteto llamado Arduino para instanciar la clase Arduino //De la librería <del>Arduino para Java</del> PanamaHitek_Arduino PanamaHitek_Arduino Arduino = new PanamaHitek_Arduino(); //Se instancia un objeto de la clase MultiMessage //Se indica que se van a leer 3 sensores y que la clase Arduino fue instanciada //mediante el obteto Arduino PanamaHitek_multiMessage multi = new PanamaHitek_multiMessage(3, Arduino); |
La clase MultiMessage posee los siguientes métodos.
Métodos de la clase MultiMessage |
|
Método |
Descripción |
DataReceptionCompleted() |
Devuelve un valor tipo boolean que indica si se ha terminado de recibir las lecturas indicadas en la instancia de la clase (si se declara que habrá 3 lecturas, este método sólo devolverá true cuando se haya leído los 3 valores) |
getMessage(int index) |
Devuelve un dato tipo String con la lectura del sensor indicado en el index |
flushBuffer |
Elimina la información almacenada en el buffer de datos. Se debe usar una vez se haya terminado de leer los sensores con el getMessage(). Al utilizar este método será posible hacer una nueva lectura. |
Se debe recordar que para utilizar esta librería se debe importar la librería a los archivos del proyecto. También se necesita la librería RXTX.
- Si se va a usar la conexión RX o la RXTX, hay que declarar un SerialPortEventListener y se debe agregar los métodos de esta clase (Java lo hará automáticamente).
- Si se utiliza receiveData() se recibirán los datos directamente desde Arduino, en formato ASCII (decimal).
- Si se usa printMessage() se recibirán los mensajes desde Arduino traducidos a caracteres y ordenados por líneas. SE DEBE USAR PRINTLN EN ARDUINO y se recomienda que este método sólo se use cuando isMessageAvailable() devuelva un valor true.
Acá les dejo un video actualizado donde se muestra un ejemplo del funcionamiento de la librería.
Espero que la información proporcionada sea de utilidad para ustedes. Si tienen algún comentario no duden en hacérmelo llegar.