IPAddress ip(192,168,1,1); vs byte ip[] = { 192,168,1,1 };

Questo e' l'esempio riportato nel reference

#include <Ethernet.h>
// network configuration.  gateway and subnet are optional.
 // the media access control (ethernet hardware) address for the shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
// the router's gateway address:
byte gateway[] = { 10, 0, 0, 1 };
// the subnet:
byte subnet[] = { 255, 255, 0, 0 };
EthernetServer server = EthernetServer(23);
//the IP address is dependent on your network
IPAddress ip(192,168,1,1);

void setup()
{
  // initialize the ethernet device
  Ethernet.begin(mac, ip, gateway, subnet);
.... Omissis
}

Mi sto dedicando alla ethernet perche' ho comprato Arduino proprio per far qualcosa con l'ethernet
Approdo ad Arduino UNO Rev. e IDE 1.0
Non conosco IDE precedenti
Dico questo perche una risposta tipo " quello era nella 022 " l'ho gia' avuta
Uno ci rimane spiazzato
Gli esempi riportano connessioni DHCP ed io mi sono incaponito che il DHCP non lo voglio
Ravana di qua , ravana di la' ho scoperto che esiste anche IPAddress dns(192,168,x,x)
Ma lo trovato a colpi di ricerca e non ditemi che l'esempio DnsWebClient dell'IDE e' illuminante
Di DNS non parla proprio ; dimostra unicamente che si possono risolvere i nomi

Per ritornare all'oggetto del messaggio non sono riuscito a trovare spiegazioni circa le 2 modalita'
Di solito vorrei anche capire , non mi basta prendere atto .

A caval donato non si guarda in bocca , ma l'Arduino l'ho comprato e pagato sicche' un po' piu' di chiarezza la pretenderei

Di libri in tanti anni ne ho comprati a quintali ; ho riesumato C e C++ salvati per miracolo dalla discarica
Comprerei volentieri anche dei libri pur di trovarci informazioni chiare , complete ed in italiano se possibile .

Anche il tutorial tradotto da Fabrizio Schiano e' abbastanza fuorviante quando parla del pin 10 per disattivare la eth e lavorare con la SD
Ma poi passa alla ethernet e del pin 10 non parla piu'

La mia piu' che una richiesta di aiuto era una considerazione sullo stato del'arte del sistema
Tante volte ci sono richieste un po' assurde ( tipo i 3 pin del potenziometro ) ma vedo anche molte incertezze dovute alla scarsa chiarezza dei reference sotto un certo punto di vista nache striminziti

NON uccidetemi

Questa più che una domanda, me pare uno sfogo :slight_smile:
Alla fine cosa volevi sapere?
ciao

pablos:
Questa più che una domanda, me pare uno sfogo :slight_smile:
Alla fine cosa volevi sapere?

