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
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por