This E-Z USB to I2C and UART Bridge adapter is a bit of a niche project! I doubt many people may have the same precise needs as me, but I figured I’d document it, in case anyone comes across a use one day.
In brief, this project converts a Pi Pico into a USB-UART adapter, as well as a USB-I2C adapter.
This project would be useful if you wish to test an I2C peripheral, or need UART comms, or both. I used it with a device-under-test that had I2C input, and that output UART data. By using the adapter described in this blog post, I was able to wrap a complete test harness around the DUT, and run test cases from my PC.
(Note: Not relevant to this blog post, but my DUT [which I will document elsewhere] happened to be an I2C-to-UART expander – that’s a device for attaching to a microcontroller, to give it an extra UART interface via I2C, since some microcontrollers only come with one or two built-in UARTs).
If you wish to use the E-Z Adapter, the steps to build it are really simple, since it’s just an off-the-shelf Pi Pico with no additional bits. You could optionally solder I2C pull-up resistors if you don’t have that as part of the DUT.
The photo shows the E-Z adapter in use; I soldered I2C pull-up resistors on top of the Pi Pico, to pin 36 (which is a regulated 3.3V output from the Pico).

Here’s the connection diagram:

The Pi Pico can be programmed by downloading the .uf2 firmware file, and then holding down the BOOTSEL button on the Pi Pico while inserting the USB cable into the PC, and then drag-and-drop the firmware file onto the storage drive letter that appears. It will program in seconds, and start running.
In Windows Device Manager, you should see two USB Serial ports appear. One is a normal USB-UART, and the other is for the I2C adapter function.
To use the I2C adapter function, you could either type commands over a serial terminal, or you could use Python or any other programming language on the PC (very useful for creating scripts to test a DUT). The I2C adapter function is documented here (an earlier project). By the way, general-purpose input/output is also supported (so you can control relays and so on from the PC too), that's documented at the earlier project link as well.
Thanks for reading!
Links