Shield Ethernet di Futura Elettronica

RISOLTO
Buonasera, sono neofita di Arduino (ma non di programmazione) e ho un problema con la scheda ethernet di Futura Elettronica (quella a 10 Mbit basata su microcontrollore ENC28J60).

Allacciata ad Arduino Uno, sebbene tutte le spie siano accese correttamente, compilando lo sketch di IDE su ethernet (webserver), senza errori, non riesco neanche a pingare la scheda.

Ho provato quindi a scaricare le librerie originali della scheda da Futura Elettronica ed ho seguito quanto riportato in readme. Cioè ho rinominato come EtherCard la cartella e l'ho spostata in libraries di arduino.
quindi ho usato il listato del RBBB server contenuto nelle cartelle scaricate (listato seguente) :

// This is a demo of the RBBB running as webserver with the Ether Card
// 2010-05-28 <jc@wippler.nl> http://opensource.org/licenses/mit-license.php

#include <EtherCard.h>

// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 };
static byte myip[] = { 192,168,1,203 };

byte Ethernet::buffer[500];
BufferFiller bfill;

void setup () {
  if (ether.begin(sizeof Ethernet::buffer, mymac) == 0)
    Serial.println( "Failed to access Ethernet controller");
  ether.staticSetup(myip);
}

static word homePage() {
  long t = millis() / 1000;
  word h = t / 3600;
  byte m = (t / 60) % 60;
  byte s = t % 60;
  bfill = ether.tcpOffset();
  bfill.emit_p(PSTR(
    "HTTP/1.0 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Pragma: no-cache\r\n"
    "\r\n"
    "<meta http-equiv='refresh' content='1'/>"
    "<title>RBBB server</title>" 
    "<h1>$D$D:$D$D:$D$D</h1>"),
      h/10, h%10, m/10, m%10, s/10, s%10);
  return bfill.position();
}

void loop () {
  word len = ether.packetReceive();
  word pos = ether.packetLoop(len);
  
  if (pos)  // check if valid tcp data is received
    ether.httpServerReply(homePage()); // send web page data
}

ed ho provato a compilare con questi risultati (che sembrano ignorare la cartella EtherCard) :

C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In member function 'void W5100Class::init()':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:28: error: 'delay' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:30: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::write(uint16_t, uint8_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:133: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::write(uint16_t, const uint8_t*, uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:146: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::read(uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:159: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::read(uint16_t, uint8_t*, uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:172: error: 'SPI' was not declared in this scope
:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In member function 'void W5100Class::init()':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:28: error: 'delay' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:30: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::write(uint16_t, uint8_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:133: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::write(uint16_t, const uint8_t*, uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:146: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint8_t W5100Class::read(uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:159: error: 'SPI' was not declared in this scope
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp: In static member function 'static uint16_t W5100Class::read(uint16_t, uint8_t*, uint16_t)':
C:\Users\UTENTE\Desktop\ARDUINO\arduino-1.0.4\libraries\Ethernet\utility\w5100.cpp:172: error: 'SPI' was not declared in this scope

Sapreste dirmi cosa sbaglio ? come devo fare per fare funzionare la mia scheda ethernet ?
Grazie

Luciano Ricci (CZ)

Potranno risponderti meglio di altri più esperti dell'ambiente Arduino, ma credo che gli esempi di futura-elettronica purtroppo non siano aggiornati all'IDE ultimo (dagli errori vedo che usi la 1.0.4)
Io ho comprato da loro un kit e nello zip quasi tutti gli esempi (come codice) ho dovuto un pò correggerli perchè erano relativi ad un IDE più vecchio (credo lo 022).

come mai Gli errori sono doppi?
Mi sembra che ha qualche problema con la libreria w5100.h . Ma anche se non ne avrebbe non Ti funzionerebbe perche il w5100 non é compatibile col ENC28J60. Sembra che l' esempio o le librerie non sono per quella scheda.
Ciao Uwe

Sul sito di futura Elettronica trovi le librerie e gli esempi creati appositamente per quella scheda.
Non essendoci una shield ufficiale di Arduino con l'ENC28J60 l'IDE non lo supporta nativamente. Hai bisogno di librerie apposite, ovvero quelle create dal produttore della scheda.
E' così per tutti i componenti, shield e sensori prodotti da terze persone. Hanno normalmente delle librerie apposite, spesso e volentieri non incluse nell'IDE.

Il Team di sviluppo sta testando una versione modificata dell'IDE che permette di scaricare da un repository centrale anche le librerie create da terzi, ma finché non verrà rilasciata ufficialmente bisogna aggiungere le librerie a manina. XD

Qua

puoi trovare altre info.
In ogni caso ti va a caricare le librerie sbagliate.
E' un prob di installazione, devono essere copiate sotto C:\Programmi\arduino-1.0.1\libraries\ethercard
Le librerie funzionano anche con le versioni successive alle 1.0