Com a grande expansão das redes de computadores o uso de sistemas distribuídos, que são dispositivos que necessitam de conexão com outros dispositivos para poder distribuir o processamento e realizar uma determinada tarefa, vem aumentando a cada dia. Por isso resolvi escrever esse artigo que ajudará a desenvolver uma aplicação com a placa arduino se comunicando com uma aplicação java por meio de socket.
O que um socket???
Socket nada mais é que uma interface de comunicação bidirecional entre processos através de uma rede de computadores.
Para o perfeito funcionamento do programa exemplo que iremos mostra aqui utilizamos os seguintes componentes.
Ubuntu 10.10 (Linux)
Arduino Duemilanove
Ethernet Shield
cabo ethernet cross over
cabo USB tipo A-B
veja o hardware montado
Antes de rodar os programas temos que coloca os dois sistemas na mesma rede. ou seja coloca o pc na mesma rede que o arduino ja foi previamente configurado. os comandos são os seguintes.
sudo ifconfig eth0 192.169.1.200 netmask 255.255.255.0 - seta o ip e mascara para a interface de rede eth0.
se você não estiver logado como sudo ele irá pedir sua senha.
para testa se os dois dispositivos estão na mesma rede use o comando ping 192.169.1.201 //esse é o ip do arduino.
Agora iremos definir o arduino como nosso servidor e um PC com um aplicação desenvolvida em java como nosso cliente. O código gravado no arduino esta comentado abaixo explicando detalhadamente todas as funções utilizadas no programa.
/*
*Autor: Jose carlos Barbosa (TOUCA)
*Descrisao: Codigo de um servidor web que estara uma conexao de um cliente na porta 80
*Data: 24/08/11
*Projeto: Toucatronic
*/
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //endereco mac
byte ip[] = {
192, 168, 1, 201 } ; //endereço IP
Server server(80); //criando um objeto do tipo servidor
void setup()
{
//Serial.begin(9600);
Ethernet.begin(mac, ip); //setando o ip e o mac para o arduino ser reconhecido na rede
server.begin(); // levantando o servidor
}
void loop()
{
Client client = server.available(); /*servidor esperando uma requisicao, apos a
requisicao ser encontrada a funcao retorna
um objeto do tipo client
*/
if (client) { //testa se o exeiste
while (client.connected()) { //testa se o cliente esta conectado
while (client.available()) { //retorna o numero de byte no buffer de entrada
Serial.print(client.read());
}
client.println("Bem vindo! a Toucatronic"); //envia para o cliente a seguinte String
delay(2); // dá um tempo para o cliente receber os caracteres
while (client.available()) { //retorna o numero de byte no buffer de entrada
Serial.print(client.read());
}
delay(2); // dá um tempo para o cliente receber os caracteres
client.stop(); //finaliza a conexao
break; //sai do loop
}
while(1); //loop infinito para evitar a finalizacao do programa
}
}
O código java que desenvolve a aplicação do PC esta descrito abaixo:
package socketcliente;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
*
* @author Touca
*/
public class SocketCliente {
public static void main(String[] args) throws IOException{
Socket client = new Socket("192.169.1.201", 80); /*criando uma conecxao para o servidor localizado
* em 192.169.1.201 porta 80
*/
//Cria um canal para receber dados.
DataInputStream in=new DataInputStream(client.getInputStream());
//Cria um canal para enviar dados.
DataOutputStream out=new DataOutputStream(client.getOutputStream());
out.writeBytes("OI"); //enviando uma string
String s = in.readUTF(); //Aguarda o recebimento de uma string.
out.writeBytes("Obrigado!"); //enviando uma string
System.out.println(s); //imprimendo a string recebida
//Fecha os canais de entrada e saída.
in.close();
out.close();
//Fecha o socket.
client.close();
}
}
primeiro conecte os dispositivos com o cabo ethernet e o cabo usb, logo após deixe o arduino funcionando e depois rode o programa no pc.
espero que tudo ocorra bem.
qualquer dúvida podem comenta
abraço!