If your search history says "raspberry pie poe," don't worry—autocorrect strikes us all. You are looking for the Raspberry Pi PoE (Power over Ethernet) ecosystem. The direct answer for powering a Pi over a single Ethernet cable: use the official Raspberry Pi 5 PoE+ HAT (for Pi 5) or the Raspberry Pi PoE+ HAT (for Pi 4), paired with an 802.3at (PoE+) compliant switch or injector delivering at least 25W at the source.
PoE eliminates the need for a local USB-C power supply, making it ideal for remote cameras, rooftop weather stations, and rack-mounted Pi clusters. But stacking a HAT that handles 48V DC-to-5V conversion directly over a high-speed SoC introduces specific thermal and I2C bus challenges. This guide covers exact hardware specs, physical installation, Python monitoring, and the exact kernel errors you will see when things go wrong.
Time Required: 45 minutes for assembly and software configuration.
Hardware Spec Sheet & Compatibility Matrix
Before ordering, verify your board variant. The physical footprint and power delivery circuits changed significantly between the Pi 4 and Pi 5 generations. Below is the data-dense comparison of the two current-generation official HATs.
| Specification | Pi 4 PoE+ HAT (SC0085) | Pi 5 PoE+ HAT (SC0735) |
|---|---|---|
| Target Board | Raspberry Pi 4 Model B / Compute Module 4 | Raspberry Pi 5 (All RAM variants) |
| IEEE Standard | 802.3af / 802.3at (PoE+) | 802.3af / 802.3at (PoE+) |
| Max Power Output | 25W (5V @ 5A) | 25W (5V @ 5A) |
| Input Voltage Range | 36V to 57V DC | 36V to 57V DC |
| Cooling Mechanism | 25mm brushless fan (I2C controlled via ATtiny) | 30mm brushless fan (PWM controlled via RP1 chip) |
| Typical Retail Price (2026) | $20 - $25 USD | $20 - $25 USD |
Parts List & GPIO Pin Mapping
This build targets the Raspberry Pi 5 (8GB variant) running Raspberry Pi OS (Bookworm). The code and pin mappings below are specific to this generation.
Required Components
- Compute Board: Raspberry Pi 5 (8GB) - ~$80 USD
- PoE HAT: Official Raspberry Pi 5 PoE+ HAT (SC0735)
- Power Source: 802.3at PoE+ Injector (e.g., TP-Link TL-POE150S or Ubiquiti U-POE-at) or a PoE+ managed switch.
- Mechanical: M2.5 brass standoffs and screws (included with HAT).
- Thermal: Thermal pad for the RP1 chip (pre-applied on SC0735).
PoE HAT Pin Mapping (40-Pin Header)
The PoE HAT does not use standard GPIO pins for data; it taps directly into the 5V rail and the dedicated I2C/PWM control lines. Here is exactly what the HAT connects to on the 40-pin header:
| Pi 5 Pin # | BCM / Function | HAT Usage |
|---|---|---|
| Pin 1 | 3V3 | Not used by PoE circuit |
| Pin 2, 4 | 5V Power | Main 5V DC Output from HAT to Pi |
| Pin 6, 9, 14, 20, 25, 30, 34, 39 | GND | Common Ground Return |
| Pin 27 | I2C SCL (EEPROM) | HAT ID / EEPROM read (Pins 27/28) |
| Pin 28 | I2C SDA (EEPROM) | HAT ID / EEPROM read (Pins 27/28) |
Note: On the Pi 5, fan control is routed internally via the RP1 I/O controller's dedicated PWM lines, not the standard 40-pin header GPIOs.
Step-by-Step Physical Installation
- Prep the Pi: Power down the Pi 5 completely and disconnect all cables. Attach the M2.5 female standoffs to the four mounting holes on the Pi 5 PCB.
- Verify Thermal Pads: Check the underside of the SC0735 HAT. Ensure the thermal pad covering the inductor and the RP1 contact point is intact and free of dust.
- Seat the Header: Align the 40-pin socket on the HAT with the Pi's GPIO header. Press down evenly. Do not rock it side-to-side, as this can bend the fine header pins.
- Secure the HAT: Insert the M2.5 screws through the HAT and into the standoffs. Tighten to roughly 0.5 Nm (finger-tight plus a quarter turn with a small screwdriver). Overtightening will crack the PCB.
- Connect Network: Plug your Cat5e/Cat6 Ethernet cable into the HAT's RJ45 jack. Ensure the other end is plugged into a confirmed 802.3at (PoE+) port. Standard 802.3af (15W) ports will not supply enough current to boot a Pi 5 under load.
Python PoE Thermal Monitoring Script
The Pi 5 PoE+ HAT fan is managed automatically by the firmware via the RP1 chip. However, when building remote IoT nodes, you need to log thermal data to ensure the PoE power budget isn't causing brownouts under heavy CPU load. The following Python 3 script reads the ARM CPU thermal zone via sysfs and logs it. This code targets the Raspberry Pi 5 running Bookworm.
import time
import sys
import os
# Target: Raspberry Pi 5 (Bookworm OS)
# Hardware Path Definitions
THERMAL_ZONE_PATH = "/sys/class/thermal/thermal_zone0/temp"
LOG_FILE_PATH = "/var/log/poe_thermal_monitor.log"
def read_cpu_temp():
"""Reads the CPU temperature from the sysfs thermal zone."""
try:
with open(THERMAL_ZONE_PATH, "r") as f:
temp_mc = int(f.read().strip())
return temp_mc / 1000.0
except FileNotFoundError:
print("Error: Thermal zone not found. Are you running on a Pi?", file=sys.stderr)
sys.exit(1)
except PermissionError:
print("Error: Permission denied. Run with sudo if required.", file=sys.stderr)
sys.exit(1)
def log_status(temp_c):
"""Evaluates thermal status and appends to log file."""
# Pi 5 begins soft throttling at 80°C, hard throttling at 85°C
if temp_c >= 80.0:
status = "CRITICAL: THROTTLING RISK - Check PoE switch power budget"
elif temp_c >= 70.0:
status = "WARNING: Approaching thermal limit"
else:
status = "NOMINAL"
log_entry = f"{time.strftime('%Y-%m-%d %H:%M:%S')} | Temp: {temp_c:.2f}C | {status}\n"
try:
with open(LOG_FILE_PATH, "a") as log_file:
log_file.write(log_entry)
print(log_entry.strip())
except PermissionError:
print(f"Cannot write to {LOG_FILE_PATH}. Logging to stdout only.", file=sys.stderr)
print(log_entry.strip())
if __name__ == "__main__":
print("Starting Pi 5 PoE HAT Thermal Monitor (Ctrl+C to stop)...")
try:
while True:
current_temp = read_cpu_temp()
log_status(current_temp)
time.sleep(10) # Poll every 10 seconds
except KeyboardInterrupt:
print("\nMonitor stopped by user.")
sys.exit(0)
Debugging: First Three Things to Check When It Fails
PoE deployments usually fail at the physical or negotiation layer. If your Pi fails to boot or drops offline, check these three items in order before re-imaging your SD card.
1. The "Under-Voltage" Kernel Error
Exact Error String: Under-voltage detected! (0x00050005) (visible via dmesg or the syslog).
Ranked Causes:
- 802.3af vs 802.3at Mismatch: You plugged the Pi into a standard PoE (802.3af) switch port limited to 15.4W. The Pi 5 under load pulls 20W+. Fix: Move to a PoE+ (802.3at) or PoE++ (802.3bt) port.
- Cable Voltage Drop: You are using cheap CCA (Copper Clad Aluminum) Cat5e cable over a 50-meter run. CCA has higher resistance than solid copper, causing the 48V to sag below the HAT's 36V minimum threshold. Fix: Replace with 100% bare copper Cat6.
- HAT Seating Issue: The 40-pin header is slightly skewed, causing high resistance on the 5V pins. Fix: Reseat the HAT.
2. The Fan Probe Failure
Exact Error String: rpi-poe-fan: probe of 1f000a00.fan failed with error -110
Ranked Causes:
- I2C Bus Collision: Error -110 is an ETIMEDOUT. You have another HAT or sensor attached to the primary I2C bus (Pins 3/5) pulling the lines low or conflicting with the EEPROM address. Fix: Remove secondary HATs and test.
- Firmware Bug: Early Pi 5 EEPROM versions had a bug initializing the RP1 PWM controller for the SC0735 HAT. Fix: Run
sudo rpi-eeprom-update -aand reboot.
3. Network Link Drops (eth0 flapping)
Exact Error String: bcmgenet fd580000.ethernet eth0: Link is Down followed immediately by Link is Up.
Ranked Causes:
- PoE Negotiation Reset: The switch is resetting the port because the Pi's power draw spiked during boot, tripping the switch's over-current protection. Fix: Configure a higher power limit on the managed switch port.
- EMI from the DC-DC Converter: The HAT's switching regulator is generating EMI that interferes with the unshielded Ethernet magnetics. Fix: Ensure the HAT's metal shield (if present on your revision) is grounded, and use shielded Cat6a cable.
Extending and Simplifying the Build
Depending on your deployment environment, you may need to alter the physical topology of this PoE setup.
How to Simplify (The Passive Splitter Route)
If you do not need the GPIO pins to remain accessible, or if you are deploying a Pi Zero 2 W which lacks the 40-pin header footprint for a HAT, ditch the HAT entirely. Use a passive PoE splitter (e.g., a 48V to 5V 3A USB-C PoE splitter cable). This converts the 48V from the Ethernet cable to standard 5V USB-C power before it reaches the Pi. It costs under $12, eliminates HAT thermal issues, and keeps the Pi's GPIO completely bare for custom wiring. The trade-off is you lose the integrated fan and native I2C thermal management.
How to Extend (Stacking HATs)
If you need to add an M.2 NVMe HAT or a sensor board on top of the PoE HAT, you must use stacking headers with extended male pins (at least 11mm in height). The Pi 5 PoE+ HAT components sit high on the PCB. If you use standard headers, the USB-C port shielding or the PoE inductor will short against the PCB of the HAT stacked above it. Furthermore, verify that your secondary HAT does not use the dedicated I2C EEPROM pins (27 and 28), as the PoE HAT requires exclusive access to these for board identification.
For more detailed schematic information, refer to the official Raspberry Pi Power Accessories documentation and the Pi 5 PoE+ HAT release notes. Always verify your switch's PoE power budget (in Watts) against the total draw of all connected devices before scaling up a cluster.






