Overview
The TTGO T-Internet-POE puts an ESP32 on a wired network. It pairs the ESP32-WROOM-32 with a LAN8720A Ethernet PHY and 802.3af-compatible Power over Ethernet, so a single Ethernet cable can deliver both the network connection and the power. That makes it the right board for installations where Wi-Fi is unreliable or unwelcome: MQTT gateways, home-automation bridges, sensor nodes in metal enclosures, access control, and anything mounted far from an outlet.
You still get the full ESP32 feature set — Wi-Fi, Bluetooth, and a row of free GPIO for I2C, SPI, and UART peripherals — plus a microSD slot for logging. Firmware options include Arduino, ESP-IDF, and ESPHome, which supports this board's Ethernet configuration out of the box.
There is nothing to wire for basic use: plug in an Ethernet cable (PoE or not), or power it over USB-C via the programmer, and it is on the network.
At a Glance
Specifications
| Parameter | Value |
| Main Controller | ESP32-WROOM-32, dual-core 240 MHz, 4 MB flash, 520 KB SRAM |
| Wireless | Wi-Fi 802.11 b/g/n + Bluetooth (works alongside Ethernet) |
| Ethernet PHY | LAN8720A, 10/100 Mbps, RJ45 with auto MDI-X |
| PoE | 802.3af-compatible (SI3404 PD controller), modes A and B |
| Alternate Power | 5V via USB-C on the downloader board |
| Logic Level | 3.3V (3.3V output pin available) |
| Storage | microSD (TF) card slot |
| GPIO Broken Out | ~15 ESP32 GPIO plus 3.3V and V+ on the headers |
| Programming | Via T-U2T USB-C downloader (or any 3.3V USB-serial adapter) |
| Dimensions | 75 x 40 mm, M2.5 mounting holes |
Getting Started
Networking needs no wiring — just an Ethernet cable. The part most people trip on is programming and the internal Ethernet pin map, so here is both:
1. Flashing firmware
The board has no permanent USB port; it is programmed through the small T-U2T USB-C downloader that clips onto the programming header. Plug the downloader in, select ESP32 Dev Module in the Arduino IDE, and upload as usual. Any 3.3V USB-serial adapter also works (TX/RX crossed, IO0 to GND during reset for bootloader mode).
2. Ethernet pin map (fixed on this board)
| Ethernet Function | ESP32 GPIO |
|---|---|
| PHY Address | 0 |
| MDC / MDIO | GPIO 23 / GPIO 18 |
| 50 MHz Clock | GPIO 17 (output mode) |
| PHY Power/Reset | GPIO 5 |
These four values are all your firmware needs — they appear in both code examples below. RMII also reserves GPIO 19, 21, 22, 25, 26, 27 internally; plan peripherals around the remaining broken-out pins (GPIO 34-39 are input-only on every ESP32).
Code Examples
Ethernet web client (Arduino)
// T-Internet-POE - bring up Ethernet and fetch a web page
// Board: "ESP32 Dev Module". Uses the built-in ETH library.
#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define ETH_POWER_PIN 5
#define ETH_TYPE ETH_PHY_LAN8720
#define ETH_ADDR 0
#define ETH_MDC_PIN 23
#define ETH_MDIO_PIN 18
#include <ETH.h>
static bool ethConnected = false;
void onEvent(WiFiEvent_t event) {
switch (event) {
case ARDUINO_EVENT_ETH_GOT_IP:
Serial.print("IP address: ");
Serial.println(ETH.localIP());
ethConnected = true;
break;
case ARDUINO_EVENT_ETH_DISCONNECTED:
ethConnected = false;
break;
default:
break;
}
}
void setup() {
Serial.begin(115200);
WiFi.onEvent(onEvent);
ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN,
ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE);
}
void loop() {
if (ethConnected) {
Serial.println("Ethernet up - board is on the LAN");
delay(5000);
}
}
ESPHome configuration
# ESPHome config for the T-Internet-POE
# Drop into your device YAML - no wifi: block needed.
esphome:
name: t-internet-poe
esp32:
board: esp32dev
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO18
clk_mode: GPIO17_OUT
phy_addr: 0
power_pin: GPIO5
api:
ota:
platform: esphome
logger: