Documentation

TTGO T-Internet-POE ESP32 Ethernet Development Board (LAN8720A) | ShillehTek Product Manual
Documentation / TTGO T-Internet-POE ESP32 Ethernet Development Board (LAN8720A) | ShillehTek Product Manual

TTGO T-Internet-POE ESP32 Ethernet Development Board (LAN8720A) | ShillehTek Product Manual

manualshillehtek

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

MCU
ESP32-WROOM-32
Ethernet
10/100 (LAN8720A)
PoE
802.3af, modes A & B
Storage
microSD slot
Free GPIO
~15 broken out
Logic Level
3.3V

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).

Warning: Do not power the board from PoE and USB-C/external 5V at the same time — pick one source. When testing PoE, use a proper 802.3af switch or injector; passive "PoE" injectors that put raw 48V on the pairs are a different, incompatible scheme.
Tip: PoE budget is modest — fine for the board, sensors, and a display, but not for driving motors or big LED strips. Power heavy loads separately and share ground.

Code Examples

Ethernet web client (Arduino)

tpoe_ethernet.ino
// 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

t-internet-poe.yaml
# 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:

Frequently Asked Questions

Does it work without PoE?
Yes. PoE is optional — the board runs equally well from 5V over the USB-C downloader or a 5V supply, with Ethernet still fully functional through any regular switch.
How do I upload code if there's no USB port on the board?
Use the included/companion T-U2T USB-C downloader on the programming header — it handles auto-reset, so uploads work exactly like a normal dev board. A generic 3.3V USB-serial adapter works too if you pull IO0 low while resetting to enter the bootloader.
Can Wi-Fi and Ethernet run at the same time?
Yes — the ESP32's Wi-Fi/BLE is independent of the LAN8720A. A popular pattern is Ethernet as the backbone with the ESP32 serving a Wi-Fi AP, or Wi-Fi as automatic failover.
Which GPIO are actually free for my sensors?
RMII claims GPIO 17, 19, 21, 22, 25, 26, 27 (plus 5, 18, 23 for management), so use the header-exposed pins outside that set — e.g. GPIO 4, 12-16, 32, 33 for I/O and 34-39 as inputs only. Check the silkscreen; exact breakout varies slightly by revision.
Ethernet never gets an IP. What should I check?
Verify the five config values (PHY addr 0, MDC 23, MDIO 18, clock GPIO17_OUT, power GPIO5) — a wrong clock mode is the usual culprit. Then try another cable/switch port and confirm the link LEDs on the RJ45 light up.
Is 802.3at (PoE+) safe to use?
Yes — 802.3at switches negotiate down to af levels, and the board draws only what it needs. What you must avoid is passive 24/48V injectors that skip negotiation entirely.