arduino com página para configurar ip e salvar na eeprom

722 views
Skip to first unread message

Sergiolinux

unread,
Aug 15, 2013, 2:54:43 PM8/15/13
to hacker...@googlegroups.com
Oi pessoal, 
estou tentando fazer uma página no arduino onde possa configurar o ip e salvar na eeprom.


o problema é que é para a shild de rede com o w5100, bem mais caro, grande e inviável para usar com o "arduino" standalone (aprendi nas palestras do garoa....rs) e eu gostaria de usar a shild enc28j60.

Será que algum tem algo ou pode me ajudar?

Abraços.

Sergio Augusto Vladisauskis

unread,
Aug 15, 2013, 3:13:18 PM8/15/13
to hacker...@googlegroups.com
Gostei do projeto e acho que a w5100 não é tao cara assim, comprei a minha por R$50 no ML.

--
Sergio Augusto Vladisauskis
-> Oportunix IT Services Brasil - ME
-> Site: http://www.facebook.com/oportunix
-> Fone: +55 (11) 4221-8163
-> Móvel: +55 (11) 9-5308-7965 [Vivo]
-> Skype: oportunix
-> Registered Linux User: 305281


--
.--. .- .-. .- .--. --- ... - .- .-. . ... -.-. .-. . ...- .- .--. .- .-. .- .... .- -.-. -.- . .-. ... .--. .- -.-. . ... .--. .- - --. --- --- --. .-.. . --. .-. --- ..- .--. ... -.. --- - -.-. --- --
Regras da Lista: http://garoa.net.br/wiki/Lista:LeiaAntesDeClicarNoSend
Para mais informações sobre o Garoa Hacker Clube acesse http://garoa.net.br
Maiores opções sobre o Google Groups, visite: http://groups.google.com/group/hackerspacesp
.--. .- .-. .- -- .- .. ... .. -. ..-. --- .-. -- .- . ... .- -.-. . ... ... . --- .-- .. -.- ..
Epoch 0 <=> Fundação: 1298244863 s ~ 2.408064*10^52 tP (tempos de Planck)
 

DQ

unread,
Aug 15, 2013, 3:38:47 PM8/15/13
to hacker...@googlegroups.com
Não sei a que palestra você se refere, mas a minha visão pessoal é que a shield enc28j60 é inadequada para qualquer coisa mais sofisticada. Não se o que inviabilizaria o seu uso com um arduino "standalone".

Se a sua aplicação precisar de uma comunicação ethernet mais pesada, talvez seja o caso de ir para um "mini-pc" como o Raspberry Pi ou Beaglebone.

DQ

DQ

unread,
Aug 15, 2013, 3:40:20 PM8/15/13
to hacker...@googlegroups.com
Ops a segunda frase deveria ser "não sei o que inviabilizaria o uso da placa com o w5100 ....".

DQ

Fernando M.

unread,
Aug 15, 2013, 4:47:00 PM8/15/13
to hacker...@googlegroups.com
eu rodei uma página no arduino usando o enc28j60, mas foi só um teste e não sei dizer sobre funcionalidade ou robustez. Se não me engano foi usando um código originalmente feito pro w5100.

Fernando - fag...@gmail.com


--

Emerson William dos Santos Moura

unread,
Aug 15, 2013, 5:10:01 PM8/15/13
to hacker...@googlegroups.com
Shield w5100 tá US$14 (R$35,75) no DX e US$11 (R$28,10) no eBay.
Valores aproximados em R$ para compras com Paypal (+3,5%) e pago com
cartão (+6,38% de IOF).
--
Emerson W.S.Moura

Emerson William dos Santos Moura

unread,
Aug 15, 2013, 5:14:42 PM8/15/13
to hacker...@googlegroups.com
Só pra constar os links que achei:


Na DX:
<http://dx.com/s/w5100>
http://dx.com/s/w5100


No eBay:
<http://bit.ly/19lbYYX>
http://bit.ly/19lbYYX


Mas vale lembrar: Leva de 20 dias a 3 meses pra chegar (dependendo
principalmente do serviço dos correios brasileiros).




Em 15 de agosto de 2013 18:10, Emerson William dos Santos Moura
<emers...@gmail.com> escreveu:
--
Emerson W.S.Moura

Sergiolinux

