---
title: "W55RP20-S2E TCP/UDP Loopback example (Micropython)"
url: "https://maker.wiznet.io/Grace_Koo/projects/w55rp20-s2e-tcp-udp-loopback-example-micropython/"
markdown_url: "https://maker.wiznet.io/Grace_Koo/projects/w55rp20-s2e-tcp-udp-loopback-example-micropython/md"
type: "WCC: WIZnet Created Content"
author: "Grace"
author_url: "https://maker.wiznet.io/Grace_Koo/"
original_author: "Grace_Koo"
published: "2026-02-03"
language: "en"
tags: ["W55RP20", "MicroPython", "wow-contest-ref"]
hardware: ["WIZnet W55RP20-EVB-Pico"]
likes: 0
views: 817
comments: 0
source: "WIZnet Makers (https://maker.wiznet.io/)"
---

# W55RP20-S2E TCP/UDP Loopback example (Micropython)

> This example demonstrates data loopback on W55RP20 S2E via UART/SPI using MicroPython on a Raspberry Pi Pico (Master)

Original author: Grace_Koo

## Components

- **WIZnet W55RP20-EVB-Pico** x 1 ([docs](https://wiznet.io/products/powered-by-raspberry-pi/w55rp20-evb-pico))
- Software: **MicroPython** ([docs](http://micropython.org/))

## Documents and links

- [GitHub : W55RP20-S2E_master_Micropython](https://github.com/WIZnet-ioNIC/WoW-io-Design-Contest/tree/main/MicroPython) (code)

## Article

## How to Data Loopback Example (MicroPython)

This program demonstrates data loopback applications using the W55RP20 S2E board via UART or SPI interface. The Raspberry Pi Pico (Host) configures the W55RP20 S2E as a TCP Client, TCP Server, or UDP node using AT commands, and then enters Data Mode to echo back any data received from the PC.

## Step 1: Prepare software

The following software is required to run and test the MicroPython example.

- [**Thonny**](https://thonny.org/) : An integrated development environment for MicroPython. used to write, upload, and run code.

- Hercules : A serial terminal tool capable of TCP/UDP socket testing. (Required to act as the peer for loopback tests).

## Step 2: Prepare hardware

1. Connect GPIO13 according to the selected UART/SPI mode of the W55RP20 EVB Pico, as illustrated below.

| GPIO13 Pin | Desc |
| --- | --- |
| LOW(GND) | UART mode (default) |
| HIGH(3.3V) | SPI mode |

2. Connect the Raspberry Pi Pico and the W55RP20 EVB Pico using jumper wires as shown below, depending on the selected UART/SPI mode.

- Important Note on Mode Switching: In this example setup, GPIO 13 of the W55RP20 EVB Pico is physically connected to GPIO 13 of the Raspberry Pi Pico. The Host Pico sets the mode (High/Low) automatically based on the software configuration.

- If you change the **`**MODE**`** in the code (e.g., UART ↔ SPI): You MUST reset both boards (Raspberry Pi Pico and W55RP20 EVB Pico) to ensure the mode is switched and recognized correctly.

**If UART mode :**

| Raspberry Pi Pico | W55RP20 EVB Pico |
| --- | --- |
| GPIO4 (UART_TX) | GPIO5 (UART_RX) |
| GPIO5 (UART_RX) | GPIO4 (UART_TX) |
| GPIO13 (MODE_SEL) | GPIO13 (MODE_SEL) |
| GND | GND |

**If SPI mode :**

| Raspberry Pi Pico(Master) | W55RP20 EVB Pico(Slave) |
| --- | --- |
| GPIO2 (SPI_CLK) | GPIO2 (SPI_CLK) |
| GPIO3 (SPI_TX) | GPIO4 (SPI_RX) |
| GPIO4 (SPI_RX) | GPIO3 (SPI_TX) |
| GPIO5 (SPI_CS) | GPIO5 (SPI_CS) |
| GPIO26 (SPI_INT) | GPIO26 (SPI_INT) |
| GPIO13 (MODE_SEL) | GPIO13 (MODE_SEL) |
| GND | GND |

3. Connect the Raspberry Pi Pico to your PC (desktop or laptop) using a 5-pin Micro USB cable.

4. Connect the W55RP20 EVB Pico to your PC (desktop or laptop) using a USB Type-C cable.

## Step 3: Setup Example

- Raspberry Pi Pico (Master) : [Getting started with Raspberry Pi Pico (MicroPython)](https://www.raspberrypi.com/documentation/microcontrollers/micropython.html)

Please refer to the link below to install the MicroPython firmware on the Raspberry Pi Pico.

- **W55RP20 EVB Pico : **[Getting started with W55RP20 EVB Pico](https://docs.wiznet.io/Product/Chip/MCU/Pre-programmed-MCU/W55RP20-S2E/w55rp20-evb-pico-s2e)

Please refer to the link below for instructions on how to use the W55RP20 S2E.

## Step 4: Upload Code

- **Raspberry Pi Pico**

Open Thonny IDE and connect to the Raspberry Pi Pico. Upload the following driver and example files to the Pico's storage.

![](https://maker.wiznet.io/upload/ckeditor5/408384515%5F1769791777%2Epng)

*PICO's storage*

Required Files:

1. `w55rp20_s2e_uart.py` (Required for UART mode)

2. `w55rp20_s2e_spi.py` (Required for SPI mode)

Example Application Files (Choose one to test):

- `02_tcp_client_loopback.py`

- `03_tcp_server_loopback.py`

- `04_udp_loopback.py`

Configuration: Before running an example, open the Python file you intend to use and modify the User Configuration section at the top.

```c
# Example: 02_tcp_client_loopback.py

MODE = "uart"   # Set to "spi" or "uart"

# IP Configuration Mode
USE_DHCP = True  # True: DHCP (IM=1), False: Static IP (IM=0)

REMOTE_IP   = "192.168.11.2" # Must match your PC's IP address
REMOTE_PORT = "5000"         # Port to connect to
.
.
```

- **W55RP20 EVB Pico**

Following Step 3 in the Getting Started Guide, program the W55RP20 EVB Pico with the UF2 file and write the MAC address to complete the setup.

## Step 5: Run

Select the example file you want to test and follow the instructions below.

- [W55RP20 S2E AT command Manual](https://docs.wiznet.io/Product/Chip/MCU/Pre-programmed-MCU/W55RP20-S2E/command-manual-en)

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770392588%2Epng)

Run the example script in Thonny (press F5).

### Step 5.1: Run TCP Client Loopback

In this mode, the W55RP20 S2E connects to a TCP Server (Hercules) running on your PC.

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393069%2Epng)

PC (Hercules)

- Open Hercules and select the TCP Server tab.

- Port: Enter `5000` (or the port defined in your Python code).

- Click Listen.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393027%2Epng)

Pico (Thonny)

- Open `02_tcp_client_loopback.py`.

- Update `REMOTE_IP` to your PC's IP address.

- Run the script (F5).

# NOTE: Connection status check via 'ST' command is only available in SPI mode.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770392981%2Epng)

Test

- Hercules will show "Client connected".

- Type a message in Hercules and click Send.

- Verify that the message is echoed back in the Hercules receive window.

### Step 5.2: Run TCP Server Loopback

In this mode, the W55RP20 S2E waits for a TCP Client (Hercules) to connect.

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393353%2Epng)

Pico (Thonny)

- Open `03_tcp_server_loopback.py`.

- Run the script (F5).

- Wait for the log to display `Server IP Assigned: 192.168.x.x`.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393398%2Epng)

PC (Hercules)

- Open Hercules and select the TCP Client tab.

- Module IP: Enter the IP address displayed in the Thonny log.

- Port: `5000`.

- Click Connect.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393385%2Epng)

Test

- Once connected, type a message in Hercules and click Send.

- Verify that the message is echoed back.

### Step 5.3: Run UDP Loopback

In this mode, data is exchanged via UDP packets without a connection process.

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393543%2Epng)

Pico (Thonny)

- Open `04_udp_loopback.py`.

- Update `REMOTE_IP` to your PC's IP address.

- Run the script (F5).

- Wait for the log to display `Server IP Assigned: ...`.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393579%2Epng)

PC (Hercules)

- Open Hercules and select the UDP tab.

- Module IP: Enter the IP address displayed in the Thonny log.

- Port: `5000`.

- Local Port: `5000`.

- Click Listen.

---

![](https://maker.wiznet.io/upload/ckeditor5/617500408%5F1770393562%2Epng)

Test

- Type a message in Hercules and click Send.

- Verify that the message is echoed back.

- *(Note: In UART mode, the response may be buffered and sent in 10ms intervals due to the Packet Time setting.)*

---

Source: https://maker.wiznet.io/Grace_Koo/projects/w55rp20-s2e-tcp-udp-loopback-example-micropython/
