Ho aggiunto LAN (enc28j60) ma non funziona

Ciao, ho un arduino uno r4 wifi e ho intenzione di fare datalogging su SD card della temperatura rilevata e fare un upload su internet dei files con i dati.
Non voglio usare il wifi per motivi miei. Per questo ho preso il enc28j60

Ho creato il codice per rilevare la temperatura con bmp280 e scrivere su SD ( Chip Select sul pin 10, altri pin 11,12 e 13).
Ieri ho cablato i pin di contatto con la nuova scheda enc28j60 (Chip Select sul pin 9). Gli altri pin che ho usato per la scheda di rete sono quel 'grumo' di 6 pin che stanno vicino alla matrice a LED, anche loro SPI.
L'unico pin della enc28j60 che non ho collegato è il WoL. Ma credo che il mio problema non sia dato da questo.

Uso la libreria EthernetENC 2.0.5.

Caricando l'esempio "link status" mi dice "device unknow".


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

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  Ethernet.init(9);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH Shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit FeatherWing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit FeatherWing Ethernet

  Serial.begin(9600);
}

void loop() {
  auto link = Ethernet.linkStatus();
  Serial.print("Link status: ");
  switch (link) {
    case Unknown:
      Serial.println("Unknown");
      break;
    case LinkON:
      Serial.println("ON");
      break;
    case LinkOFF:
      Serial.println("OFF");
      break;
  }
  delay(1000);
}

Il resto dell'hardware l'ho lasciato collegato nella scheda di arduino piochè ho pensato non desse fastidio : l'idea era quella di provare la scheda ethernet prima di integrare il codice per il suo funzionamento in quello vecchio che faceva datalogging.

Ho controllato tipo 10 volte i cavi e i collegamenti, e sono convinto siano a posto.
La scheda di accende con il suo bel diodo rosso che è fisso, poi anche i due mini-led verde e giallo che sono accanto ad ogni connettore ethernet si illuminano quando inserisco il cavo. Il verde fisso, il giallo lampeggia irregolarmente (credo segnali lo scambio di pacchetti). L'altro capo del filo è collegato ad un router e sono sicuro funzioni perchè l'ho staccato dalla stampante, che è sempre andata bene via Lan:

avete qualche idea sul perché non mi vada?

Se non vuoi dirlo, ok, però è una cosa curiosa lo ammetterai :wink: Tra l'altro a quel punto ti bastava un R4 minima... :sunglasses:

Poi con "usare il WiFi" dipende da cosa intendi: se ad esempio non vuoi agganciarti ad una rete WiFi esistente (che so, magari per proteggere certi dati) potresti impostare Arduino come Access Point, con un SSID specifico e non visibile alla ricerca, con credenziali di accesso che solo tu conosci e protezione WPA2.
Non mi vengono in mente altri motivi per questo vincolo, ma ovviamente se non vuoi dirlo, ok, fai pure, non ci resterò male, ma le cose che vanno apparentemente contro la logica mi lasciano perplesso.

Detto questo, non ho mai collegato un Ethernet ad una UNO R4 per cui l'unica cosa che mi viene in mente è che forse quella libreria non è compatibile con R4 (non sarebbe né la prima né l'unica...), ti consiglierei di investigare cercando ulteriori informazioni sia sulla libreria specifica, sia con chi ti ha venduto quel modulo con enc28j60 (hai un link?) se sappia che con R4 ci sia una libreria cmpatibile.

... stando alla tabella ufficiale delle compatibilità la EthernetENC dovrebbe essere utilizzabile con Arduino UNO R4 :roll_eyes:

Guglielmo

1 Like

Quando hai provato c'era la SD collegata? Hai provato a scollegarla?

Ciao, Ale.

Ciao no, sta sera o al massimo domani provo a staccarla e vi aggiorno

L'ho presa su un noto negozio online americano. Postare il link non è contro le regole?
Però si, posso provare a scrivere al produttore per vedere se sa darmi info in più.

Anche cambiare libreria ma mi piacerebbe tenere questa come dice Guglielmo sotto dovrebbe essere compatibile

È permesso, sempre se "in tema" con la discussione e non solo a fini pubblicitari :wink:

Guglielmo

@squackmcduck: in ogni caso ricorda che è buona cosa SEMPRE, nel setup(), inizializzare i pin di CS/SS sia della SD che della Ethernet come pin in OUTPUT (con la pinMode()) ed assegnargli, come valore iniziale, il valore HIGH (con la digitalWrite()) così da avere, inizialmente, i due bus SPI non selezionati ... poi, normalmente, le librerie gestiscono loro correttamente tali pin durante l'uso.