Dici bene
Alla fine la domanda e' :
Dove posso trovare una documentazione degna di tale nome sulla Ethernet ?
Prova a guardare il reference di IPAddress
Ma altrettanto sulla SD
Non ho difficolta sulla stesura di un programma , lo faccio per mestiere su altri sistemi , ma se voglio convertire un numero in stringa ( puro esempio ) devo sapere dove documentarmi
Perche' se e' C o C++ tale deve essere .... ma se poi e' riadattato di qua' ed un po' anche di la' dovete convenire che diventa frustrante
Ad Arduino ci si approccia per studio e divertimento , non deve diventare un incubo =(
Cio non togli che la CPU possa essere usata per scopi professionali , mica solo per giocarci

Nel mezzo della performace logorroica avevo pero' scritto

Per ritornare all'oggetto del messaggio non sono riuscito a trovare spiegazioni circa le 2 modalita'
Di solito vorrei anche capire , non mi basta prendere atto .

Non ho difficolta sulla stesura di un programma , lo faccio per mestiere su altri sistemi , ma se voglio convertire un numero in stringa ( puro esempio ) devo sapere dove documentarmi
Perche' se e' C o C++ tale deve essere .... ma se poi e' riadattato di qua' ed un po' anche di la' dovete convenire che diventa frustrante

arduino la programmi con un c derivato, fatto appunto per essere più semplice.
Nulla però ti vieta di usare le classiche funzioni di c per conversioni, dichiarazioni, etc.

pitusso:
Arduino la programmi con un c derivato, fatto appunto per essere più semplice.

Quello che mi rende "frustrato" e' tanto per tornare al subject del TRD , che se vai come detto piu' sopra a vedere nel reference IPAddress trovi poco o niente
Che le due forme fossero compatibili lo ho preso come un dato di fatto perche lo ho visto negli esempi e lo ho provato
Che esistesse IPAdress ip ( xxx ) , gateway ( yyy ) e dns lo ho scoperto setacciando decine di post a colpi di Search
Nell'unico esempio che contiene la parola DNS , all'interno dello stesso e' menzionata unicamente nei commenti di testa
Come fa' un povero cristo a districarsi in mezzo a questo !
Spero di aver reso l'idea

brunol949:

Bruno sull'ethernet, per esperienza personale, c'è molto poco :
Tocca arrangiarsi ma c'è sempre il forum, nazionale ed internazionale, e molte persone competenti con una innata disposizione ad aiutare il prossimo :slight_smile:

Non sono in grado di rispondere alla domanda troppo approfondita sul dns, posso aiutarti a costruire un sketch con botte e risposte http, un piccolo server e alcuni piccoli protocolli, io me la sono sempre cavata in un modo o nell'altro cercando e cercando chiedendo e provando.
Purtroppo non hai comprato un tv color dove c'e' l'obbligo di un manuale con tanto di istruzioni utente, hai comprato un prototipo, una scheda sperimentale, un microcontroller pronto per essere programmato. Il tipo che ha pensato questa cosa l'ha fatto col proposito di darlo in pasto a noi te compreso per farne quello che vogliamo (anche un poggia pentola se ti pare :slight_smile: ). Non esiste un enciclopedia dettagliata esistono solo proggetti pubblicati da tanta gente, spiegati nei dettagli e a volte nemmeno spiegati, tanti forum di gente comune, oltre ai minimi dettagli per farlo funzionare messi dall'inventore, sei tu che devi avere le conoscenze approfondite di quello che vuoi fare, studiarti i chip dai DS, i protocolli e sperimentare, non te la puoi prendere perchè non esiste una documentazione precisa e perfetta, considera che se non ci fosse questo forum di hobbisti appassionati e proffessionisti non avresti nemmeno uno sfogo. Questo è il mio umile parere, poi qualsiasi correzione o contestazione io sono qui.

ciao

pablos:
Questo è il mio umile parere

Hai tutte le ragioni
Devo confessare che volevo inserire un post con questo soggetto :
Quanto QI serve per Arduino / Arduino e' per tutti ?

Intanto girovagando per il Playground ho visto che almeno un libro c'e'
Faro' qualche googlata per vedere cosa si trova
E' che sono stato allevato male :slight_smile: nei primi anni 80 con il primo approccio ai PLC arrivavano con manuale in Giapponese e Inglese
Poi sono arrivati anche le traduzioni ed erano manuali corposi con spiegazini dettagliate
Chiaro che con il costo di un Omron del tempo potremo comperare ARDUINI per mezza italia

Vabbe .. adesso che qualche idea su Ethernet me la sono fatta proseguiro inviando da terminale (ethernet ovviamente) qualche stringa ad ARDUINO per accendere e spegnere un paio di led da remoto
Poi ho trovato un altro paio di progetti per inviare e ricevere mail che provero di sicuro
Grazie per il sostegno morale :smiley:

E' che sono stato allevato male  smiley  nei primi anni 80 con il primo approccio ai PLC arrivavano con manuale in Giapponese e Inglese

Anche per me, ti capisco :slight_smile:

ciao

Bruno ma alla fine la questione del dns come l'hai risolta?
Sto provando ad implementarlo nel mio sketch ma non mi risolve l'indirizzo.

IPAddress dns(208,67,222,222); // open dns
char myserver[] = "https://pachube.com";

Nel setup:

Ethernet.begin(mac, ip, subnet, gateway, dns);

e nel loop:

if (client.connect(myserver, 80)) {ecc

Ovviamente se al posto di char myserver utilizzo:

IPAddress myserver(173,203,98,29);

Tutto funziona.

prova con www.pachube.com invece di https://pachube.com

Enter a host name via the Arduino Serial Monitor to have it resolved.
Resolving www.pachube.com....
The IP address is 216.52.233.122.

pablos:
prova con www.pachube.com invece di https://pachube.com

Nain. Non funziona.
Tra l'altro, a dirla tutta, a me non funziona nemmeno l'esempio nell'IDE 1.0.
Usando l'IP va tutto.
Aspettiamo bruno per sapere come se l'è cavata...

Enter a host name via the Arduino Serial Monitor to have it resolved.
Resolving www.pachube.com....
The IP address is 216.52.233.122.

Questa non l'ho capita... tra l'altro io uso un ip diverso:
173.203.98.29.

Cmq se analizzo la chiamata dell'arduino tramite whireshark vedo che la query per il dns di pachube viene fatta alla subnet 255.255.255.0 e non al dns.
Misteri!

0022 ho usato questo, ormai ho tutto fatto su questo ide, magari lo puoi adeguare con la 1.0

#if defined(ARDUINO) && ARDUINO > 18
#include <SPI.h>
#endif
#include <Ethernet.h>
#include <EthernetDNS.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 177 };
byte dnsServerIp[] = { 192, 168, 2, 1};
const char* ip_to_str(const uint8_t*);

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  Serial.println("Enter a host name via the Arduino Serial Monitor to have it " "resolved.");
 
  EthernetDNS.setDNSServer(dnsServerIp);
}

void loop()
{ 
  char hostName[512];
  int length = 0;
  
  while (Serial.available()) {
    hostName[length] = Serial.read();
    length = (length+1) % 512;
    delay(50);
  }
  hostName[length] = '\0';
  
  if (length > 0) {
    
    byte ipAddr[4];
    
    Serial.print("Resolving ");
    Serial.print(hostName);
    Serial.print("...");
 
    DNSError err = EthernetDNS.sendDNSQuery(hostName);

    if (DNSSuccess == err) {
      do {
        err = EthernetDNS.pollDNSReply(ipAddr);
			
        if (DNSTryLater == err) {
          delay(20);
          Serial.print(".");
        }
      } while (DNSTryLater == err);
    }

    Serial.println();

    if (DNSSuccess == err) {
      Serial.print("The IP address is ");
      Serial.print(ip_to_str(ipAddr));
      Serial.println(".");
    } else if (DNSTimedOut == err) {
      Serial.println("Timed out.");
    } else if (DNSNotFound == err) {
      Serial.println("Does not exist.");
    } else {
      Serial.print("Failed with error code ");
      Serial.print((int)err, DEC);
      Serial.println(".");
    }
  }  
}

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;
}

