# jrowberg/i2cdevlib

I2C device library collection for AVR/Arduino or other C++-based MCUs

Repository: https://github.com/jrowberg/i2cdevlib
Canonical: https://ross.abutalabs.com/products/i2cdevlib
Homepage: http://www.i2cdevlib.com
Language: C++
License Family: other
Last push: 2025-08-04T23:42:03+00:00

## Health v2 (maintenance only)
Score: 48/100 (v2, computed 2026-09-03T02:20:16.233290+00:00)
- activity 35, release rhythm 35, longevity 100
- inputs: {"age_days": 5517, "days_push": 394, "days_rel": null, "gap_med": null, "n_releases_24m": 0}
- flags: no_releases, no_license
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 4266, forks 7421 (observed 2026-08-28T04:08:40.721454+00:00)

## What it is
A collection of uniform, Doxygen-documented C++ classes providing interfaces to a wide range of I2C peripheral devices such as accelerometers, gyroscopes, magnetometers, pressure sensors, ADCs, real-time clocks, and OLED drivers, targeting Arduino/AVR and other C++-based microcontrollers. Each device class builds on a generic I2Cdev abstraction that handles bit- and byte-level I2C communication, making the drivers easy to port across platforms like Arduino, PIC, MSP430, or bit-banged GPIO.

## Use cases
- read accelerometer and gyroscope data from an MPU-6050 in an Arduino sketch
- C++ driver library for talking to I2C sensors on a microcontroller
- read magnetometer or barometric pressure sensor data over I2C
- interface an ADS1115 ADC or I/O expander with an AVR microcontroller
- drive an SSD1308 OLED display from an embedded project
- abstract low-level I2C register reads and writes across multiple sensor devices
- connect multiple IMUs or I2C devices using several Wire buses without mux chips

## When to choose
- You use Arduino, AVR, or another C++-capable MCU and need ready-made, well-documented drivers for supported I2C sensors and peripherals.
- You want complete register-level coverage of a supported device plus example sketches and online HTML documentation.
- You need a lightweight, statically-used core class to manage multiple I2C devices or multiple I2C transceivers in one project.

## When to avoid
- Your specific device is not in the supported device list and you would rather write a small bespoke driver.
- You need a pure C, non-object-oriented interface; the procedural version is still under development.
- You expect standard IDE or package-manager library installation; the monorepo layout requires manually copying folders or creating symlinks.
- You target a platform with no C++ compiler or no ported I2Cdev communication backend.

## Facets
- artifact type: library
- maturity: stable
- function: embedded, iot
- domain: embedded-systems, iot, hardware
- platform: embedded, cpp, cross-platform, iot
- tags: arduino, i2c, device-drivers, sensors, mpu6050, avr, microcontroller, hardware-interface, register-maps

## Member repositories
- jrowberg/i2cdevlib (main) score 48

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:08:40.721454+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T18:22:02.842757+00:00, confidence not recorded.
  - readme: https://github.com/jrowberg/i2cdevlib (fetched 2026-08-28T04:08:40.721454+00:00, sha ab91524b2a3f)
  - homepage: http://www.i2cdevlib.com (fetched 2026-08-29T09:11:36.366274+00:00, sha 82717d430469)
- Data as of 2026-08-30T08:39:29.467469+00:00.
