Go Down

Topic: SHIELD - LENDO URL (Read 3209 times) previous topic - next topic

emersonalencar

Prezados, antes de colocar este post andei pesquisando no fórum, porém não encontrei um tópico que me ajudasse realmente. A situação é a seguinte: Estou desenvolvendo um projeto para a faculdade, nesse primeiro momento preciso enviar uma informação do sistema WEB para o arduino. O sistema que estou desenvolvendo é em Grails, como posso pegar uma informação? através da URL com?

Percei que o arduino quando acesso o sistema ele faz o papel de navegador, ler os dados HTML. Porém preciso passar para o arduino uma informação, tipo 0 ou 1.

Desde já agradeço.

Emerson Alencar

bubulindo

Se fores à pasta de exemplos do Arduino tens um exemplo para colocá-lo como cliente (ou seja como um browser) e um exemplo de como colocá-lo como servidor (acedes ao Arduino através do teu browser no computador).

Concordo que a pesquisa do fórum é má... mas uma pesquisa na net devolve resultados suficientes sobre como fazê-lo. Olha aqui:

http://sheepdogguides.com/arduino/art5simpsrv.htm
http://bildr.org/2011/06/arduino-ethernet-pin-control/

Não percebi o que era o Grails... ou o que é a linguagem de programacão groovy e assumo que JVM seja Java Virtual Machine. Nesse campo, infelizmente, não te consigo ajudar.

Experimenta estes exemplos que meti em cima e vê se já serve para o que pretendes. Experimenta primeiro com um browser e/out tenta aceder a um servidor externo e depois interliga com o tal Grails.
Se tiveres mais dúvidas, coloca aqui.

This... is a hobby.

emersonalencar

Prezado bubulindo, muito obrigado pela resposta. A minha situação é a seguinte, no exemplo 2 que você me sugeriu, o próprio arduino é a página que tem os valores a serem passados. Porém eu preciso que o servidor seja um outro computador, um outro endereço.

Atenciosamente,

Emerson Alencar

bubulindo

Então, precisas de usar o exemple WebClient.

Tem lá tudo o que necessitas para ligares o arduino a um servidor.
This... is a hobby.

emersonalencar

É isso mesmo, preciso me conectar a um servidor. O problema é que eu preciso pegar uma informação desse servidor, tipo "On" ou "Off", para ligar ou desligar o LED.

Os exemplos que vejo a página HTML está no próprio Arduino, mas eu quero que o arduino acesse uma URL e pegue essa informação. Entende? Não sei como fazer isso.

bubulindo

Se calhar o meu
o exemplo WebClient.
é diferente do teu... no meu caso, eu ligo-me a um dos servidores do google, peco para fazer uma pesquisa por Arduino e devolvo os resultados para o ecrã.

Se não tens o exemplo, fica aqui:

Code: [Select]
/*
  Web client

This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 18 Dec 2009
modified 9 Apr 2012
by David A. Mellis

*/

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(173,194,33,104); // Google

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}


Agora, se trocares o servidor pelo que estás a usar agora... e a página pela página que pretendes acessar... consegues algum resultado. Depois apenas tens de ler e fazer parsing da string.

Estás a ver o que eu estou a dizer?
This... is a hobby.

emersonalencar

Tenho duas dúvidas:

1) Meu arduino não está numa rede com DHCP, como faço para colocar um IP estático nele?

2) Após ler a página como colocar a informação dentro de uma variável?

bubulindo

1: http://arduino.cc/en/Reference/EthernetClient

2: Que é que a página vai enviar? Já fizeste string parsing nalguma linguagem?
This... is a hobby.

emersonalencar

Prezado bubulindo,

Pronto Já coloquei o IP Fixo no arduino e estou conseguindo pingar nele.

Poderia me dá um exemplo de como fazer string parsing??

Emerson Alencar

bubulindo

Hmmm...

Estou a ver que programação não é o teu forte, então em vez de fazer um exemplo à sorte que em nada te irá ajudar, que tal se meteres aqui o que a página web vai devolver para o Arduino fazer string parsing e eu coloco um código que o faça para experimentares?
This... is a hobby.

emersonalencar

Prezado Bubulindo,

Na verdade sou estudante, e estudo programação a pouco tempo, alguns termos ainda não novos para mim.

Bom estou anexando uma tela. Tem um botão ligar e outro desligar. Quero quando apertar o ligar ele envie ao arduino uma informação tipo: "ON" e o Arduino recebendo essa informação ele irá ligar o led. Para ligar o led, essa parte eu sei fazer, o problema é como pegar esse ON e colocar em uma variável. Não estou fazendo o sistema em PHP, estou fazendo em GRAIL (groovy=java).

Porém todos os exemplos que vejo, a página em HTML está dentro do arduino, mas o que eu quero é que um site externo possa passar essa informação ao arduino.

Já consegui que o arduino leia a minha url, só que a palavra "ON" aparece lida pelo arduino, mas como armazena-la numa variável??

Desde já muito obrigado!

bubulindo

O Arduino vai aceder a um servidor... e esse servidor vai enviar algo para o Arduino.

Isto pode ser simulado com um browser e é isto que eu queria ver. Texto...

Já tens essa parte a funcionar?
This... is a hobby.

emersonalencar

SIm...

O arduino já consegue ler .. como um Browser ....

Já tenho isso ..

emersonalencar

Este é meu código do Arduino que ler minha página:
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {  0x00, 0xAB, 0xCB, 0xCD, 0xDE, 0x02 };
IPAddress ip(189,80,213,213);
//IPAddress server(173,194,70,103);
IPAddress server(189,80,213,210);
EthernetClient client;

void connect(){
   if (client.connect(server, 80)) {
       Serial.print("Make a HTTP request ... ");

       //client.println("GET /search?q=arduino HTTP/1.0");
      client.println("GET /projeto/ControleLed/receberEstadoAtual/");
         
           //client.println("HOST: 189.80.213.210");
       client.println();

       Serial.println("okk");

     }
     else {
       // kf you didn't get a connection to the server:
       Serial.println("connection failed");
   }

}
     

void setup() {
   Serial.begin(9600); 

   Serial.print("Setup LAN ... ");
   // give the Ethernet shield a second to initialize:
   delay(1000);
   Ethernet.begin(mac, ip);
   Serial.println("oks");
   delay(1000);


   connect();


}

void loop(){

if (client.available()) {
    char c = client.read();
    Serial.print(c);
     
   
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    delay(3000);

    connect();
  }   

}

bubulindo

E o que é que aparece no serial monitor quando corres este código?
This... is a hobby.

Go Up