passerò alla nuova ide quando troverò qualcosa che non riesco a fare, ma per ora faccio tutto e funziona egregiamente

ferma ferma ferma...
#include <EthernetDNS.h>
?
Nell'IDE 1 non l'ho inclusa questa lib... e non sapevo nemmeno di doverla includere O_o
BTW anche io preferisco l'ide 22. E' incredibilmente più leggero del 1.0. (stesso sketch 2 k in meno).
Però sto lavorando ad un progetto che infilerò in una scatola e magari dovrò rimaneggiare tra molti mesi, se ci riesco voglio fare un porting all'1.0, sperando che se un domani qualcosa smette di funzionare potrò facilmente risolvere.

EDIT:
lo sketch sulla 22 funziona perfettamente (anzi mi ha fatto accorgere che l'ip è stato aggiornato).
La lib, stando a quanto ho letto, dovrebbe essere già inclusa nella lib ethernet dell'IDE 1.0.
Mo provo un porting e vediamo.

2EDIT: nada, nn riesco a farlo andare, eppure dovrebbe essere una cavolata.

Last Edit: ci sono riuscita, ecco il codice per chi in futuro ne abbisognerà.

IPAddress dns(208,67,222,222); // open dns
char myserver[] = "pachube.com"; 

void.setup()
  Ethernet.begin(mac,ip,dns,gateway,subnet);

void.loop()
    if (client.connect(myserver, 80)) {ecc..