?>

Library DHCP e DNS para Arduino
  October 9th, 2011 by Rafael Quines

Para todos que fazem projetos com o arduino usando a EthernetShield, provavelmente já tiveram a necessidade de usar os recursos de DHCP e DNS. Finalmente consegui encontrar para meus projetos uma library confiável, e que realmente funciona para atender isso.

Para quem não sabe, DHCP é um protocolo de rede que permite aos computadores (ou dispositivos) conectados a uma rede, receber suas configurações de rede automaticamente a partir de um servidor central, sem que você precise configurá-los manualmente. Já o DNS é um sistema de gerenciamento de nomes x IPs. Ele é o responsável por traduzir uma URL qualquer, em um endereço IP. Esse endereço IP é essencial para acessarmos qualquer coisa na internet.

Encontrei essas libraries no seguinte endereço:  http://gkaindl.com/software/arduino-ethernet. Depois de ter baixado e testado, comprovadamente funcionam. Ligando o arduino no meu Access Point, ele recebeu um ip da minha rede sem nenhum problema, além de configurações de máscara de rede, gateway e até servidor DNS. Logo após, fiz um teste de requisição para a página do google, porém, ao invés de passar o IP, simplesmente passei “www.google.com”, e a library funcionou como esperado: traduziu o nome em IP, e fez a requisição ao site… Parabéns ao desenvolvedor George Kaindl.

Segue o exemplo testado e aprovado…

#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDHCP.h>
#include <EthernetDNS.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.google.com";

const byte* ipAddr;
const byte* gatewayAddr;
const byte* dnsAddr;

void requisita() {
  byte serverIpAddr[4];
  DNSError err = EthernetDNS.resolveHostName(server, serverIpAddr);
  if (DNSSuccess == err) {
    Serial.print("IP: ");
    Serial.println(ip_to_str(serverIpAddr));
    Client client(serverIpAddr, 80);
    Serial.println("Conectando...");
    if (client.connect()) {
      Serial.println("Conectou...");
      client.println("GET / HTTP/1.1");
      client.println();
    } else {
      Serial.println("Conexão falhou...");
    }
    delay(100);
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
    }
    Serial.println("Desconectando...");
    client.stop(); //desconectando...
  } else if (DNSTimedOut == err) {
    Serial.println("Timeout...");
  } else if (DNSNotFound == err) {
    Serial.println("Host não existe.");
  } else {
    Serial.print("Código do erro: ");
    Serial.print((int)err, DEC);
    Serial.println(".");
  }
}

void setup()
{
  Serial.begin(9600);
  Serial.println("Obtendo ip...");
  EthernetDHCP.begin(mac);
  ipAddr = EthernetDHCP.ipAddress();
  Serial.print("IP obtido: ");
  Serial.println(ip_to_str(ipAddr));
  gatewayAddr = EthernetDHCP.gatewayIpAddress();
  Serial.print("Gateway: ");
  Serial.println(ip_to_str(gatewayAddr));
  dnsAddr = EthernetDHCP.dnsIpAddress();
  Serial.print("DNS: ");
  Serial.println(ip_to_str(dnsAddr));
  EthernetDNS.setDNSServer(dnsAddr);
}

void loop()
{
  EthernetDHCP.maintain();
  requisita();
  delay(5000);
}

const char* ip_to_str(const uint8_t* ipAddr)
{
  static char buf[16];
  sprintf(buf, "%d.%d.%d.%d\0", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3]);
  return buf;
}

Segue link para download das Libraries DHCP e DNS: DOWNLOAD

This entry was posted on Sunday, October 9th, 2011 at 23:21 and is filed under Arduino, Library. You can follow any responses to this entry through the RSS 2.0 feed.You can leave a response, or trackback from your own site.

5 comentários

October 10th, 2011 at 9:58
Lúcio Corrêa disse:

E o bom, é que essas libs já fazem parte do Arduino 1.0.

Abraço.

November 12th, 2011 at 10:25
tsukiyahot disse:

eccerslere981

February 2nd, 2012 at 14:41
cleo disse:

Pessoal,
Acesse o site da EMPRETECNET, eles fabricam um KIT com uma placa compatível com arduino duemilanove, uma placa de rele, de potenciômetro, de sensor de luz, de sensor de luminosidade, de buzzer, de botão e demais componentes que podem ser realizados vários experimentos sem a necessidade de solda. Qualidade excelente!!

July 30th, 2012 at 23:42
gabriel catitu disse:

Quando faço o upload ocorre erro em “DNSError err = EthernetDNS.resolveHostName(server, serverIpAddr)”, sera que tenho problemas na EthernetDHCP.h?

October 17th, 2013 at 18:52
macintosh computers disse:

You know as a result significantly with regards to this particular topic, created my family on their own believe it coming from a great number of a number of facets. Its such as people will not be curious right until it’s think about execute by using Person crazy! Your own items awesome. All the time keep it upward!

Deixe um comentário