Skip to content
Buy 10+ on select items — save 10% auto-applied
Free US shipping on orders $35+
Order by 3pm ET — ships same-day from the US
Worldwide shipping via DHL
Skip to main content

TTGO T-Internet-POE DHT11: Wired ESPHome Node

September 26, 2026 5 views

TTGO T-Internet-POE DHT11: Wired ESPHome Node | ShillehTek
Project

Build a TTGO T-Internet-POE wired ESPHome node with a DHT11 sensor and relay, powered by PoE for stable Home Assistant control and easy OTA updates via ShillehTek.

1 hr Intermediate7 parts

Project Overview

TTGO T-Internet-POE ESP32 with a DHT11 and relay: Build a wired PoE-powered ESPHome node that reports temperature and humidity, switches a load with a relay, and shows up in Home Assistant without any Wi-Fi setup.

Wi-Fi is often the weak link in smart-home nodes: it drops with interference, fights for airtime, and still needs a power brick. The TTGO T-Internet-POE fixes both problems at once. It is an ESP32 with a LAN8720A Ethernet PHY and 802.3af Power-over-Ethernet, so one PoE cable delivers power and a stable wired link.

This guide turns it into an ESPHome node with a DHT11 (temperature and humidity), a relay for a fan or light, and a wall-switch input. It also covers the common gotcha with this board: the first flash requires a USB-to-TTL adapter because the board has no USB port.

  • Time: ~1 hour
  • Skill level: Intermediate
  • What you will build: A PoE-powered ESPHome device with a DHT11, a relay and a physical switch, discovered automatically by Home Assistant and updatable over Ethernet.
TTGO T-Internet-POE ESP32 Ethernet ESPHome installation controlling workshop lights, fan, and sensors
Wired, powered and online with one Ethernet cable.

Parts List

From ShillehTek

External

  • A PoE switch or an 802.3af PoE injector, and an Ethernet cable
  • Home Assistant with the ESPHome add-on (or pip install esphome on any computer)

Note: The T-Internet-POE deliberately has no USB-to-serial chip. It is programmed through its 6-pin header with any 3.3 V USB-TTL adapter (the FT232RL cable set to 3.3 V logic). You only need the cable once: after the first flash, every update goes over Ethernet.

Step-by-Step Guide

Step 1 - Know the Board

Goal: Identify which pins are reserved and which are safe to use.

What to do: The Ethernet PHY uses GPIO18 (MDIO), GPIO23 (MDC), GPIO17 (the 50 MHz clock output), GPIO5 (PHY reset) and the RMII data pins 19, 21, 22, 25, 26, 27. Do not use any of those for your own hardware. The micro SD slot takes GPIO2, GPIO13, GPIO14 and GPIO15.

That leaves header pins GPIO4, GPIO32, GPIO33 and the input-only GPIO34, GPIO35, GPIO36 and GPIO39, plus 3V3, 5V and GND. If your revision also breaks out GPIO12, leave it alone because it is a boot-strapping pin. PoE comes in on the RJ45 and provides a regulated 5 V rail on the header, which is what powers the relay module.

Expected result: A plan: DHT11 on GPIO4, relay on GPIO32, switch on GPIO33.

Step 2 - Wire the Peripherals

TTGO T-Internet-POE ESP32 Ethernet node in an enclosure with attached sensor wiring
A wired sensor node: one cable in, everything else local.

Goal: Connect a DHT11, a relay module, and a button to free GPIO pins.

What to do: Wire the DHT11: VCC to 3V3, GND to GND, and DATA to GPIO4.

Wire the relay module: VCC to 5V, GND to GND, and IN to GPIO32. The load (fan or lamp) goes through COM/NO; keep mains work to a qualified person or use a 12 V load for the demo.

Wire the button: one leg to GPIO33 and the other to GND. The ESPHome config enables the internal pull-up.

Plug the Ethernet cable from the PoE switch into the board. The power LED should come on.

Expected result: Board powered from PoE, three peripherals wired, and no Wi-Fi needed.

Step 3 - Create the ESPHome Configuration

esphome:
  name: workshop-poe-node
  friendly_name: Workshop PoE Node

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:
api:                       # Home Assistant talks to this
ota:
  - platform: esphome      # future updates over Ethernet

