Go Down

Topic: [Risolto] Arduino UNO e Ethernet Shield W5100: non funziona (Read 10303 times) previous topic - next topic

LoadDuinoUNO

Salve a tutti, sono nuovo nel forum Arduino.

Ho attacato un Ethernet Shield non originale ad Arduino UNO (originale).

Lo sketch che ho caricato è questo:
Code: [Select]

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

//DETERMINA IL MAC E L'IP DELLA PAGINA WEB
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
byte ip[] = {
  192, 168, 1, 75};

//PORTA DI COMUNICAZIONE
EthernetServer server(272);

//SCRIVE IL NUMERO DI PIN CORRISPONDENTE AI LED
int ledPin1 = 9;
int ledPin2 = 8;

//LUNGHEZZA DELLA STRINGA INVIATA
String readString = String(30);

//IMPOSTA ALL'AVVIO I LED SPENTI
boolean LEDON1 = false;
boolean LEDON2 = false;

void setup(){
  Ethernet.begin(mac, ip);
  pinMode(ledPin1, OUTPUT); 
  pinMode(ledPin2, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  EthernetClient client = server.available();
  if (client) //SE ESISTE UN CLIENTE
  {
    while (client.connected()) // SE IL CLIENTE E' CONNESSO
    {
      if (client.available()) //SE E' TUTTO OK PER INIZIARE
      {
        char c = client.read(); //LEGGI I SINGOLI CARATTERI INVIATI
        if (readString.length() < 100)
        {
          readString += c; //CONCATENA I CARATTERI
        } 
        if (c == '\n') //VEDE SE C'E' IL CARATTERE DI FINE STRINGA, PER INDIVIDUARE CHE E' FINITA
        {
          if(readString.indexOf("L1=1") > 0) //IMPOSTA UNA VARIABILE DI TIPO BOLEANA (VERO-FALSO) PER GLI STATI DEL LED
          {
            LEDON1 = true;
          }
          else if (readString.indexOf("L2=1") > 0)
          {
            LEDON2 = true;             
          }
          else if(readString.indexOf("L1=0") > 0)
          {
            LEDON1 = false;
          }
          else if (readString.indexOf("L2=0") > 0)
          {
            LEDON2 = false;             
          }

          //CREA LA PAGINA HTML (VERRA' AGGIORNATA AD OGNI ISTRUZIONE NUOVA)
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html><head><link rel='icon' href='/favicon.png' type='image/png' /><title>Arduino UNO WebServer</head><body>");
          //TITOLO LED 1
          client.println("<h1>Led 1</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON1: 
          if (LEDON1) {
            digitalWrite(ledPin1, HIGH);   
            client.println("Stato: ON<br>");
          }
          else {

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON1: 
            digitalWrite(ledPin1, LOW );
            client.println("Stato: OFF<br>");
          }

          //CREA I PULSANTI RELATIVI A LED1   
          client.println("<a href='?L1=0'>SPEGNI</a>");
          client.println("<a href='?L1=1'>ACCENDI</a>");

          //INSERISCE IL DIVISORE
          client.println("<br>______________________________<br>");

          //TTOLO LED2
          client.println("<h1>Led 2</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON2: 
          if (LEDON2) {
            digitalWrite(ledPin2, HIGH); 
            client.println("Stato: ON<br>");
          }
          else {

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON2:   
            digitalWrite(ledPin2, LOW);
            client.println("Stato: OFF<br>");
          }

          //CREA I PULSANTI RELATIVI A LED2
          client.println("<a href='?L2=0'>SPEGNI</a>");
          client.println("<a href='?L2=1'>ACCENDI</a>");

          //CHIUDE I TAG HTML PER LA PAGINA
          client.println("</body></html>");

          //SI PREPARA PER UNA NUOVA ISTRUZIONE
          readString="";

          //TERMINA LE OPERAZIONI CLIENTE
          client.stop();
        }
      }
    }
  }
}



Provando a digitare l'IP nel browser mi dice che la pagina web non è disponibile, mentre facendo un ping dell'indirizzo esce scritto:

Code: [Select]

Esecuzione di Ping 192.168.1.75 con 32 byte di dati:
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.

Statistiche Ping per 192.168.1.75:
    Pacchetti: Trasmessi = 4, Ricevuti = 4,
    Persi = 0 (0% persi)

nid69ita

#1
Aug 06, 2015, 04:00 pm Last Edit: Aug 06, 2015, 04:01 pm by nid69ita
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili

Sei sicuro che il 192.168.1.75 è libero ?   Il 192.168.1.8 è per caso il router ? 
Prova a scaricarti NetScan per Windows, è free e dagli dal PC  192.168.1.1 fino a 192.168.1.255
ti da un elenco di tutto quello che trova
Indirizzo: https://www.softperfect.com/products/networkscanner/
my name is IGOR, not AIGOR

LoadDuinoUNO

L'indirizzo del router è 192.168.1.1 e il software che mi hai consigliato mi dice che gli unici indirizzi occupati
sono:
192.168.1.2
192.168.1.7
192.168.1.8

Quando mi connetto dal browser all'indirizzo di arduino i led RX e TX lampeggiano ma il browser dice che la pagina web non è disponibile

nid69ita

Strano che pingando il .75 risponde il .8  
Ma quelli .2 .7 e .8 chi sono ?
my name is IGOR, not AIGOR

LoadDuinoUNO

#4
Aug 06, 2015, 08:27 pm Last Edit: Aug 06, 2015, 08:42 pm by LoadDuinoUNO
Allora il .2 dovrebbe essere il mio computer desktop, .7 il mio iPod e .8 è il notebook con cui di solito faccio i progetti arduino.

Ho provato anche con il codice che c'è di esempio nell'IDE ma ottengo lo stesso risultato

speedyant

Ma la subnet? Si può impostare anche lei tramite sketch?

LoadDuinoUNO

Perchè, la subnet si può impostare anche tramite sketch?

gpb01

SI, puoi scrivere, per configurare completamente la scheda, così:


Code: [Select]
...
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192, 168, 1, 75);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
...


Guglielmo
Search is Your friend ... or I am Your enemy !

LoadDuinoUNO

#8
Aug 06, 2015, 09:32 pm Last Edit: Aug 06, 2015, 09:43 pm by LoadDuinoUNO
Ho provato con la configurazione che mi ha detto Guglielmo e aggiungendo all'Ethernet.begin il gateway e la subnet quindi ottendo questa struttura

Code: [Select]

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



Però il risultato è lo stesso

gpb01

... non ho affermato che fosse la soluzione  :D

Avete chiesto se il subnet si poteva configurare e ho spiegato come configurare le varie voci ... ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

... una domanda banale, ma lo shield ethernet a cosa lo hai connesso? Ad una porta del router spero ... ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

LoadDuinoUNO

Sì l'ho collegato al router, non sono mica stupido!
La luce del router corrispondente alla porta di Arduino è accesa

gpb01

#12
Aug 06, 2015, 09:54 pm Last Edit: Aug 06, 2015, 09:55 pm by gpb01
Sì l'ho collegato al router, non sono mica stupido!
Supposizione del tutto arbitraria, nessuno lo pensa ...

... è che varie volte ci sono stati utenti che collegavano la scheda direttamente ad una porta Ethernet del PC, senza cavo crossed e ... non credo che lo shield sia autosense ::)

Guglielmo
Search is Your friend ... or I am Your enemy !

LoadDuinoUNO

Toccando il chip W5100 dello shield Ethernet vedo che è molto caldo, è un segno negativo?

PaoloP

Ho provato con la configurazione che mi ha detto Guglielmo e aggiungendo all'Ethernet.begin il gateway e la subnet quindi ottendo questa struttura

Code: [Select]

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



Però il risultato è lo stesso
Inizializzazione errata.
I paramtetri sono: mac, ip, dns, gateway.
Se vuoi passare la subnet devi inizializzare con 5 parametri.
--> mac, ip, dns, gateway, subnet
puoi mettere dns e gateway uguali
--> mac, ip, gateway, gateway, subnet

-> https://www.arduino.cc/en/Reference/EthernetBegin

Go Up