unread,
Aug 15, 2013, 6:34:17 PM8/15/13
to hacker...@googlegroups.com
Pessoal, 

é que estou pensando em fazer a placa com o atmega e não gostaria de colocar uma shild de arduino,
procurei alguma shild com o w5100 tão pequena como a enc28j60 mas as que encontrei saem por $30 fora o frete de $16.

Mas com a ajuda de todos vocês estou começando a ver que realmente a melhor opção é a w5100.

Até encontrei um rapaz na internet que vende um controlador de reles e utiliza a enc28j60 e vende o código por R$ 500 (é o trabalho dele), mas para hobby não dá né?

DQ, a palestra a que me refiro é aquela oficina onde nós montamos o atmega na protoboard, foi ai que entendi o que arduino e o que atmega e vi que não precisava pagar caro (a 2 anos atrás o arduino era bem carinho) para brincar com arduino, e na verdade a salvação da lavoura foi o garagino (projeto seu né?).

Vou continuar mais um pouco com o enc28j60 pois o projetinho não é robusto, é só para ver a temperatura de uma sala, mas queria muito poder alterar o ip.

Assim que tiver algo, posto para vcs.

Parabéns a todos pelo GAROA e obrigado.

Sérgio

Emerson William dos Santos Moura

unread,
Aug 15, 2013, 7:04:09 PM8/15/13
to hacker...@googlegroups.com
Estranhamente, módulos W5100, que não são shields Arduino, são mais
caros (apesar de menores). Provavelmente questão de economia de escala
de produção.

Uma solução simples: Faça o projeto usando Arduino + shield W5100 e,
depois, faça sua própria placa com os chips Atmega + W5100, apesar que
soldar o chip SMD W5100 requer alguma prática.

Outra possibilidade é fazer o projeto usando Arduino + shield ENC28J60
(que é ainda mais barato que o shield W5100) e, depois, fazer a sua
placa com o Atmega ligada a um módulo (não shield) com o ENC28J60, que
custa praticamente o mesmo preço do chip W5100 sozinho.


Encontrei esse conjunto no eBay por US$19 com transporte (R$49,00 -
valor de Paypal + IOF), mas não sei como funciona:

<http://bit.ly/1eNnfSC>
http://bit.ly/1eNnfSC

Sergio Augusto Vladisauskis

unread,
Aug 15, 2013, 8:32:17 PM8/15/13
to hacker...@googlegroups.com
E que tal uma placa já com os 2 chips juntos: https://www.sparkfun.com/products/11229

--
Sergio Augusto Vladisauskis
-> Oportunix IT Services Brasil - ME
-> Site: http://www.facebook.com/oportunix
-> Fone: +55 (11) 4221-8163
-> Móvel: +55 (11) 9-5308-7965 [Vivo]
-> Skype: oportunix
-> Registered Linux User: 305281


Sergiolinux

unread,
Aug 15, 2013, 9:19:51 PM8/15/13
to hacker...@googlegroups.com
Caraca, onde tá o Atmega nessa placa???? É aquele chipsinho minusculo???
Nossa...

Então, tenho o garagino, arduino, shild w5100 e shild enc29j60...o problema agora é o conhecimento em programação...rsrs

Preciso fazer um curso de C urgente...rs

Abraços.

Sergio Augusto Vladisauskis

unread,
Aug 15, 2013, 9:25:16 PM8/15/13
to hacker...@googlegroups.com
Sim xara! As novas versões das placas de Arduino são SMD: https://www.sparkfun.com/products/11286

--
Sergio Augusto Vladisauskis
-> Oportunix IT Services Brasil - ME
-> Site: http://www.facebook.com/oportunix
-> Fone: +55 (11) 4221-8163
-> Móvel: +55 (11) 9-5308-7965 [Vivo]
-> Skype: oportunix
-> Registered Linux User: 305281


Emerson William dos Santos Moura

unread,
Aug 16, 2013, 6:16:22 AM8/16/13
to hacker...@googlegroups.com
IMO, uma porcaria.

Sendo placa para experimentação, é fácil cometer um erro e queimar o
microcontrolador e, ao invés de trocar um simples componente DIP, é
obrigado a trocar a placa toda (a não ser que tenha técnicas
ninja-jedi com dessoldagem/soldagem de componentes SMD).

Ainda prefiro comprar clones baratos do Uno e usar shields diversos.




