sexta-feira, 5 de maio de 2017

Controlando o arduino a partir do Java usando JArduino

Quando queremos integrar Java com Arduino geralmente utilizamos a porta serial como desmonstrado no livro JavaFX 8: Introduction by Example no capítulo sobre Arduino.O problema com essa abordagem é que teremos que programar em duas linguagens e ainda definir a forma de comunicação.

Outra possibilidade é usar JArduino, que possibilita o uso de código Java para diretamente interagir com o Arduino. O que você precisa fazer é seguir o tutorial do README da página do JArduino. Uma vez usando Java podemos utilizar qualquer API já bem conhecida

Problemas




O seguinte erro me tomou alguns minutos:

java.lang.UnsatisfiedLinkError: no rxtxSerial64 in java.library.path thrown while loading gnu.io.RXTXCommDriver

Ele vem por causa da falta da API nativa RxTx. Simplesmente baixe a API para o seu sistema aqui aqui e colocou na lib da sua JDK. No meu caso o diretório que usei foi: /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64



Lendo um sensor de luz (LDR) a partir do Java

 

O "olá mundo" do mundo arduino é fazer um led piscar. Eu queria começar com algo mais interativo, então criei uma aplicação simples que lê uma entrada analógica conectada a um LDR, como descrito nesse tutorial. Coisas para se notar sobre o código



  • A classe JArduino imita um código Arduino. Você simplesmente estende a classe JArduino e implementa suas coisas no método loop e configura as portas no método setup;
  • Eu estou usando maven e tive que adicionar alguns repositórios no meu pom.xml pois algumas dependências não estão disponíveis na central do Maven;
  • A única coisa que precisamos fazer no lado do arduino é subir o código provido pelo JArduino. Lembre-se de usar a porta certa na sua classe;
  •  O circuito é o mesmo do tutorial Using an LDR Sensor with Arduino: A Tutorial for Beginners, a diferença aqui é que uso o Garagino:

Aqui está o código:

package org.fxapps.arduino;
public class App {
public static void main(String[] args) {
// remember to use the correct port in your project
new LightSensorApp("/dev/ttyUSB0" , System.out::println)
.runArduinoProcess();
}
}
view raw App.java hosted with ❤ by GitHub
package org.fxapps.arduino;
import java.util.function.Consumer;
import org.sintef.jarduino.AnalogPin;
import org.sintef.jarduino.InvalidPinTypeException;
import org.sintef.jarduino.JArduino;
public class LightSensorApp extends JArduino {
private Consumer<Short> receiveLight;
public LightSensorApp(String port, Consumer<Short> receiveLight) {
super(port);
this.receiveLight = receiveLight;
}
@Override
protected void setup() throws InvalidPinTypeException {
}
@Override
protected void loop() throws InvalidPinTypeException {
short light = analogRead(AnalogPin.A_0);
receiveLight.accept(light);
delay(100);
}
}
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.fxapps.arduino</groupId>
<artifactId>arduino-light-chart</artifactId>
<version>1.0</version>
<repositories>
<repository>
<id>thingml-snapshot</id>
<name>thingml-snapshot</name>
<url>http://maven.thingml.org/thingml-snapshot/</url>
</repository>
<repository>
<id>thingml-release</id>
<name>thingml-release</name>
<url>http://maven.thingml.org/thingml-release/</url>
</repository>
<repository>
<id>thirdparty</id>
<name>thingml-snapshot</name>
<url>http://maven.thingml.org/thirdparty/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.kevoree.extra</groupId>
<artifactId>org.kevoree.extra.osgi.rxtx</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.sintef.jarduino</groupId>
<artifactId>org.sintef.jarduino.core</artifactId>
<version>0.1.7-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.sintef.jarduino</groupId>
<artifactId>org.sintef.jarduino.serial</artifactId>
<version>0.1.7-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
view raw pom.xml hosted with ❤ by GitHub
O resultado é simplesmente a intensidade da luz no console:




Agora em breve no blog Aprendendo JavaFX iremos postar algo visual. Até mais!

Nenhum comentário:

Postar um comentário