Olá a todos,


sou novo com Arduino. Estou procurando um meio de checar uma URL específica (ex. http://www.meudominio.com.br/arduino/?check) por exemplo. E nessa página eu passo uma informação pro arduino pra ele executar alguma coisa.

Algúem sabe mais ou menos onde eu encontro coisas desse tipo?

Obrigado.

Luciano

Exibições: 2766

Responder esta

Respostas a este tópico

Olá,

basicamente você deve usar a lib de dns como no exemplo que tem no próprio arduino Examples>Ethernet>DnsWebClient nesse exemplo na linha 23 [char serverName[] = "www.google.com";], você vai trocar www.google.com por www.meudominio.com.br e na linha 46 [client.println("GET /search?q=arduino HTTP/1.0");] voce troca o "/search..." por /arduino/?check por exemplo.

O que você precisa entender e que o arduino não tem um biblioteca http pronta e sim um biblioteca tcp (não estou afirmando isso, mas com base no que eu vi até agora, essa informação confere), isso quer dizer que toda requisição http (GET, POST)  terá que ser implementada no "braço" dentro do seu arduino, isso não é um agravante só tem alguns inconvenientes, quanto você faz esse GET do exemplo acima em seu servidor web você diz para ele responda "lampada=on", mas quando você faz um client.read() no seu arduino recebera várias linhas de informação do protocolo http (ex: "Content-Type: text/html") e só depois o "lampada=on", mas usando as funções de String(WString) do arduino acredito que não tera maiores problemas.

Outra fonte de pesquisa é esse projeto do cara usando arduino+php+android http://rafaelgimenes.net/2010/05/28/arduino-ethernet-shield-rele-lc....

Espero ter ajudado.

Abs

Uma pergunta... vc está utilizando uma Ethernet Shield? como está essa ligação física e lógica?

Conforme o Janderson... se vc estiver usando um Ethernet Shield "nunca usei isso" ou algo parecido... então vc deve estar usando o arduino como um "pseudo servidor" então deve seguir a dica do Janderson... já q vc deverá verificar as requisições e tratar e validar as Strings que chegam direto no ARDUINO.

Agora se vc tiver ligando o Arduino via serial no seu computador e o seu computador estiver rodando um PHP ou JAVA... creio que será melhor vc validar estas requisições diretamente na linguagem utilizada que é bem mais fácil e correto de se fazer... e assim após validação passar para o Arduino via serial o comando específico que ele deve executar.

Qualquer coisa é só teclar! :D

Sim, estou usando o Ethernet Shield. Preciso ir pegar informações em um PHP que eu tenho em meu servidor, tratar essas informações e realizar algumas ações com o arduino. Mas do mesmo jeito que o Janderson disse, eu coloco o meu domínio e ele da uma mensagem de que a página foi movida... o mesmo acontece quando eu utilizo o IP direto. Não se se é o tipo de requisição que ele faz, ou o que pode ser, mas ele não está conseguindo ler o http. Mas mesmo assim, vou continuar minhas buscas. Obrigado Janderson e Leonilde.

Quer passar a pagina que ele ta fazendo a requisição? e o codigo que está no seu arduino pra testar? Na verdade o arduino com ethernet shield vai fazer a mesma coisa que telnet meusite.com.br 80.

Manda aí que damos uma olhada pra ver se achamos o problema.

Abraço!

ve se te ajuda amigo

int open = 5;
int close = 6;

#include <WiServer.h>


unsigned char local_ip[] = {192,168,1,3};    // IP address of WiShield
unsigned char gateway_ip[] = {192,168,1,1};    // router or gateway IP address
unsigned char subnet_mask[] = {255,255,255,0};    // subnet mask for the local network



// IP Address
uint8 ip[] = {192,168,1,2};


// criando request object
GETrequest getData(ip, 80, "sdria.com.br", "/arduino/dados_mysql.php?valor=4");



void displayData(int numberToDisplay) {
        digitalWrite(open, LOW);
       
        digitalWrite(close, HIGH);
       
        delay(1);
}

Estou empolgado com esse Shield... vou parar de comprar pão e juntar grana até ter dinheiro pra comprar um pra mim. :D

Uma outra sugestão é colocar um servidor MQTT no meio. MQTT é um protocolo simples e leve, criado especificamente para comunicação com dispositivos como o Arduino. No caso, ao invés de fazer o Arduino checar uma URL específica, o seu servidor "publicaria" uma mensagem (comando) ao servidor MQTT, que seria "ouvida" pelo Arduino.

A vantagem de usar o MQTT é que você não precisaria se preocupar com os detalhes da comunicação (como, por exemplo, ficar checando o servidor via HTTP). Além disso, o envio e recebimento de mensagens ficaria muito simples, com apenas algumas linhas de código. A implementação no servidor também fica mais simples, pois você enviaria a mensagem apenas quando necessário.

Cliente MQTT para Arduino:

http://knolleary.net/arduino-client-for-mqtt/

Cliente MQTT para PHP:

https://github.com/bluerhinos/phpMQTT

Servidor MQTT para Linux:

http://mosquitto.org/

Mais informações sobre MQTT em geral:

http://mqtt.org/

Bom dia Pessoal. Estou fazendo a automação da minha casa, estou montando interruptor touch, fazendo a programação em matriz, vou usar 3 arduinos mega se conectando via rede. Estou tendo um problema com parte da programação, parte dela esta abaixo, por exemplo eu digito no browser 192.168.0.150:8090/ligado=0f, todo este endreço eu preciso somente do valor digitado entre o sinal de igual(=) e a letra f, que á e posição da matriz onde se encontra a porta do rele, até ai tudo bem, o valor é extraído. O problema é que ele faz isso 10 vezes, ou seja liga/deliga o rele 10 vezes sempre, coloquei várias condicionais para fazer uma so fez mas não esta dando certo. Se alguém puder me ajudar eu ficaria muito agradecido



#include <SPI.h>
#include <String.h>
#include <Ethernet.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x36 }; // Endereço Mac
byte ip[] = { 192, 168, 0, 150 }; // Endereço de Ip da sua Rede
EthernetServer server(8090); // Porta de serviço
String readString;
String HoraLiga;
int rele[] =  {6,7};
boolean statusrele[] = {1,2};
int relecont = 2;
void setup()
{
  Ethernet.begin(mac, ip); // Inicia o Ethernet
   Serial.begin(9600); // Inicia a comunicação Serial
 
  for (int i = 0; i < relecont; i++)
  {
    pinMode(rele[i],OUTPUT);
    digitalWrite(rele[i],HIGH);
    statusrele[i] = false;
   }

}
void loop()
{
 
 EthernetClient client = server.available();// Criar uma conexão de cliente
 if (client)
 {
  while (client.connected())
  {
    if (client.available())
    {
      char c = client.read();
     
        if (readString.length() < 30)// ler caractere por caractere vindo do HTTP
        {       
           readString += (c);
      }
        if (c == '\n')
        {
          if(readString.indexOf("ligado") > 0)
          {
            int posIgual = readString.indexOf("=") + 1;
            int posE = readString.indexOf("f");
            int horaliga;
         
            HoraLiga = readString.substring(posIgual,posE);
            horaliga = HoraLiga.toInt();
          
            digitalWrite(rele[horaliga], !statusrele[horaliga]);
            statusrele[horaliga] = !statusrele[horaliga];
       
            
            Serial.print(horaliga);
            
            delay(200);
            readString="";
             
            client.stop();
         

vc esta uzando 3 arduino ?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço