Como fazer a conexão do Arduíno com um Web Service Local host

Desenvolvi um web service em Java, porém preciso fazer com que o Arduíno receba a conexão do meu web service, para que o web service possa ler a umidade, porém não sei como fazer o com que o Arduíno receba a conexão do meu WebService.

Alguém sabe o que tenho que modificar no codigo do arduíno para que receba a conexão do meu web service??


O meu codigo do arduino esta da seguinte forma:

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp.h>

#include <Ethernet.h>//Biblioteca EthernetShield

#define SAMPLES 500 //Número de amostras de temperaturas
//-----------------------------Sensor---------------------------------------------------------------------
int umidade;
//int solenoide = 2;
//-----------------------------Sensor---------------------------------------------------------------------
byte mac[] = { 0xd0, 0x6f, 0x4a, 0x74, 0x4a, 0xc9}; //Define o endereço físico da placa
byte ip[] = { 192, 168, 0, 102}; // Ip da EthernetShield
byte gateway[] = { 192, 168, 1, 1 }; // Gateway (opcional)
byte subnet[] = { 255, 255, 255, 0 }; // Mascara de subrede

EthernetServer server(80); //Cria o objeto na porta 80

void setup()
{
//-----------------------------valvula---------------------------------------------------------------------
pinMode(8, OUTPUT);
//-----------------------------sensor----------------------------------------------------------------------
//pinMode(A0, INPUT);


Ethernet.begin(mac, ip, gateway, subnet); //Inicializando a ethernet
server.begin(); //Inicializando o servidor web

}

void loop()
{
EthernetClient client = server.available(); //
if (client) {
// uma requisição http termina com uma linha em branco
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read(); // Recebe caractere do browser e guarda em "c"
// Se chegamos ao fim da linha (recebeu uma nova linha
// de caractere) e a linha está em branco, a requisição http termina
// para que possamos enviar uma resposta!
if (c == '\n' && current_line_is_blank) {
// envia um cabeçalho padrão de resposta HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
break;
}
if (c == '\n') {
// Se começamos uma nova linha...
current_line_is_blank = true;
}
else if (c != '\r') {
// Se ainda temos um caractere na linha atual...
current_line_is_blank = false;
}
}
}

client.println("<html>"); //Início do código HTML
client.println("<font face='arial' size='4' color='green' >TCC</font><hr>"); //Exibe texto com formatação

//-----------------------------Sensor---------------------------------------------------------------------
//int valor_umidade;
//boolean solenoide_aberta = false;


umidade = analogRead(A0); // Leitura do pino analogico correspondente ao sensor
int Porcento = map(umidade, 1023, 0, 0, 100);


client.println("<h1>"); //Inicio do cabeçalho H1
client.print(Porcento); //Exibe a Umidade
client.println("%");

if (Porcento <=50) {
client.println("Irrigando...");
digitalWrite(8,HIGH);

}
else {
digitalWrite(8, LOW);

}
delay(1000);

//-----------------------------Sensor---------------------------------------------------------------------

client.println("<HEAD><meta http-equiv=""refresh"" content=""5""><TITLE>Arduino EtherEncLib.h </TITLE></HEAD>"); //atualiza a pagina
client.println("</html>"); //Fim do código HTML
}
// Damos ao navegador um tempo para receber os dados
delay(1);
client.stop();// Fecha a conexão
}

Exibições: 3108

Anexos

Responder esta

Respostas a este tópico

Esse código que postou é para "página ficar dentro do arduino".

Tem ideia do que está fazendo? Conhece a plataforma?

Sim esse é pra ficar dentro do Arduíno, quado digito o ip do arduino no meu browser aparece as informações que eu quero normalmente, porém a minha duvida é que não consigo fazer  a minha aplicação(WebService) comunicar com o arduino apesar de criar todos os métodos de conexão na aplicação java, não sei como fazer para que o arduino receba essa conexão. E respondendo a sua pergunta não conheço a plataforma do arduino muito bem, é meu primeiro contato com arduíno por isso tantas duvidas! 

Já que está usando ethernet shield, testa socket no java (webserver) e arduino em modo cliente.

Olá Amanda, você já conseguiu utilizar socket com Arduíno ?

Sim no php para enviar comandos ao arduino.

Ola amanda, vejo que tem participado bastante dos post contendo socket.... parabens.. mas tenho uma duvida tambem...

E possivel usando socket, o arduino fazer a função de client ou seja ele tomar a iniciativa da primeira comunicação, buscando assimo servidor php?

Se entendi, você gostaria que o arduino enviasse algo para o php/java/etc e depois esse php/java/etc retornasse algo, é isso?

Se for isso não vejo problemas, pode acontecer normalmente.

ok, tenho o ex, do arduino como servidor socket, mas nao como cliente e nem do wamp como server  em php.

teria algo ex, para indicar o passar ?

Desde de ja agradeço sua respostas e prontidão em ajudar-nos.

Grato.

Antes de tudo wamp não é servidor, é um tipo de pacote que instala php, mysql e apache. Apache é o nome correto do servidor php.

Primeiro tu tem que acessar o recurso que tu criou em php. Basicamente vai usar isso: https://www.arduino.cc/en/Reference/EthernetClient

Mas tem que adaptar esse código, ali no GET vai o caminho onde está o script php que vai "pegar" os valores que tu está passando no URL. Vai passar o caminho mais os parâmetros, algo tipo isso:

client.print("GET /diretorio/receber.php?valor1=");

client.print(Variavel);

client.print("&valor2=");
client.print("1");
client.println(" HTTP/1.1");

client.println("Host: 200.58.192.99");
client.println("User-Agent: arduino");
client.println("Accept: text/html");
client.println();

Nesse exemplo está passando dois parâmetros, um que vem de uma variável e outro fixo. Tem que adaptar a necessidade. Pode passar um parâmetro ou vários.

Depois no mesmo arquivo php pode responder com socket usando o ip que recebeu do arduino. Ou pode salvar esse ip e usar posteriormente. Se forem existir mais de um arduino/ethernet shield, acho melhor passar pelo menos dois parâmetros, o ip e uma descriçãoo para saber qual é o arduino que comunicou. 

Olá,

Vejo que o IP 192, 168, 0, 102 não está na mesma rede que o gateway 192, 168, 1, 1 e nem tenho ideia de qual o IP de quem está enviando o Request, devem estar na mesma rede, ou seja, os 3 primeiros numeros do IP, gateway devem combinar.

Outra coisa: quando seu PC envia o request, envia um cabeçalho e voce deve tratar adequadamente. Seria interessante estudar o cabeçalho do websocket em vez de ignorar. O que está no seu codigo funciona para request normal GET.

Boa sorte,

  'Eiju

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço