PoE FeatherWing

Ethernet FeatherWing with 4 W of PoE power and globally unique MAC

Aug 11, 2020

Project update 4 of 7

Bringing PoE to microcontrollers

by Patrick V

When I created the wESP32 back in 2018, there weren’t any widely available options to get standards compliant isolated Power over Ethernet on a small microcontroller. The situation has improved since then, but with the PoE-FeatherWing, I wanted to go a step further.

Broad hardware support with Feather

The remaining issue was that most PoE options in the maker market, including the wESP32, rely on the ESP32. This is a great chip, and very suited to Ethernet projects since it has a built-in Ethernet MAC and exposes an RMII interface to connect to an Ethernet PHY. This ensures the best performance, with the wESP32 able to reach a bitrate in excess of 90 Mbps.

But sometimes, people have good reasons to want to use a specific microcontroller for their project. Whether that is the availability of a particular hardware feature, support for a certain software library or just being familiar with a certain chip—they are all valid reasons. This is why for this project I chose the very well supported Adafruit Feather footprint, which has become a de-facto standard for modern maker development boards. By adopting this standard, the PoE-FeatherWing opens up Power over Ethernet to a broad range of microcontroller architectures, including ATmega, ARM Cortex M0, ARM Cortex M4 options from Microchip, ST and Nordic Semiconductor, ESP8266, ESP32, and even full-blown Linux systems with the Giant Board and FPGAs with the Orange Crab! In addition to what already exists, new options seem to be popping up constantly.

The downside of doing this is that the Feather form factor does not expose an RMII interface to connect an Ethernet PHY in the most optimal way, so we are using the Wiznet W5500 used on the Adafruit Ethernet FeatherWing for maximum compatibility. This chip connects to the host micro over SPI and limits the bitrate to about 13 Mbps. Much less than the wESP32, but more than enough for most IoT type workloads and the price you pay for broad compatibility.

Software support

All the talk about compatibility brings me to software support. A piece of hardware like this is useless without software to make it work seamlessly with existing code bases. By using the W5500, we can make use of the broad software support that already exists for this chip. So any guide or software you find that is made for the Adafruit Ethernet FeatherWing will work just as well with the PoE-FeatherWing! If you have something deployed that uses the Ethernet FeatherWing, you can literally swap the board for a PoE-FeatherWing to add Power over Ethernet to your design! Let’s take a look at some popular software choices:

Arduino

An old favorite in the maker community, Arduino support worked right out of the box. The PoE-FeatherWing demo repo has an Arduino example that is based on Arduino example code, but adds this piece of code to read out the MAC address from the 24AA02E48 chip:

// I2C address of the 24AA02E48
#define I2C_ADDRESS 0x50

[...]

byte readRegister(byte r)
{
  unsigned char v;
  Wire.beginTransmission(I2C_ADDRESS);
  Wire.write(r);  // Register to read
  Wire.endTransmission();

  Wire.requestFrom(I2C_ADDRESS, 1); // Read a byte
  while(!Wire.available())
  {
    // Wait
  }
  v = Wire.read();
  return v;
}

[...]

// Start I2C bus
Wire.begin();
// Read the MAC programmed in the 24AA02E48 chip
mac[0] = readRegister(0xFA);
mac[1] = readRegister(0xFB);
mac[2] = readRegister(0xFC);
mac[3] = readRegister(0xFD);
mac[4] = readRegister(0xFE);
mac[5] = readRegister(0xFF);

CircuitPython

CircuitPython is rapidly becoming another community favorite, with good reason as it’s very easy to get started with! Getting it to work with the PoE-FeatherWing took a little more work on my part, because it seems much of the ecosystem is still heavily under development. Another thing is that you have to make sure you not only upgrade your Feather’s CircuitPython installation to the latest version, but also the UF2 bootloader! Otherwise you may experience a problem where your Python program won’t run when powered from PoE, due to slow power ramp-up. Growing pains that should slowly disappear when you buy new hardware that already comes with these fixes in the future.

The example in the demo repo should work with the driver from the latest Adafruit CircuitPython Bundle and is based on the standard CircuitPython Wiznet 5K Ethernet example, with the addition of the following code to read out the MAC from the 24AA02E48 chip:

i2c = busio.I2C(board.SCL, board.SDA)
while not i2c.try_lock():
    pass
i2c.writeto(0x50, bytearray((0xFA,)), stop=False)
i2c.readfrom_into(0x50, mac, start=0, end=6)
i2c.unlock()

Linux on the Giant Board

A really fun option is to use the PoE-FeatherWing in combination with Groguard’s Giant Board, which runs a full Debian Linux installation. You can just follow their instructions for the Ethernet FeatherWing to make it work with the PoE-FeatherWing, with one exception: where the instructions tell you to run a jumper wire to connect IRQ to PD31 on the Giant Board, you can instead just close the SJIRQ solder bridge on the PoE-FeatherWing:

Much cleaner, don’t you think? :) This solder bridge was left open by default for 100% compatibility with the Ethernet FeatherWing, but bridging it provides a simple option for use with the Giant Board, which requires the IRQ connection.

We’re close to the finish line!

At the time of writing, we’re 8% away from having the campaign funded. So please, share with your friends, family and followers so we can make a nice finish! Thank you for your support!


Sign up to receive future updates for PoE FeatherWing.

Subscribe to the Crowd Supply newsletter, highlighting the latest creators and projects