6 – controlar arduino por um programa externo ( app Java conversando via porta serial)

Então vamos lá, vamos controlar a nossa luz através de um outro programa. Veja que se abstrairmos nossa aplicação, vamos poder depois dessa etapa controlar qualquer porta digital e dispositivos através de um programa nosso, além de obter qualquer tipo de dados vindo de sensores e usa-los para alguma funcionalidade (por exemplo, colher informações sobre a temperatura e postar na internet).

Como já tinha adiantando, usarei o Java. Então espero que vocês tenham uma base de conhecimento para essa linguagem e um ambiente preparado. Ah, os arquivos que disponibilizarei e o exemplo estão baseados no windows, ou seja, se for para o Linux é preciso mudar a nomenclatura das portas e puxar a biblioteca para linux (java é multiplataforma, mas como a porta serial usará o sistema operacional e não existe implementação na JVM, será preciso uma biblioteca de linkagem dinâmica para ligar o java ao SO, no windows uma .dll e no linux uma .so)

A idéia do nosso programa é fazer com que o programa java mude o estado da luz a cada 1 segundo. É bem simples, mas a partir disso vocês podem evoluir a idéia, criar uma interface em swing ou java FX com botões para ligar e desligar a luz, enfim. A ideia é dar o caminho das pedras e vocês evoluírem.

Antes de mais nada, vai ser preciso puxar as libs (JARs) de comunicação serial para JAVA. Vamos utilizar nesse exemplo a RXTX (http://rxtx.qbang.org/wiki/index.php/Download mas não precisa puxar porque já coloquei no projeto de exemplo). Além disso, criei uma classe que abstrai a comunicação. Ela tem 3 métodos importantes:

  • open: abre a comunicação serial. Precisa informar qual a porta (ex: com6 – veja como descobrir a porta na figura 6.1) e a velocidade (no nosso caso, 9600)
  • write: escreve um array de bytes na porta serial.
  • read: informa um listener para ser chamado quando houverem bytes para serem lidos.

Puxe o projeto java preparado para a etapa em https://github.com/odelot/etapa6  (github).

Não vou cobrir a parte de leitura, ou seja, ler os estados para saber se a luz esta ligada ou desligada. Ela é um pouco mais complicada, já que a leitura serial em java gera interrupções que devem ser tratadas por listeners. Mas minha classe trata isso 😉 e você pode fazer uns testes.

6-1

Imagem 6.1 – como descobrir a porta COM utilizada através da IDE do arduino.

Para concluir nosso objetivo, então, precisamos a cada 1 segundo enviar pela porta serial o comando “I”, que muda o estado da luz. Logo, precisamos enviar no array de bytes, o byte relativo ao char “I”. O código ficará assim:

import java.io.IOException;

public class Main {

	public static void main(String[] args) {
		//abrindo comunicacao serial 
		SerialInterface si = new SerialInterface("COM6", 9600);

		//registrando action de leitura que irá simplesmente printar os dados lidos
		si.read( new SerialReadAction() {

			public void read(byte b) {
				System.out.print((char)b);
			}

		}); 

		//loop infinito para ligar e desligar lampada a cada 1 segundo
		while (true) {
			byte[] data = new byte[1];
			data[0] = 'I';
			try {
				//enviando dados via porta serial
				si.write(data);
				//dormindo por 1 segundo
				Thread.sleep(1000);
			} catch (IOException e) {
				e.printStackTrace();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

Veja o vídeo do exemplo funcionando. Lembre-se que as DLLs do RXTX devem estar na raiz de execução do aplicativo. Agora, vamos fazer tudo isso funcionar através da internet, via web.

Anúncios

1 comentário

Arquivado em Arduino, Automação Doméstica, Desenvolvimento, Eletrônica, Geek, Java, Tutorial

Uma resposta para “6 – controlar arduino por um programa externo ( app Java conversando via porta serial)

  1. Laiton Garcia

    Muito bom gostei, me ajudou.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s