Thanks to your steep pass it IT finally WORKS !!! Here are a few more stumbling blocks to be aware of: #define FB_ENABLE_EXTERNAL_CLIENT must be set for Ethernet connection. For WLAN it must be deactivated. Therefore WLAN worked again after reinstalling the lib as described above. you need to define the GPIO´s for Core 2 as following in the code trust_anchors URL => www.google.com seems to work as Firebase is a google product #include <M5Core2.h> is NOT necessary => if you use it with M5.begin you need to delete Serial.begin(115200) => otherwise your CPU will crash => known issue also thanks to felmue NTP server is not working => always returns 0 => seems to work without NTP Here is the working code i use: /** Created by K. Suwatchai (Mobizt) Email: k_suwatchai@hotmail.com Github: https://github.com/mobizt/Firebase-ESP-Client Copyright (c) 2022 mobizt */ /** This example shows the basic RTDB usage with external Client. This example used your Arduino device and WIZnet W5500 (Ethernet) device which SSLClient https://github.com/OPEnSLab-OSU/SSLClient will be used as the external Client. This SSLClient, https://github.com/OPEnSLab-OSU/SSLClient can't use in ESP8266 device due to wdt reset error. Don't gorget to define this in FirebaseFS.h #define FB_ENABLE_EXTERNAL_CLIENT */ #include <Firebase_ESP_Client.h> // Provide the token generation process info. #include <addons/TokenHelper.h> // Provide the RTDB payload printing info and other helper functions. #include <addons/RTDBHelper.h> #include <Ethernet.h> /* 1. Install SSLClient library */ // https://github.com/OPEnSLab-OSU/SSLClient #include <SSLClient.h> /* 2. Create Trus anchors for the server i.e. www.google.com */ // https://github.com/OPEnSLab-OSU/SSLClient/blob/master/TrustAnchors.md // or generate using this site https://openslab-osu.github.io/bearssl-certificate-utility/ #include "trust_anchors.h" // For NTP time client #include "MB_NTP.h" // For the following credentials, see examples/Authentications/SignInAsUser/EmailPassword/EmailPassword.ino /* 3. Define the API Key */ #define API_KEY "Key" /* 4. Define the RTDB URL */ #define DATABASE_URL "URL" //<databaseName>.firebaseio.com or <databaseName>.<region>.firebasedatabase.app /* 5. Define the user Email and password that alreadey registerd or added in your project */ #define USER_EMAIL "Email" #define USER_PASSWORD "password" /* 6. Defined the Ethernet module connection */ #define WIZNET_RESET_PIN 19 // Connect W5500 Reset pin to GPIO 19 for Core 2 #define WIZNET_CS_PIN 26 // Connect W5500 CS pin to GPIO 26 for Core 2 #define WIZNET_MISO_PIN 38 // Connect W5500 MISO pin to GPIO 38 for Core 2 #define WIZNET_MOSI_PIN 23 // Connect W5500 MOSI pin to GPIO 23 for Core 2 #define WIZNET_SCLK_PIN 18 // Connect W5500 SCLK pin to GPIO 18 for Core 2 /* 7. Define the analog GPIO pin to pull random bytes from, used in seeding the RNG for SSLClient */ const int analog_pin = 27; // Core 2 => GPIO 27 (Analog pin) /* 8. Define MAC */ uint8_t mac[] = { 0x12, 0x12, 0x12, 0x12, 0x12, 0x12 }; /* 9. Define IP (Optional) */ IPAddress ip(192, 168, 1, 50); IPAddress myDns(8, 8, 8, 8); // Define Firebase Data object FirebaseData fbdo; FirebaseAuth auth; FirebaseConfig config; unsigned long sendDataPrevMillis = 0; int count = 0; volatile bool dataChanged = false; EthernetClient basic_client; SSLClient ssl_client(basic_client, TAs, (size_t)TAs_NUM, analog_pin); // For NTP client EthernetUDP udpClient; MB_NTP ntpClient(&udpClient, "pool.ntp.org" /* NTP host /, 123 / NTP port /, 0 / timezone offset in seconds */); uint32_t timestamp = 0; void ResetEthernet() { Serial.println("Resetting WIZnet W5500 Ethernet Board... "); pinMode(WIZNET_RESET_PIN, OUTPUT); digitalWrite(WIZNET_RESET_PIN, HIGH); delay(200); digitalWrite(WIZNET_RESET_PIN, LOW); delay(50); digitalWrite(WIZNET_RESET_PIN, HIGH); delay(200); } void networkConnection() { Ethernet.init(WIZNET_CS_PIN); ResetEthernet(); Serial.println("Starting Ethernet connection..."); Ethernet.begin(mac); unsigned long to = millis(); while (Ethernet.linkStatus() == LinkOFF || millis() - to < 2000) { delay(100); } if (Ethernet.linkStatus() == LinkON) { Serial.print("Connected with IP "); Serial.println(Ethernet.localIP()); } else { Serial.println("Can't connect"); } } // Define the callback function to handle server status acknowledgement void networkStatusRequestCallback() { // Set the network status fbdo.setNetworkStatus(Ethernet.linkStatus() == LinkON); } // Define the callback function to handle server connection void tcpConnectionRequestCallback(const char *host, int port) { // You may need to set the system timestamp to use for // auth token expiration checking. if (timestamp == 0) { timestamp = ntpClient.getTime(2000 /* wait 2000 ms */); Serial.print("timestamp from NTP: "); Serial.println(timestamp); if (timestamp > 0) { Firebase.setSystemTime(timestamp); Serial.print("Firebase => setSystemTime done"); } } Serial.print("Connecting to server via external Client... "); if (!ssl_client.connect(host, port)) { Serial.println("failed."); return; } Serial.println("success."); } void setup() { SPI.begin(WIZNET_SCLK_PIN, WIZNET_MISO_PIN, WIZNET_MOSI_PIN, -1); Serial.begin(115200); networkConnection(); Serial_Printf("Firebase Client v%s\n\n", FIREBASE_CLIENT_VERSION); /* Assign the api key (required) */ config.api_key = API_KEY; /* Assign the user sign in credentials */ auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; /* Assign the RTDB URL (required) */ config.database_url = DATABASE_URL; /* Assign the callback function for the long running token generation task */ config.token_status_callback = tokenStatusCallback; // see addons/TokenHelper.h /* fbdo.setExternalClient and fbdo.setExternalClientCallbacks must be called before Firebase.begin */ /* Assign the pointer to global defined external SSL Client object */ fbdo.setExternalClient(&ssl_client); /* Assign the required callback functions */ fbdo.setExternalClientCallbacks(tcpConnectionRequestCallback, networkConnection, networkStatusRequestCallback); Firebase.setDoubleDigits(5); Firebase.begin(&config, &auth); } void loop() { // Firebase.ready() should be called repeatedly to handle authentication tasks. if (Firebase.ready() && (millis() - sendDataPrevMillis > 15000 || sendDataPrevMillis == 0)) { sendDataPrevMillis = millis(); Serial_Printf("Set bool... %s\n", Firebase.RTDB.setBool(&fbdo, F("/test/bool"), count % 2 == 0) ? "ok" : fbdo.errorReason().c_str()); count++; } }