attribuire ip a ethernet shield con fastweb... (?)

Ciao a tutti, mi è arrivata oggi la ethernet shield per arduino.
Sto cercando di configurarla ma, mentre da quanto ho capito configurare il mac è facile con l'ip ho qualche problema.
Io uso un macbook su una rete fastweb, e ho collegato anche arduino con un altro cavetto.
Qualcuno sa dirmi come scoprire che ip attribuirgli?
Vi ringrazio.

un ip a caso che non sia già in uso. però se usi fastweb in alcuni casi devi fartelo per forza assegnare via DHCP, e c'è una libreria apposta

Su PC si usa ipconfig da linea di comando per leggere il tipo di IP locale, su MAC non so...
La arduino deve avere un IP della stessa "famiglia" del router, senno' non va.
Se per esempio il tuo roouter è su 192.168.0.1, la arduino dovrà avere indirizzo 192.168.0.x con x da 2 a 254.
(all'incirca, in realtà le cose sono complicate...)

spieghiamo per bene.
Il gateway, è l'indirizzo dell'apparato che trasmette i dati su internet. La subnet mask, rappresenta quanti indirizzi (a partire da quello gateway) hai a disposizione per la rete locale.

Se il gateway è 192.168.1.1, e la subnet mask è 255.255.255.0, allora hai a disposizione tutta la fascia 192.168.1.X dove X va da 0 a 255.
Ovviamente non ci possono essere nella stessa rete 2 o più IP uguali, altrimenti avviene una collisione, di solito vengono disconnessi entrambi, o il più recente.
(questo è un esempio base, esistono subnet del tipo 255.255.40.0, per esempio, ma son reti molto particolari e di solito di uso aziendale)

tutte queste info le puoi trovare digitando nel terminale "ipconfig" in windows, "ifconfig" in unix (linux, mac, etc..)

Però la rete fastweb è particolare, negli HAG (o quel che l'è) vengono assegnati 4 indirizzi IP: è la famosa limitazione di avere al massimo 4 pc collegati con fastweb senza usare uno switch o un'altro router in cascata. Quindi devi usare il DHCP per forza per farti assegnare uno di questi 4 IP. Però so che ora distribuiscono normali router.

Dunque, da questa libreria dhcp ho visto che ip aveva il mio arduino.
http://www.mcqn.com/weblog/dhcp_and_dns_arduino
L'ho inserito nello script per inviare la posta sul playground italiano:
http://arduino.cc/playground/Italiano/Mail

Adesso si connette al mio account gmail a quanto pare, però dalla porta seriale mi vengono segnalati alcuni errori, chiedo aiuto qui perché non ho grande conoscenza della materia.

Program started, waiting for router...
Starting network module...
connecting...
connected
>>>HELO smtp.gmail.com
<<<220 mx.google.com ESMTP ******
250 mx.google.com at your service

>>>AUTH LOGIN 
<<<530 5.7.0 Must issue a STARTTLS command first. ****

>>>****
<<<502 5.5.1 Unrecognized command. ****

>>>****
<<<502 5.5.1 Unrecognized command. ****

>>>MAIL From:<****@gmail.com>
<<<530 5.7.0 Must issue a STARTTLS command first. ****

>>>RCPT To:<****@gmail.com>
<<<530 5.7.0 Must issue a STARTTLS command first. ****

>>>DATA
<<<530 5.7.0 Must issue a STARTTLS command first.****

>>>To: ***@gmail.com
<<<502 5.5.1 Unrecognized command.****

>>>From: ***@gmail.com
<<<502 5.5.1 Unrecognized command. ****

>>>Subject: Messaggio inviato da Arduino!
<<<554 5.7.0 Too Many Unauthenticated commands. ****

>>>
>>>Testo del messaggio
su piu'
di una riga.
>>>
>>>.
>>>QUIT

disconnecting.

[EDIT]Tolto EMAIL e altri dati privati. Ciao UWe Federer Moderatore[/EDIT]

Ho ance provato a creare una casella su libero, ma niente...

Program started, waiting for router...
Starting network module...
connecting...
connected
>>>HELO smtp.libero.it
<<<220 outrelay06.libero.it ESMTP Service ready
250 outrelay06.libero.it

>>>AUTH LOGIN 
<<<501 AUTH command unavailable

>>>****
<<<500 YXJk command unrecognized

>>>****
<<<500 cXdl command unrecognized

>>>MAIL From:<****@libero.it>
<<<530 authentication required for mail submission

>>>RCPT To:<****@gmail.com>
<<<503 RCPT command outside of MAIL transaction

>>>DATA
<<<503 DATA command outside of MAIL transaction

>>>To: ****@gmail.com
<<<500 To:  command unrecognized

>>>From: ****@libero.it
<<<500 From command unrecognized

>>>Subject: Messaggio inviato da Arduino!
>>>
>>>Testo del messaggio
su piu'
di una riga.
>>>
>>>.
>>>QUIT

disconnecting.

[EDIT]Tolto EMAIL e altri dati privati dal listing. Ciao Uwe Federer Moderatore[/EDIT]

Ciao,

allora per libero tu hai mandato in comando HELO.
Dovresti utilizzare EHLO, ossia il comando in cui chiedi che ti vuoi autenticare.

Crei la connessione al socket

ehlo localhost

auth login

e continui cosi' come hai fatto tu.

Prova con telnet dal pc.

Dovresti ottenere qualcosa del genere

ehlo localhost
250-outrelay07.libero.it
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 30000000
auth login
334 ..... risposta codificata base 64
username codificata base64
334 ..... risposta codificata server
password codificata base64
235 login authentication successful

Per quanto riguarda gmail ti chiede di inviare lo start per la criptazione dei dati TLS (Transport Layer Security), per cui da quel punto in poi vanno inviati i dati criptati. Non mi sembra sia stata implementato l' SSL su Arduino.

ATTENZIONE: cancella subito i dati di autenticazione che hai inserito... e cambia le password nei tuoi account di email.

Dato che stai facendo un nuovo progetto ti consiglio di utilizzare il nuovo IDE, dove trovi la libreria Ethernet rivista, che comprende gestione DHCP, DNS, ...
http://code.google.com/p/arduino/wiki/Arduino1

Ciao,
Marco.

Il codice sul Playground non funziona con Gmail, che richiede cifratura SSL, mentre quel codice usa la cifratura BASE64.

Ho provato con la mail di libero a invertire helo con ehlo, sembrerebbe funzionare adesso... ma poi la mail non arriva.
Ho controllato anche nella cartella spam.

Program started, waiting for router...
Starting network module...
connecting...
connected
>>>EHLO mail.libero.it
<<<
>>>AUTH LOGIN 
<<<****

>>>****
<<<****

>>>****
<<<235 LOGIN authentication successful

>>>MAIL From:<***@libero.it>
<<<250 MAIL FROM:<****@libero.it> OK

>>>RCPT To:<****@gmail.com>
<<<250 RCPT TO:<****@gmail.com> OK

>>>DATA
<<<354 Start mail input; end with <CRLF>.<CRLF>

>>>To:***@gmail.com
>>>From: ***@libero.it
>>>Subject: Messaggio inviato da Arduino!
>>>
>>>Testo del messaggio
su piu'
di una riga.
>>>
>>>.
<<<Per ulteriori informazioni, vai a: http://aiuto.libero.it/invioposta  

>>>QUIT
<<<221 outrelay06.libero.it QUIT


disconnecting.

Ho anche provato a usare la nuova ide ma non mi complila neanche lo script.

In file included from /Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Ethernet.h:6,
                 from inviare_posta.cpp:2:
/Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Client.h:3:23: error: WProgram.h: No such file or directory
In file included from /Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Ethernet.h:6,
                 from inviare_posta.cpp:2:
/Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Client.h:15: error: conflicting return type specified for 'virtual void Client::write(uint8_t)'
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
/Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Client.h:17: error: conflicting return type specified for 'virtual void Client::write(const uint8_t*, size_t)'
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:50: error:   overriding 'virtual size_t Print::write(const uint8_t*, size_t)'
In file included from /Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Ethernet.h:7,
                 from inviare_posta.cpp:2:
/Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Server.h:17: error: conflicting return type specified for 'virtual void Server::write(uint8_t)'
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
/Users/pietroleoni/Documents/Arduino/libraries/Ethernet/Server.h:19: error: conflicting return type specified for 'virtual void Server::write(const uint8_t*, size_t)'
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:50: error:   overriding 'virtual size_t Print::write(const uint8_t*, size_t)'

[EDIT]Tolto EMAIL e altri dati privati dal listing. Ciao Uwe Federer Moderatore[/EDIT]

credo ci sia un errore nella libreria, ovvero lui per andare a capo stampa solo LF (ovvero lo \n) metre viene richiesto CRLF (ovvero \r\n)

 SendMsg(Body); /* insert body */
     SendMsg(""); /* empty line */
     SendMsg("."); /* end mail */
     SendMsg("QUIT"); /* terminate connection */

cambialo in

 SendMsg(Body); /* insert body */
     SendMsg("\r"); /* empty line */
     SendMsg(".\r"); /* end mail */
     SendMsg("QUIT"); /* terminate connection */

in teoria, dopo aver fatto CRLF.CRLF il server dovrebbe rispondere col codice "250"

Continua a non riconoscerla, ma posso usare la vecchia ide per il momento, e fare a meno di gmail per usare libero.
Solo non capisco proprio dove sia il problema a questo punto visto quel che dice sulla porta seriale e la casella che invece resta vuota, con processing era facilissimo mandare mail. Uffa! :slight_smile:

Quando il server di libero risponde "Per ulteriori informazioni, vai a: http://aiuto.libero.it/invioposta " vuol dire ch la mail NON e' partita... ma non mi ricordo come si risolveva il problema...

ciao sono fastwebbino da 12 anni, questa compagnia fornisce di norma un hag con 3 porte lan che hanno un ip statico (sempre uguale )su ciascuna, quel coso non è ne un router ne uno switch, ci troviamo in una rete interna e non abbiamo ip pubblici raggiungibili dall'esterno.
i miei 3 ip sono gli stessi da 12 anni, tutti quelli che conosco con fw hanno sempre gli stessi ip.
Per l'ip pubblico statico ci sto lavorando, si vedrà.
Non usare myip da web non ti servirebbe, l'ip restituito non ha niente a che vedere col tuo pc , è solo assegnato provvisoriamente per farti uscire all'esterno, ma non per farti entrare.

Quindi un modo veloce per conoscere un ip è quello della porta collegata al tuo pc, cercalo con qualsiasi programmino sul pc che possa rivelarti l'ip della tua scheda lan, proprietà di rete ecc. (se non hai windows non so dirti come fare prompt dei comandi).
una volta trovato segnatelo e sposta il pc su un altra porta e collega arduino su quella dove era connesso il pc (sull' hag di fastweb)

togli momentaneamente per provare la righe sullo sketch che riguardano il subnetmask e il gatway.

Potrai accedere ad arduino in qualunque punto dell'Italia purchè ti trovi col client da un altro utente fastweb, da fuori è un pò più complicato.

Prova cosi' dovresti riuscire a connetterti

Per quello che riguarda la mail, se non ricordo male fastweb ci ha tolto la possibilità di collegarci ai server POP3 di altre società passando dai loro server, ma dobbiamo collegarci direttamente ai siti libero, virgilio, gmail ecc. Almeno per un po' di anni è stato così, se le cose sono cambiate tantomeglio.

ciao

confermo le parole di plabos, con la differenza che fastweb (a quanto pare non lo uso di persona) ultimamente non usa più gli HAG, ma dei veri e propri router, quindi in gradi di dare più di 3 IP (probabilmente per via del wireless).
questa limitazione sul POP3 non la conoscevo, ma stai usando dei server SMTP, quindi non so se l'affermazione è incompleta o non è quì il problema (comunque il fatto che riesci a connetterti è da considerarsi riprova che è possibile, salvo filtri mooolto bastardi)

il comando su unic e mac è da terminale "ifconfig", su windows da prompt dei comendi "ipconfig".

prova (sia linux, mac e windows) da terminale a digitare "telnet", è un programma che effettua una connessione TCP (esattamente come arduino). A questo punto A MANO provi a vedere se funzionano. ATTENZIONE: su windows, non puoi cancellare (a causa del sistema che utilizza, ogni carattere è immediatamente inviato, non attende l'invio), quindi conviene scriversi i comandi nel blocco note poi fare copia-incolla.

pablos71:
Quindi un modo veloce per conoscere un ip è quello della porta collegata al tuo pc, cercalo con qualsiasi programmino sul pc che possa rivelarti l'ip della tua scheda lan, proprietà di rete ecc. (se non hai windows non so dirti come fare prompt dei comandi).
una volta trovato segnatelo e sposta il pc su un altra porta e collega arduino su quella dove era connesso il pc (sull' hag di fastweb)

togli momentaneamente per provare la righe sullo sketch che riguardano il subnetmask e il gatway.

Potrai accedere ad arduino in qualunque punto dell'Italia purchè ti trovi col client da un altro utente fastweb, da fuori è un pò più complicato.

Mi sembrano complicazioni astrusamente inutili: non è Arduino a decidere che IP vuole?!? O con fastweb non si puo' fare?
Quanto all'accesso dall'esterno, cos'hanno che non va i servizi come mydns? A me funziona benissimo. O con fastweb non funzionano neanche quelli?

non è Arduino a decidere che IP vuole?!?

il sistema di assegnazione automatica dell'IP si chiama DHCP e NON è inclusa nelle librerie arduino. Esistono però delle librerie.

O con fastweb non si puo' fare?

si può fare, anzi è il metodo più semplice

O con fastweb non funzionano neanche quelli?

no, la rete fastweb è scollegata dalla rete internet tradizionale. possono comunicare a vicenda usando i gateway, però funzionano solo se la comunicazione parte dalla rete fastweb, oppure se stai utilizzando un IP pubblico, che normalmente fw fa pagare.

Ho letto qualche articolo dove dicono che se non hai l'HAG ma i "nuovi" router, a quel punto è come se fossi in internet tradizionale, ma non posso ne confermare ne smentire la notizia.

Ciao a tutti ho anch'io lo stesso problema di questo thread ma non capisco come risolverlo.
Ho un mac con osx lion, fastweb e la ethernet shield.
Ho provato ad inserire ip e mac address presi dal modulo di configurazione delle porte del sito di fastweb inserendolo nel codice di esempio, ma nulla da fare.
Ho anche provato la strada di scaricare ed installare la libreria DHCP (0.4) in Arduino e poi provare. Ricevo però un errore di compilazione che indica la mancanza di un file type.h.
Come fare? Vi ringrazio.
M

devi settare ancghe il gatewy che non è quello di default. cerca "terminale", aprilo e scrivici "ifconfig", otternai la configurazione completa del pc. copia gateway e subnet mask, entrambe cose impostabili nell'eth shield. poi mostraci l'output di questo comando da confrontare con la tua configurazione scelta (se non va) e vediamo cosa hai sbagliato.

Ciao Faraday,

innanzitutto grazie: da ieri sto impazzendo facendo tutti i tentativi possibili:

ecco l'output di ifconfig:

MacBook-Air-di-Manuel-Zompetta:~ manuelzompetta$ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 58:55:ca:f0:49:97
inet6 fe80::5a55:caff:fef0:4997%en0 prefixlen 64 scopeid 0x4
inet 192.168.1.129 netmask 0xffffff00 broadcast 192.168.1.255
media: autoselect
status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
ether 0a:55:ca:f0:49:97
media: autoselect
status: inactive
vboxnet0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 0a:00:27:00:00:00


Ecco il codice dello sketch:

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

const unsigned int DAYTIME_PORT = 13;
const unsigned int BAUD_RATE = 9600;

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte my_ip[] = { 192, 168, 1, 128 };
byte time_server[] = { 192, 43, 244, 18 }; // time.nist.gov
byte gateway[] = { 192, 168, 1, 255 };
byte subnet[] = {255, 255, 255, 0};

Client client(time_server, DAYTIME_PORT); //

void setup() {
Ethernet.begin(mac, my_ip, gateway, subnet); //
Serial.begin(BAUD_RATE);
}

void loop() {
delay(1000);
Serial.print("Connecting...");

if (!client.connect()) { //
Serial.println("connection failed.");
} else {
Serial.println("connected.");
delay(1000);

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

Serial.println("Disconnecting.");
client.stop();
}
}

Come indirizzo IP ho inserito quello che il dannato portale di fastweb mi indica essere l'indirizzo della porta 2 del router a cui è connesso il cavo ethernet che va alla shield arduino.

Il problema credo derivi dagli indirizzi IP: il .129 è della connessione wifi del pc; se lo imposto sulla shield si blocca il wifi del pc e cmq non funziona; se però leggo le porte del router ottengo risultati strani, cmq ho provato una marea di configurazioni.

Help me!

Ciao,

M

Ciao Faraday,

ho impostato il gateway a 192.168.1.254 ed ora il codice funziona.

La cosa strana è che nello sketch ho impostato come IP 192.168.1.128 ma sulla porta 2 del router a cui è connessa la scheda viene indicato questo indirizzo IP: 192.168.1.129 (che è invece quello con cui si connette il wifi del pc).

Non ci sto capendo nulla. Ora funziona ma non so perchè e soprattutto vorrei capirlo per rendere il tutto stabile. Grazie ancora,

M