During the development and integration of Arduino-based systems with multiple I²C peripheral devices, the unambiguous identification of the actual I²C address in use often represents a practical challenge. Manufacturer specifications are frequently incomplete, inconsistent, or dependent on hard-wired address pins on breakout boards whose configuration is not always clearly documented. In more complex setups, the simultaneous presence of multiple devices on the bus further complicates systematic troubleshooting.
Against this background, a compact, mobile I²C scanner is developed as a self-contained diagnostic and support tool. The objective is to identify individual I²C components quickly, reproducibly, and independently of a target system, without relying on a connected computer or a serial debug interface.
Basic Concept of the Device
The scanner is designed as a fully autonomous stand-alone tool. An Arduino Nano serves as the central control unit, managing the configurable I²C test bus and controlling the scanning process. Scan results are displayed via an integrated OLED display based on the SSD1306 controller, which is also connected via the I²C bus. Scan initiation is performed exclusively manually using a push button. External connection leads allow direct connection of the I²C devices under test.
The device operates independently of external software. All information relevant to the user is displayed directly on the integrated screen.

Mobile I²C scanner with Arduino Nano control unit, separate connection leads for supply voltage, ground, SDA, and SCL to allow flexible adaptation to different I²C modules, three switches for selecting the bus supply voltage between 5 V and 3.3 V and for selectively enabling two 4.7 kΩ pull-up resistors, as well as a push button for manual initiation of the scan process.
Power Supply and Bus Configuration
The Arduino Nano is powered via a USB interface with a nominal voltage of 5 V. The system remains permanently active, while an I²C scan is initiated exclusively by explicit user action.
An adjustable supply voltage is provided for powering connected I²C devices under test. Either 5 V or 3.3 V can be supplied directly from the Arduino Nano. Selection is performed via a hardware switch, ensuring that only one of the two voltages is active at any given time. This allows the scanner to be used with both classic 5 V I²C devices and modern 3.3 V sensors without requiring external power supplies or level shifters.
The SDA and SCL bus lines are connected directly to the corresponding pins of the Arduino Nano. Series resistors in the data lines are deliberately omitted. A common ground connection between the scanner and the device under test is mandatory.
I²C Bus Pull-Up Concept
The scanner incorporates two dedicated pull-up resistors for SDA and SCL, which can be selectively enabled or disabled via switches. The pull-ups always act on the currently selected bus supply voltage, either 5 V or 3.3 V.
This concept accounts for the fact that many I²C breakout boards already integrate their own pull-up resistors. When multiple such modules are operated in parallel, the effective total resistance can become too low, potentially leading to steep signal edges, increased current peaks, and bus instability. By allowing the pull-ups to be enabled only when required, compatibility with a wide range of modules is improved and typical bus issues caused by excessively strong pull-ups are avoided.
Operating Concept and Scan Procedure
Scan initiation is performed exclusively via a push button connected to pin D7 of the Arduino Nano. The input is configured as INPUT_PULLUP, resulting in a HIGH level in the idle state and a LOW level when the button is pressed against ground. Automatic scanning at power-up is deliberately omitted. The user explicitly decides when a scan is to be performed.

OLED display of the I²C scanner during a scan operation, showing detected external I²C addresses in hexadecimal notation; the display’s own I²C address is masked in software so that only connected devices under test are shown.
After detection and debouncing of the button press, a scan status message is displayed on the OLED. The I²C bus is then initialized and the valid I²C address range from 0x03 to 0x77 is scanned systematically. For each address, the scanner checks whether a device responds to an I²C transmission. All responding addresses are stored and subsequently prepared for display.
OLED Integration and Handling of the Display Address
The integrated OLED display uses a fixed I²C address of 0x3C. Since the display is permanently connected to the bus, it would otherwise appear as a detected device in every scan. This behavior is deliberately handled in software. The known display address is explicitly removed from the scan results.
Only external I²C devices are shown on the display. The OLED address itself is displayed in the header to maintain transparency regarding the bus configuration without distorting the scan results.
Presentation of Scan Results
Detected external I²C addresses are displayed in hexadecimal format using an enlarged font size. Up to three addresses are shown per display page. If more than three devices are detected, the results are presented across multiple pages. The final page remains permanently visible, allowing the results to be read without time pressure.
The display of the number of detected devices is deliberately omitted. In practical use, the existence and identity of the addresses themselves are the only relevant information.
Typical Operating Procedure
The scanner is first powered via USB. The supply voltage for the device under test is then selected, and the pull-up resistors are enabled or disabled depending on the module configuration. Ground, supply voltage, SDA, and SCL are subsequently connected. After pressing the button, the scan is performed and the I²C address or addresses of the connected device are displayed directly on the screen.
Evaluation and Context
Through the combination of fully stand-alone operation, selectable I²C supply voltage, controlled pull-up configuration, and clear, interference-free result presentation, the described I²C scanner represents a robust and practical diagnostic tool. The deliberately simple operating concept reduces the likelihood of misuse and makes the device particularly well suited for workbench, laboratory, and development environments.
Conclusion
The developed I²C scanner meets the requirements of a reliable, mobile support tool for identifying unknown I²C devices. Its technical design deliberately avoids unnecessary complexity and focuses on reproducible functionality and transparency. As such, it constitutes a valuable addition for developers who regularly work with I²C systems and value clean, controlled diagnostics.
List of Materials
Arduino Nano
https://amzn.to/3ZkDZB3
Black PETG
https://amzn.to/3PjboGX