Em 15 de agosto de 2013 22:25, Sergio Augusto Vladisauskis
<serg...@gmail.com> escreveu:

André Oliveira

unread,
Aug 16, 2013, 6:27:44 AM8/16/13
to hacker...@googlegroups.com
E que tal uma que já tem Ethernet:

USB host:

Aceita os shields Arduino:

Emula um TK80

É "levemente" mais rápida que um Arduino (RX63N - 100MHz -1M de flash)

Entre outras firulas:



Sem esquecer que a família está crescendo!

Todo material está sendo traduzido para o inglês, em breve, novidades! Mas quem quiser se aventurar... custa 50 dólares:

[]s,

        André M de Oliveira

.oO ineptire est juris gentium Oo.
   http://int2float.blogspot.com



2013/8/15 Sergio Augusto Vladisauskis <serg...@gmail.com>

DQ

unread,
Aug 16, 2013, 6:45:12 AM8/16/13
to hacker...@googlegroups.com
Sérgio,

Agora eu entendi...

Eu ia sugerir um destes "Arduinos  Ethernet" mas o pessoal foi mais rápido.

Não acho que seja o caso de jogar fora a placa ENC28J60 que você já tem. Será que faria sentido configurar o IP através da serial? A biblioteca da ENC é bem atrapalhada para tratar páginas web. Imagino que alterar o IP seja uma tarefa bem ocasional. Uma outra opção é você colocar uma DIP Switch para selecionar uma parte do endereço. Por exemplo, se tiver pinos sobrando, você pode colocar uma de 8 chaves para escolher endereços de 192.168.0.0 a 192.168.0.255.

Apareça um dia lá Noite do Arduino que a gente faz algumas experiências (o Garoa tem uma placa ENC28J60).

DQ

Sergiolinux

unread,
Aug 16, 2013, 9:12:58 AM8/16/13
to hacker...@googlegroups.com
Tem razão Emerson, eu mesmo queimei um arduino duemilanove e como não encontrei o reguraldor de tensão correto acabei soldando uns fios e coloquei um 7805 mesmo...rsrs

Sergiolinux

unread,
Aug 16, 2013, 9:14:14 AM8/16/13
to hacker...@googlegroups.com
Muito obrigado DQ, vou amadurecer mais um pouco o código e com certeza vou fazer uma visita ao Garoa em novo endereço...rs
Pensei também um um telnet.....será que rola?

Abraços

Sergiolinux

unread,
Sep 2, 2013, 12:19:19 PM9/2/13
to hacker...@googlegroups.com
Olá pessoal, 

tenho trabalhado na página (não tanto quento gostaria), mas tenho:

1-uma pagina com um ip inicial - ok
2-um botão onde habilito o dhcp e salva essa opção na eeprom - ok (dá para acompanhar alguns prints na saida serial)
3-um botão FIXO onde envio uma uma url com os endereços e tudo mais - ok

OBS. Quando reset a placa ela volta a ter um ip fixo, está assim porque mandei escrever 0 na eeprom sempre que reinicia, mas isso vai virar um botão reset no futuro

Dúvida, alguém tem ideia de como ler essa URL e jogar para um array para que eu possa escrever na eeprom?
Ai estaria resolvido...rsrs

Segue código...Abraços e obrigado a todos...

Sérgio

----- inicio code

IDE 1.0.4

#include <EtherCard.h>
#include <EEPROM.h>

String versao = "--- VERSAO 3_4";

byte VarDHCP = 0; //IP INICIAL E FIXO SE POR 1 O IP SERA POR DHCP


// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };

byte Ethernet::buffer[1000]; // tcp/ip send and receive buffer
BufferFiller bfill;

const char http_OK[] PROGMEM =
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
    "HTTP/1.0 302 Found\r\n"
    "Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
    "HTTP/1.0 401 Unauthorized\r\n"
    "Content-Type: text/html\r\n\r\n"
    "<h1>401 Unauthorized</h1>";

