Overview
Wireless is wonderful, but sometimes you want the strong reliability of a wire. If you want to incorporate an Ethernet port as a great addition to your IoT project, this WIZ5500 Ethernet Breakout will let you add quick and easy wired Internet. Just plug in a standard Ethernet cable, and run the Ethernet Arduino library (or CircuitPython) for cross-platform networking.
Ethernet is a tried-and-true networking standard. Every hub and switch supports it, and because there's a physical connection, you don't have to noodle around with SSIDs, passwords, authentication schemes, or antennas. The WIZ5500 chip communicates over SPI plus a single CS pin. The Arduino/CircuitPython support libraries work well, and within a few seconds of connection, it will perform the DHCP setup for you.
We made a nice little breakout board with the WIZ5500, all the support circuitry needed for use with 3V or 5V microcontrollers - all level shifting done for you! As a nice extra, the RJ-45 jack features both link and activity lights that indicate the current connection status through lighting or blinking. With a little bit of soldering and wiring you can connect this to just about any microcontroller.
If you want one specifically for use with Feathers, check out the Ethernet Featherwing
Note that this product does not have PoE support, but you can add it by the addition of a PoE splitter. We have a version that provides 5V at 2.4 Amp max into a USB connector.
Each order comes with one assembled and tested breakout, plus some header. You will need to solder in the header yourself, but it's a quick task. Check out our tutorial for code, schematics, files, and more!
Page last edited June 11, 2025
Text editor powered by tinymce.
Pinouts
Power Pins
- VIN - This is the power pin. To power the board, connect to the same power as the logic level of your microcontroller, e.g. for a 3V micro like a Feather, use 3V, and for a 5V micro like an Arduino, use 5V.
- 3.3V - this is the 3.3V output from the voltage regulator, you can grab up to 100mA from this if you like.
- GND - This is common ground for power and logic.
Ethernet Port
The Ethernet port is where you'll plug in an Ethernet cable. The port has two status LEDs:
- Yellow LED - The yellow LED is located on the left side of the port. It indicates the speed of the connection.
- Green LED - The green LED is located on the right side of the port. It indicates network connectivity.
If either of these LEDs are off, it means there is an issue with your Ethernet network connection.
SPI Pins
- SCK - This is the SPI clock input pin.
- MISO - This is the SPI MISO (Microcontroller In / Serial Out) pin.
- MOSI - This is the SPI MOSI (Microcontroller Out / Serial In) pin.
- CS - This is the SPI chip select pin.
- RST - This is the reset pin for the breakout. To reset the board, this pin should be held low at least 500 us.
Mode Jumpers
On the back of the board are three jumpers labeled M2, M1 and M0 on the board silk. A combination of these jumpers being open and closed set the mode for the WIZ5500. By default, all of the jumpers are open (low) to be in mode "10BT Half-duplex, Auto-negotiation disabled". The table below shows which combination of jumpers should be left open (unsoldered, low) and closed (soldered, high) to set different modes. Another version of this table is available in the WIZ5500 datasheet on page 10.
Page last edited June 11, 2025
Text editor powered by tinymce.
CircuitPython
It's easy to use the WIZ5500 breakout with CircuitPython, and the Adafruit_CircuitPython_Wiznet5k module. This module allows you to easily write Python code to use the WIZ5500 for ethernet access.
CircuitPython Microcontroller Wiring
First wire up the breakout to your board exactly as follows. The following is the breakout wired to a Feather RP2040 using a solderless breadboard:
-
Board 3V to breakout VIN (red wire)
-
Board GND to breakout GND (black wire)
-
Board SCK to breakout SCK (yellow wire)
- Board MO to breakout MOSI (blue wire)
- Board MI to breakout MISO (green wire)
- Board D10 to breakout CS (orange wire)
CircuitPython Usage
To use with CircuitPython, you need to first install the Adafruit_CircuitPython_Wiznet5k library, and its dependencies, into the lib folder on your CIRCUITPY drive. Then you need to update code.py with the example script.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file, and copy the entire lib folder and the code.py file to your CIRCUITPY drive.
Your CIRCUITPY/lib folder should contain the following folders and files:
- adafruit_bus_device/
- adafruit_wiznet5k/
- adafruit_connection_manager.mpy
- adafruit_requests.mpy
- adafruit_ticks.mpy
Example Code
Once everything is saved to the CIRCUITPY drive, connect to the serial console to see the data printed out!
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import adafruit_connection_manager
import adafruit_requests
import board
import busio
import digitalio
from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K
print("Wiz5100 Breakout WebClient Test")
TEXT_URL = "http://wifitest.adafruit.com/testwifi/index.html"
cs = digitalio.DigitalInOut(board.D10)
spi_bus = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
# Initialize ethernet interface with DHCP
eth = WIZNET5K(spi_bus, cs)
# Initialize a requests session
pool = adafruit_connection_manager.get_radio_socketpool(eth)
ssl_context = adafruit_connection_manager.get_radio_ssl_context(eth)
requests = adafruit_requests.Session(pool, ssl_context)
print("Chip Version:", eth.chip)
print("MAC Address:", [hex(i) for i in eth.mac_address])
print("My IP address is:", eth.pretty_ip(eth.ip_address))
print("IP lookup adafruit.com: %s" % eth.pretty_ip(eth.get_host_by_name("adafruit.com")))
# eth._debug = True
print("Fetching text from", TEXT_URL)
r = requests.get(TEXT_URL)
print("-" * 40)
print(r.text)
print("-" * 40)
r.close()
print("Done!")
First, the WIZ5500 breakout is instantiated over SPI. Then, a network connection is established over ethernet. You'll see the chip version, MAC address, IP address and text from the Adafruit WiFi test print out to the serial console.
Page last edited June 11, 2025
Text editor powered by tinymce.
Arduino
Using the Wiz5500 breakout with Arduino involves wiring up the breakout to your Arduino-compatible microcontroller, installing the Arduino Ethernet library, and running the provided example code.
Wiring
Wire as shown for a 5V board like an Uno. If you are using a 3V board, like an Adafruit Feather, wire the board's 3V pin to the breakout VIN.
Here is an Adafruit Metro wired up to the breakout using a solderless breadboard:
-
Board 5V to breakout VIN (red wire)
-
Board GND to breakout GND (black wire)
-
Board D13 to breakout SCK (yellow wire)
- Board D12 to breakout MISO (green wire)
- Board D11 to breakout MOSI (blue wire)
- Board D10 to breakout CS (orange wire)
Library Installation
The Arduino Ethernet library is a built-in library in the Arduino IDE. You can check that it is installed and up to date using the Library Manager in the Arduino IDE.
Click the Manage Libraries ... menu item, search for Ethernet, and select the Ethernet library. If it is installed and up to date, you'll see the turquoise INSTALLED text next to the version number and there won't be an Install or Update button.
// SPDX-FileCopyrightText: 2025 Liz Clark for Adafruit Industries
//
// SPDX-License-Identifier: MIT
/*
Web client
This sketch connects to a website (http://wifitest.adafruit.com)
using an Adafruit Wiz5500 Ethernet Breakout
Circuit:
* Ethernet breakout attached to pins 10, 11, 12, 13
created 18 Dec 2009
by David A. Mellis
modified 9 Apr 2012
by Tom Igoe, based on work by Adrian McEwen
modified 10 June 2025
by Liz Clark
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address for your controller below.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "wifitest.adafruit.com";
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);
IPAddress myDns(192, 168, 0, 1);
// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;
// Variables to measure the speed
unsigned long beginMicros, endMicros;
unsigned long byteCount = 0;
bool printWebData = true; // set to false for better speed measurement
void setup() {
// You can use Ethernet.init(pin) to configure the CS pin
// Here you're using pin 10 for CS
// SCK: 13, MISO: 12, MOSI: 11
Ethernet.init(10); // Most Arduino shields
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// start the Ethernet connection:
Serial.println("Initialize Ethernet with DHCP:");
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Check for Ethernet hardware present
if (Ethernet.hardwareStatus() == EthernetNoHardware) {
Serial.println("Ethernet breakout was not found. Check your wiring.");
while (true) {
delay(1); // do nothing, no point running without Ethernet hardware
}
}
if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Ethernet cable is not connected.");
}
// try to configure using IP address instead of DHCP:
Ethernet.begin(mac, ip, myDns);
} else {
Serial.print(" DHCP assigned IP ");
Serial.println(Ethernet.localIP());
}
// give the Ethernet a second to initialize:
delay(1000);
Serial.print("connecting to ");
Serial.print(server);
Serial.println("...");
// if you get a connection, report back via serial:
if (client.connect(server, 80)) {
Serial.print("connected to ");
Serial.println(client.remoteIP());
// Make a HTTP request:
client.println("GET /testwifi/index.html HTTP/1.1");
client.println("Host: wifitest.adafruit.com");
client.println("Connection: close");
client.println();
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
beginMicros = micros();
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
int len = client.available();
if (len > 0) {
byte buffer[80];
if (len > 80) len = 80;
client.read(buffer, len);
if (printWebData) {
Serial.write(buffer, len); // show in the serial monitor (slows some boards)
}
byteCount = byteCount + len;
}
// if the server's disconnected, stop the client:
if (!client.connected()) {
endMicros = micros();
Serial.println();
Serial.println("disconnecting.");
client.stop();
Serial.print("Received ");
Serial.print(byteCount);
Serial.print(" bytes in ");
float seconds = (float)(endMicros - beginMicros) / 1000000.0;
Serial.print(seconds, 4);
float rate = (float)byteCount / seconds / 1000.0;
Serial.print(", rate = ");
Serial.print(rate);
Serial.print(" kbytes/second");
Serial.println();
// do nothing forevermore:
while (true) {
delay(1);
}
}
}
Upload the sketch to your board and open up the Serial Monitor (Tools -> Serial Monitor) at 115200 baud. First, the WIZ5500 breakout is instantiated over SPI. Then, a network connection is established over ethernet. The Adafruit WiFi test site is used to test the connection. On successful connection, you'll see a print out of the site text in the Serial Monitor.
Community Fork
There is a fork of the Ethernet library available on GitHub from a community member that is designed to have better performance. Check it out as an alternative to the official release and read more about its features in this Adafruit Forum post.
Page last edited June 11, 2025
Text editor powered by tinymce.
Downloads
Page last edited June 11, 2025
Text editor powered by tinymce.