Ciao,
la scheda in oggetto non ha il connettore usb, pensavo di poterla programmare utilizzando un convertitore USB-SERIALE come ho fatto con altre ESP, ma la ide mi da errore di comunicazione.
Mi sono collegato al pin TX0 e RX0, naturalmente GND, e il pin DTR al pin IO0 della ESP; tramite monitor seriale leggo quello che trasmette la ESP, quindi il collegamento funziona; ho provato a tenere basso il pin IO0 durante la programmazione, nulla, ho provato ad abbassare il pin IO0 appena parte la programmazione e poi rilasciarlo, ma nulla.
Il convertitore USB-SERIALE mi mantiene il pin DTR a 2V, mentre quando va in programmazione prova qualche volta ad abbassarlo a circa 1,5V poi torna a 2V.
Come scheda ho selezionato la ESP32 Dev Module, mentre proprio sul chip ESP32 nella shield leggo WT32 S1.
Sto sbagliando qualcosa? Allego la shield utilizzata.
Ciao,
quindi va alimentata quando il pin IO0 è LOW, oppure dopo averlo messo LOW c'è da fare il reset...
Faccio una prova...
Mentre facendo il collegamento come lo schema che hai messo, e collegando anche DTR e RTS farebbe tutto da solo?
Grazie
Ottimo, ho provato per ora in modo manuale, e ha funzionato, grazie ancora
Poi mi preparo una schedina apposita per fare questo...
Non so se posso proseguire quà o nella sezione software, ho caricato un programma di esempio della libreria EthernetESP32, in seriale controllando il debug risulta che non è stato trovato l'hardware (il modulo ethernet)
#include <EthernetESP32.h>
#include <NetworkClientSecure.h>
//W5500Driver driver;
//ENC28J60Driver driver;
EMACDriver driver(ETH_PHY_LAN8720);
char server[] = "arduino.tips";
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 7);
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
NetworkClientSecure client;
void setup() {
Serial.begin(115200);
delay(500);
while (!Serial);
Ethernet.init(driver);
// start the Ethernet connection:
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin() == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// try to configure using IP address instead of DHCP:
Ethernet.begin(ip);
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
Serial.print("connecting to ");
Serial.print(server);
Serial.println("...");
client.setInsecure(); // use only for a test!
// if you get a connection, report back via serial:
if (client.connect(server, 443)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
// Make a HTTP request:
client.println("GET /asciilogo.txt HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
while (client.available()) {
char c = client.read();
Serial.write(c);
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
while (true) {
delay(1);
}
}
}
Se non hai fretta, ci sono già fatte su Aliexpress. Non so se si trovano anche su Amazon.
Quel modulo comunica su bus SPI che non vedo inizializzato esplicitando i pin nel tuo sketch di esempio quindi significa che sta usando quelli di default.
Tu come hai connesso il modulo?
io non ho collegato nulla, la shield è già collegata, esp col modulo, tra l'altro mi pare di aver letto che c'è un bus particolare per il modulo lan8720
Ho controllato, ma non ho trovato granchè di + di quello che già avevo recuperato, ho questo datasheet: ESP32 eth01 datasheet.pdf (666.8 KB)
Cercando in rete ho trovato queste spiegazioni, ma non sono arrivato a nulla, perchè non so nemmeno quali pin sono utilizzati e come sono collegati; visto che nell'esempio della libreria era riportato quel chip, pensavo fosse standard...
Cercherò altre info
Vedendo il datasheet usa il collegamento RM II con il modulo Ethernet ... collegamento che è documentato QUI dentro ... e che sembra avere pin fissi e NON modificabili
Grazie Guglielmo, ho visto... Più cerco di semplificarmi le cose e più becco roba complicata e strana
Devo utilizzare anche dei pin per comandi esterni che ho già collegato, verificherò che non siano quelli usati dalla shield
In questo modo sei anche tranquillo riguardo le versioni del core stesso, perché le librerie esterne specifiche per ESP32 potrebbero non essere aggiornate alle nuove API introdotte con il core v3.x.x e una volta inizializzato correttamente l'hardware puoi anche fare riferimento agli innumerevoli esempi che si trovano.
Buongiorno,
con tutto quello che ho cercato, non avevo trovato questa info...
Naturalmente compila, ho caricato il progr, ma da seriale mi restituisce questi errori:
E (2106) esp.emac: emac_esp32_init(371): reset timeout
E (2106) esp_eth: esp_eth_driver_install(228): init mac failed
sempre che sia corretto...
Sono cambiati i codici di errore, ma la definizione di errori è la solita:
E (3006) esp.emac: emac_esp32_init(371): reset timeout
E (3006) esp_eth: esp_eth_driver_install(228): init mac failed
Forse nessuno che ha letto ha ancora utilizzato questa shield
Ciao,
dopo un giorno intero di smattamenti vari, il sistema ha iniziato a funzionare, ma non so bene il perchè e per come...
Comunque sia allego lo sketch funzionante usato come test, può essere utile a qualcuno.
La shield è una WT32-ETH01 V1.4
// IMPORTANTE!! da definire prima di <ETH.h>
// affinchè ETH.begin() funzioni
#ifndef ETH_PHY_MDC
#define ETH_PHY_TYPE ETH_PHY_LAN8720
#if CONFIG_IDF_TARGET_ESP32
#define ETH_PHY_ADDR 0
#define ETH_PHY_MDC 23
#define ETH_PHY_MDIO 18
#define ETH_PHY_POWER -1
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
#elif CONFIG_IDF_TARGET_ESP32P4
#define ETH_PHY_ADDR 0
#define ETH_PHY_MDC 31
#define ETH_PHY_MDIO 52
#define ETH_PHY_POWER 51
#define ETH_CLK_MODE EMAC_CLK_EXT_IN
#endif
#endif
#include <ETH.h>
static bool eth_connected = false;
// WARNING: onEvent is called from a separate FreeRTOS task (thread)!
void onEvent(arduino_event_id_t event)
{
switch (event)
{
case ARDUINO_EVENT_ETH_START:
Serial.println("ETH Started");
/*
Il nome host deve essere impostato dopo l'avvio dell'interfaccia, ma deve essere
impostato prima di DHCP, quindi impostarlo dal thread del gestore eventi
*/
ETH.setHostname("esp32-ethernet");
break;
case ARDUINO_EVENT_ETH_CONNECTED:
Serial.println("ETH Connesso");
break;
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.println("ETH IP ricevuto");
Serial.println(ETH);
eth_connected = true;
break;
case ARDUINO_EVENT_ETH_LOST_IP:
Serial.println("ETH IP perso");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
Serial.println("ETH Disconnesso");
eth_connected = false;
break;
case ARDUINO_EVENT_ETH_STOP:
Serial.println("ETH fermato");
eth_connected = false;
break;
default: break;
}
}
void testClient(const char *host, uint16_t port) {
Serial.print("\nconnecting to ");
Serial.println(host);
NetworkClient client;
if (!client.connect(host, port)) {
Serial.println("connection failed");
return;
}
client.printf("GET / HTTP/1.1\r\nHost: %s\r\n\r\n", host);
while (client.connected() && !client.available());
while (client.available()) {
Serial.write(client.read());
}
Serial.println("closing connection\n");
client.stop();
}
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println("Test LAN8720");
Serial.println();
delay(250);
Network.onEvent(onEvent);
delay(250);
ETH.begin();
delay(100);
}
void loop()
{
}