entre - java arduino serial port
comunicaciĆ³n en serie java arduino (3)
Estoy tratando de configurar una comunicación serie java-arduino. Hasta ahora he descargado el código de la página Arduino ( http://playground.arduino.cc/interfacing/java ) pero me sale un error. Código:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import java.util.Enumeration;
public class SerialTest implements SerialPortEventListener {
SerialPort serialPort;
/** The port we''re normally going to use. */
private static final String PORT_NAMES[] = {
"/dev/tty.usbserial-A9007UX1", // Mac OS X
"/dev/ttyACM0", // Raspberry Pi
"/dev/ttyUSB0", // Linux
"COM3", // Windows
};
/**
* A BufferedReader which will be fed by a InputStreamReader
* converting the bytes into characters
* making the displayed results codepage independent
*/
private BufferedReader input;
/** The output stream to the port */
private OutputStream output;
/** Milliseconds to block while waiting for port open */
private static final int TIME_OUT = 2000;
/** Default bits per second for COM port. */
private static final int DATA_RATE = 9600;
public void initialize() {
// the next line is for Raspberry Pi and
// gets us into the while loop and was suggested here was suggested http://www.raspberrypi.org/phpBB3/viewtopic.php?f=81&t=32186
System.setProperty("gnu.io.rxtx.SerialPorts", "/dev/ttyACM0");
CommPortIdentifier portId = null;
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
//First, Find an instance of serial port as set in PORT_NAMES.
while (portEnum.hasMoreElements()) {
CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
for (String portName : PORT_NAMES) {
if (currPortId.getName().equals(portName)) {
portId = currPortId;
break;
}
}
}
if (portId == null) {
System.out.println("Could not find COM port.");
return;
}
try {
// open serial port, and use class name for the appName.
serialPort = (SerialPort) portId.open(this.getClass().getName(),
TIME_OUT);
// set port parameters
serialPort.setSerialPortParams(DATA_RATE,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
// open the streams
input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
output = serialPort.getOutputStream();
// add event listeners
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (Exception e) {
System.err.println(e.toString());
}
}
/**
* This should be called when you stop using the port.
* This will prevent port locking on platforms like Linux.
*/
public synchronized void close() {
if (serialPort != null) {
serialPort.removeEventListener();
serialPort.close();
}
}
/**
* Handle an event on the serial port. Read the data and print it.
*/
public synchronized void serialEvent(SerialPortEvent oEvent) {
if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
try {
String inputLine=input.readLine();
System.out.println(inputLine);
} catch (Exception e) {
System.err.println(e.toString());
}
}
// Ignore all the other eventTypes, but you should consider the other ones.
}
public static void main(String[] args) throws Exception {
SerialTest main = new SerialTest();
main.initialize();
Thread t=new Thread() {
public void run() {
//the following line will keep this app alive for 1000 seconds,
//waiting for events to occur and responding to them (printing incoming messages to console).
try {Thread.sleep(1000000);} catch (InterruptedException ie) {}
}
};
t.start();
System.out.println("Started");
}
}
Esa es la salida que obtengo:
Biblioteca estable ====================================== Versión de lib nativo = RXTX-2.2 pre2 Java lib Versión = RXTX-2.1-7 ADVERTENCIA: Versión incorrecta de RXTX Versión de jar = RXTX-2.1-7 native lib Version = RXTX-2.2pre2
No se pudo encontrar el puerto COM. Empezado
Estoy usando Linux ... y creo que el puerto es correcto. ¿Alguien podría ayudar? gracias
"Could Not Find Com Port" es el error predeterminado para cuando su Arduino no puede interactuar con Arduino IDE.
Sin embargo, en este caso, el error no indica que el Arduino IDE no puede ver tu Arduino, sino que dice que la biblioteca RXTX no puede ver el Arduino.
El controlador de su PC puede ser una versión anterior, y aún no es compatible con el com requerido por RXTX ...
Este es mi consejo:
Completa tu Tablero Arduino
Vaya a Panel de control ---> Sistema y seguridad ---> Sistema ---> En el panel izquierdo Administrador de dispositivos
Expand otros dispositivos.
En Otros dispositivos, verá un icono con un pequeño gráfico de error amarillo. (Desconecte todos sus otros dispositivos conectados a cualquier puerto serie)
Haga clic derecho en ese dispositivo ---> Actualizar el software del controlador
Selecciona Buscar en mi computadora el software del controlador
Haga clic en Examinar ---> Buscar la carpeta de Arduino Environmen t que ha descargado del sitio web de Arduino. Si no se descarga, entonces http://arduino.cc/en/Main/Software
Después de la marca de navegación, incluya la subcarpeta.
Haga clic en siguiente ---> Su controlador será instalado.
Contraer otros dispositivos ---> Expandir puerto (está en el administrador de dispositivos solo en otros dispositivos)
Verá Arduino escrito ---> Busque su PUERTO COM (cierre el administrador del dispositivo)
Vaya a Arduino Environment ---> Tools ---> Serial Port ---> Seleccione el PUERTO COM como se menciona en PORT en el administrador de dispositivos. (Si está utilizando cualquier otra placa Arduino en lugar de UNO, seleccione la misma en tableros)
Un poco de material de referencia: http://www.devfactor.net/2014/10/26/arduino-basics-serial-communication/
parece ser un problema de permiso. intente: sudo chmod 666 / dev / ttyACM0 (usb) y vuelva a ejecutar el código java.
Después de ver los problemas y luchar con RXTX y JSSC por un tiempo, desarrollé la Biblioteca de comunicación JAVA Arduino .
Mi biblioteca tiene (afortunadamente) gran documentación (que se encuentra en SourceForge Wiki para la biblioteca) y le dice exactamente cómo instalarla y usarla. Después de descargar ambos JAR en la biblioteca e incluirlos en su classpath, solo incluya la siguiente declaración antes de la definición de su clase:
import arduino.*;
Ahora, todo lo que necesita es el siguiente fragmento de código en su método, ¡y listo!
String ArduinoPort = ""; //Your port name here
int BAUD_RATE = 9600;
Arduino arduino = new Arduino(ArduinoPort, BAUD_RATE);
arduino.openConnection();
arduino.serialWrite(''1''); //serialWrite is an overridden method, allowing both characters and strings.
arduino.serialWrite(''1'', 20); //its second parameter even allows delays. more details can be found in the documentation.
La biblioteca también viene con código de ejemplo que pensé que ayudaría a acelerar el proceso.