Guglielmo

1 Like

Ho provato a scollegare termometro, pila (per il realtime clock) e SD. Non cambia nulla.

Riepilogo i PIN schedaLAN/ Arduino nel caso abbia sbagliato qualcosa.
Mi baso su questo PINOut, quello ufficiale : https://docs.arduino.cc/resources/pinouts/ABX00087-full-pinout.pdf

SO <=> 1. CIPO
VCC <=> 2. +5 V
SCK <=> 3. RSPCKA
SI <=> 4. COPI
RESET <=> 5. RESET
GND <=> 6. GROUND
CS <=> Pin 9
CLKOUT (Non collegato)
INT (Non collegato)
WOL (Non collegato)

Ecco, il gingillo è questo : https://www.amazon.it/dp/B07XTFL7Q7?psc=1&ref=ppx_yo2ov_dt_b_product_details

Ho provato a cambiare l'alimentazione: l'ho spostata sul 3.3V così almeno ora al tatto non è calda. Questa soluzione mi piace di più, però purtroppo non risolve il problema.

Se non vedete anomalie nei collegamenti posso anche decidere di restituire la schedina dicendo che non funziona. Secondo voi è una stupidaggine?

Non mi pare nulla di strano, è normale connessione SPI. Io con la UNO avevo tenuto da parte questo schema:

ENC28J60 Arduino UNO
CS D10 (CS)
SI D11 (MOSI)
SO D12 (MISO)
SCK D13 (SCK)
RESET RESET
VCC 3.3V
GND GND

L'unica differenza che posso vedere, a parte Vcc (che quindi va collegato a 3.3), è che tu hai collegato CS al pin 9 invece del 10 ma non è rilevante.

Ho però ora notato una cosa, tu dici:

Ma nel tuo sketch (del primo post) la #include <Ethernet.h> non è della EthernetENC, bensì della standard Ethernet! Devi usare #include <EthernetENC.h>!

Verifica bene...

In realtà, se guardi i sorgenti della EthernetENC ti accorgi che EthernetENC.h contiene una sola riga: #include <Ethernet.h> che fa sempre parte di detta libreria ... però ... se uno ha tra le librerie entrambe le librerie installate (sia la EthernetENC che la Ethernet) chissà quale piglia :thinking:

Guglielmo

La #include della libreria è con le doppie virgolette (#include "Ethernet.h") non con "<" e ">", quindi prende la "Ethernet.h" che si trova nella stessa libreria EthernetENC, e da lì tutto il resto. Se include solo <Ethernet.h> prende quella standard, non ENC, e non può funzionare.

Ma non è la Ethernet.h della libraria Ethernet, è il file incluso nella EthenretENC che ha lo stesso nome.
Qui i sorgenti della libraria arrivata alla versione 2.0.5.

Oltre a Ethernet.init(), nel Setup, aggiungi Ethernet.begin() con i vari parametri.

GIUSTO ! ... SE effettivamente lui ha le due librerie installate, il problema sicuramente sussiste.

Per altro, se uno leggesse il readme scoprirebbe:

This library doesn't have examples, because examples of the Arduino Ethernet library apply. You can find them in the Arduino IDE Examples menu Ethernet section. Only change #include <Ethernet.h> to #include <EthernetENC.h>. Some examples require a little change.

@PaoloP: i sorgenti li avevo già indicati io alcuni post più su ... leggi attentamente TUTTA la discussione, non solo gli ultimi post :wink: Mi era solo sfuggito che il #include era fatto con i doppi apici :roll_eyes:

Guglielmo

Ok.

Riguardo il codice, prova ad aggiungere Ethernet.maintain() alla fine del loop.

... io ??? :open_mouth: ... magari l'OP ... che è quello che ha il problema :wink:

Guglielmo

Si, ovvio.
Lo sai che è molto che non frequento il forum e non mi trovo con la nuova interfaccia.
Non ho messo la citazione multipla, ma il secondo periodo è per squackmcduck.

Vi ringrazio molto davvero. Per l'interessamento e il supporto. Nonché per il brainstorming.

Leggendovi e documentandomi un po' sono convinto che risolverò modificando la libreria aggiungendo ENC. Si, sono convinto di averle installate entrambe.

Se posso già sta sera provo e vi aggiorno.

Nel frattempo...
Che differenza c'è nel modo di chiamare la libreria con le parentesi angolare e con le doppie virgolette?