# No wifi: block at all - the ethernet: block replaces it
ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT     # T-Internet-POE feeds the PHY its 50 MHz clock from GPIO17
  phy_addr: 0
  power_pin: GPIO5         # PHY reset/enable on this board

sensor:
  - platform: dht
    pin: GPIO4
    model: DHT11
    update_interval: 30s
    temperature:
      name: "Temperature"
    humidity:
      name: "Humidity"

switch:
  - platform: gpio
    pin: GPIO32
    id: fan_relay
    name: "Fan Relay"
    restore_mode: RESTORE_DEFAULT_OFF

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO33
      mode:
        input: true
        pullup: true
      inverted: true       # pressed = LOW = "on"
    name: "Wall Switch"
    filters:
      - delayed_on_off: 50ms
    on_press:
      - switch.toggle: fan_relay   # works even if Home Assistant is down

Goal: Define Ethernet, the DHT11 sensor, the relay, and the wall switch in ESPHome.

What to do: Save the file as workshop-poe-node.yaml (in the ESPHome dashboard: New Device, skip the Wi-Fi step, then paste the config). There is no wifi: section. The ethernet: block replaces it, and the pin settings shown match this specific board.

Expected result: The config validates (esphome config workshop-poe-node.yaml or the dashboard Validate button).

Step 4 - First Flash Over the FT232RL Cable

Goal: Flash the firmware onto a board that has no USB port.

What to do: Set the FT232RL cable to 3.3 V logic. Connect cable GND to header GND, cable TX to header RX, and cable RX to header TX. Leave the board powered from PoE.

Put the ESP32 into download mode: hold IO0 to GND, pulse EN (or RST) to GND briefly, then release IO0. Run esphome run workshop-poe-node.yaml and pick the cable's serial port (or use Install, Plug into this computer in the dashboard, or web.esphome.io in Chrome with the downloaded factory .bin). When flashing finishes, pulse EN once more to boot normally.

Expected result: The log shows "Ethernet Connected" with an IP address from your router, then DHT11 readings every 30 seconds. After this, future updates can be done over Ethernet.

Step 5 - Add It to Home Assistant

Goal: Get entities into Home Assistant without manually typing an IP.

What to do: Home Assistant discovers ESPHome devices on the same network by mDNS. In Home Assistant, go to Settings, then Devices & services, and look for "Workshop PoE Node" under Discovered, then click Configure.

You should get Temperature, Humidity, Fan Relay and Wall Switch entities. Press the physical button: the relay toggles instantly (the logic runs on the board), and Home Assistant reflects the change. Toggle Fan Relay from a dashboard and the relay should click.

Expected result: Local control that works even if Home Assistant is rebooting, plus full remote control when it is up.

Step 6 - Update Over Ethernet

ESPHome Ethernet relay controller schematic showing relay interlock and two-way wall switch wiring
Interlocked relays and a two-way wall switch using an ESPHome Ethernet controller.

Goal: Perform future firmware updates without reconnecting the USB-to-TTL cable.

What to do: Change something in the YAML (for example, an update interval or a name) and run esphome run again. This time choose the OTA option and the firmware updates over the wired LAN.

Expected result: OTA updates complete in seconds over Ethernet.

Conclusion

With the TTGO T-Internet-POE, Ethernet plus PoE removes two common sources of flaky DIY smart-home devices: radio reliability and wall warts. Using ESPHome, the DHT11 sensor, relay output, and wall-switch input come together as a short YAML config that Home Assistant can discover automatically.

The main hurdle is the first flash on a board with no USB port, which is solved with a 3.3 V USB-to-TTL cable. After the initial install, updates can run over Ethernet with OTA.

Want the exact parts used in this build? Grab them from ShillehTek.com. If you want help customizing this project or building something for your product, check out our IoT consulting services.

Credits

All photos and images in this tutorial are credited to Craftiarenko on Hackster.io. The original guide by Craftiarenko served as the reference for this ShillehTek version. We thank them for their excellent work in the maker community.

Parts for this build

Everything used in this tutorial. Uncheck what you already have.

All 7 in stock
0 parts selected $0.00