static word ip() {
  
//$D = word data type
//$L = long data type
//$S = c string
//$F = progmem string
//$E = byte from the eeprom. 
  
  char* DHCP;
  VarDHCP = EEPROM.read(0);
  if ( EEPROM.read(0) == 0 ) {
    DHCP = "FIXO";
  } else {  
    DHCP = "DHCP";
  }
  
  bfill.emit_p(PSTR( 
    "<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"">"
    "<html><head><title>---</title>"
    "<meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"
    "</head>"
    "<body bgcolor=""#99CCFF"">"
    "<center>"
    "REDE:"
    "<hr />"
    "<form>"
    "<p>ENDERECO IP:<BR>"
    "<input name=ip1 type=text value=""192"" size=2 maxlength=""3"">"
    "<input name=ip2 type=text value=""168"" size=2 maxlength=""3"">" 
    "<input name=ip3 type=text value=""1"" size=2 maxlength=""3"">"
    "<input name=ip4 type=text value=""155"" size=2 maxlength=""3"">"
    "<BR>"
    "MASCARA: <BR>"
    "<input name=mk1 type=text value=""255"" size=2 maxlength=""3"">" 
    "<input name=mk2 type=text value=""255"" size=2 maxlength=""3"">"
    "<input name=mk3 type=text value=""255"" size=2 maxlength=""3"">"
    "<input name=mk4 type=text value=""0"" size=2 maxlength=""3""><br>"
    "<BR>"
    "<input name=""ipfixo"" type=""submit"" id=""ipfixo"" value=""FIXO"">"
    "</form>"
    "<form><input type=""button"" value=""DHCP"" onClick=""document.location.href='/?dhcp';""></form>"
    "<hr />"
    "<p>ATUAL: <font color=""#FF0000""><b> $S</b></font></p>"
    "<hr />"
    "</center></body></html>"),
  DHCP);
return bfill.position();
}
//"<form><input name=""dhcp"" type=""submit"" id=""dhcp"" value=""DHCP""></form>"
//"<form><input type=""button"" value=""DHCP"" onClick=""document.location.href='/?dhcp';""></form>"
//"<form><input type=""button"" value=""Voltar"" onClick=""document.location.href='/?menu';""></form>"


void setup(){
  EEPROM.write(0, VarDHCP); //GRAVA 0 NA EEPROM, SEMPRE QUE REINICIAR SERA IP FIXO, NO FUTURO ESSA LINHA SAI
  Serial.begin(9600);
  Serial.print("\n\n[REDE]");
  Serial.println(versao);


  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
    Serial.println( "Failed to access Ethernet controller" );
  
  VarDHCP = EEPROM.read(0);
//  Serial.println(VarDHCP);
    switch (VarDHCP) {
      case 0:
        Serial.println("IP FIXO");
        static byte myip[] = { 192,168,1,155 };
        static byte mymask[] = { 255,255,255,0 };
        ether.staticSetup(myip, mymask);
        Serial.println("IP: 192.168.1.155/24");
        break;
      case 1:
        if (!ether.dhcpSetup()){
          Serial.println("DHCP failed");
          } else {
          ether.printIp("IP:  ", ether.myip);
          ether.printIp("MASK: ", ether.mymask);
          ether.printIp("GW:  ", ether.gwip);  
          ether.printIp("DNS: ", ether.dnsip);
        }
        break;
      default:
        Serial.println("ERRO NA REDE");
    }

}

void loop(){

//  Serial.print("--- VarDHCP inicial: ");
  VarDHCP = EEPROM.read(0);
//  Serial.println(VarDHCP);
//  delay(1000);
  
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if (pos) { // check if valid tcp data is received // data received from ethernet
    delay(1);
    bfill = ether.tcpOffset();
    Serial.println("-- solicitacao de pagina positiva");
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else
    {
      data += 5;
        if (data[0] == ' ') {
           // Return home page
          ip();
        }
        else if (strncmp( "?dhcp" , data, 5 ) == 0)
        {
          VarDHCP = 1;
          EEPROM.write(0, VarDHCP);
          Serial.print("--- VarDHCP: ");
          Serial.println(EEPROM.read(0));
          delay(1000);
//          bfill.emit_p(http_Found);
        }
    }
       
    
    bfill = ether.tcpOffset();
    ether.httpServerReply(ip());
    delay(1000);
  }
  
/*
  if (ether.packetLoop(ether.packetReceive())) {
    memcpy_P(ether.tcpOffset(), page, sizeof page);
    ether.httpServerReply(sizeof page - 1);
  }
*/
}


----------------------- fim code 
Reply all
Reply to author
Forward
0 new messages