Check Device I2C Address

Aug 2026

Introduction

When you attach a device on the I2C bus, even though you might know it's address, it's a great idea to run a test to see if you can read it's actual address. The achieves two things, it proves your wiring is good, because if you don't have the correct cabling, this script will fail, and it proves that the device does appear to function.
In this example, I have an LCD address on I2C bus zero, and I know it's address is 3C0 Hex, which in decimal is 60. So this test will confirm that my assumptions about my device address is good.

I2C Address Check

Below is the code we need to run to check for devices on the I2C. This script uses standard built in libraries, so you won't need to go hunting for any extra library files, you Pico (or RP2040 device) will be good to go.

from machine import Pin, I2C i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000) print("I2C addresses:", i2c.scan())

There are a couple of considerations around this code, and they are:

i2c = I2C(0 - The Zero is for Bus 0

The Pico has Bus 0 and Bus 1, and you should know which you used. If you have connected your device to Bus 1, then change this zero

i2c = I2C(0, scl=Pin(5), sda=Pin(4), freq=200000) to a 1.

These are the Pico pins your device is connected to, so scl(5) is Pico Pin 7 and sda(4) is Pico pin 6.

scl=Pin(5), sda=Pin(4)

If you run the code above, you will see something similar to below:
Here we can see the I2C address is listed as 60 and this is a Decimal address.
If you convert 60 Dec to Hex, then you get Hex 3C, which is exactly the address the LCD is currently set to.