ESP32-POE ethernet

Hola ,
Estoy intentando conectar un ESP32-POE de Olimex a la plataforma a traves del puerto Ethernet sin exito
(Con la Wifi no hay problemas)

¿sabeis si Existe alguna liberia compatible para el ESp32 con el puerto Ethernet ?

los link de Olimex son estos
[https://github.com/OLIMEX/ESP32-POE]

CODIGO DE PRUEBA 
#define THINGER_SERVER "My_Server"
#define _DEBUG_

#include <ETH.h>

#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define ETH_PHY_POWER 12

#include <ThingerESP32.h>

static bool eth_connected = false;

#define usuario "My_USER"
#define device_Id "GPS_OFI"
#define device_credentials "F5ug#CaHu4BS"

//VARIABLES LECTURA PIVOT
uint16_t NumSatelites=0;
float latitud=100.0 , longitud=200.0, RumboAlero=300.0;
float PrecisionHDOP=5.0;
float OFFSET=0.0;
float OFFSET_CALCULADO=0.0;
bool RESTART=false;


ThingerESP32 thing(usuario, device_Id, device_credentials);




void WiFiEvent(WiFiEvent_t event)
{
  switch (event) {
    case SYSTEM_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case SYSTEM_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case SYSTEM_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.print(ETH.macAddress());
      Serial.print(", IPv4: ");
      Serial.print(ETH.localIP());
      if (ETH.fullDuplex()) {
        Serial.print(", FULL_DUPLEX");
      }
      Serial.print(", ");
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      eth_connected = true;
      break;
    case SYSTEM_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case SYSTEM_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      eth_connected = false;
      break;
    default:
      break;
  }
}

void testClient(const char * host, uint16_t port)
{
  Serial.print("\nconnecting to ");
  Serial.println(host);

  WiFiClient 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(74880);

WiFi.onEvent(WiFiEvent);
  ETH.begin();


// THINGER.IO
// Inicialización de la lectura de datos desde la API
  thing["DATOSGPS"] >> [](pson& out){
    out["latitud"] = latitud;
    out["longitud"] = longitud;
    out["satelites"] = NumSatelites;
    out["posicion"] = RumboAlero;
    out["precision"] = PrecisionHDOP;
    out["offset"] = OFFSET;
    out["posicionOffset"] = OFFSET_CALCULADO;
    
     
   };
   thing["RESTARTesp32"] << inputValue(RESTART);



    
   


  
}

void loop() {
  


  if (eth_connected) {
    testClient("www.google.es", 80);
    thing.handle();
  }
  delay(1000);
}

Gracias
La parte Ethernet prueba con éxito la conexion con google, pero no conecta con la plataforma

Buenas @JAVIER_MARIN. Todavía no hemos trabajado con placas ESP32 que vayan por Ethernet. Tendremos que hacer algún ajuste a las librearías. Lo revisamos en estos días y te comentamos!

1 Like

Yo intentaría usar la el ejemplo para arduino ethernet de thinger, ya que basicamente es el mismo esquema, de un micro usando una interface ethernet, con lo unico que tendría que tener cuidado es con los pines de comunicacion que dudo sean los mismos, pero pienso que puede funcionar de esa forma.

1 Like

Gracias…

Hola @ega, no lo he conseguido :frowning:

Buenas @JAVIER_MARIN, tengo un primer sketch funcionando bajo Ethernet. Aún falta depurarlo bien y probar estabilidad, pero se puede ir probando. Va todo en el mismo .ino de momento pero podríamos incluirlo en la librería de Arduino.

Prueba este sketch y lo vamos viendo.

//#define THINGER_SERVER "My_Server"
#define _DEBUG_

// ESP32 over Ethernet seems to not support SSL/TLS
#define _DISABLE_TLS_

#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define ETH_PHY_POWER 12

#include <ETH.h>
#include <ThingerClient.h>

#define usuario "xxx"
#define device_Id "yyy"
#define device_credentials "zzz"

class ThingerESP32Eth : public ThingerClient{
  public:
    ThingerESP32Eth(const char* user, const char* device, const char* device_credential) :
            ThingerClient(client_, user, device, device_credential)
    {
    
    }
    
    virtual ~ThingerESP32Eth(){
    
    }
    
  protected:

      virtual bool network_connected(){
        return initialized_ ? ETH.linkUp() : false;
      }
  
      virtual bool connect_network(){
        if(!initialized_){
          WiFi.onEvent([](WiFiEvent_t event){
            switch (event) {
              case SYSTEM_EVENT_ETH_START:
                Serial.println("ETH Started");
                //set eth hostname here
                ETH.setHostname("esp32-ethernet");
                break;
              case SYSTEM_EVENT_ETH_CONNECTED:
                Serial.println("ETH Connected");
                break;
              case SYSTEM_EVENT_ETH_GOT_IP:
                Serial.print("ETH MAC: ");
                Serial.print(ETH.macAddress());
                Serial.print(", IPv4: ");
                Serial.print(ETH.localIP());
                if (ETH.fullDuplex()) {
                  Serial.print(", FULL_DUPLEX");
                }
                Serial.print(", ");
                Serial.print(ETH.linkSpeed());
                Serial.println("Mbps");
                break;
              case SYSTEM_EVENT_ETH_DISCONNECTED:
                Serial.println("ETH Disconnected");
                break;
              case SYSTEM_EVENT_ETH_STOP:
                Serial.println("ETH Stopped");
                break;
              default:
                break;
            }
          });
          initialized_ = ETH.begin();
        }
        return network_connected();
      }

    protected:
      WiFiClient client_;
      bool initialized_ = false;
};


ThingerESP32Eth thing(usuario, device_Id, device_credentials);

void setup() {

  Serial.begin(115200);
  
  thing["millis"] >> [](pson& out){
    out = millis();
  };

  thing["eth"] >> [](pson& out){
    out["hostname"] = ETH.getHostname();
    out["mac"] = ETH.macAddress();
    out["ip"] = ETH.localIP().toString();
    out["link"] = ETH.linkSpeed();
  };
 
}

void loop() {
  thing.handle();
}

Ya me dices :wink:

1 Like

Thank you very much @alvarolb. At the moment it is working, I am waiting for the library