Best i2c sensors: 10 picks by project
The best i2c sensor is the one that measures the thing your project actually needs. Start with the job—environment, CO₂, light, distance, motion, analog input, power or non-contact temperature—then use this list to choose a board with a known address, voltage range and practical trade-off.
At a glance
i2c sensor list by project
| Need | Pick | Typical address |
|---|---|---|
| Environment | BME280 | 0x76 / 0x77 |
| CO₂ | SCD41 | 0x62 |
| Light | BH1750 | 0x23 / 0x5C |
| Distance | VL53L1X | 0x29 |
| Motion | LIS3DH | 0x18 / 0x19 |
| Motion + gyro | MPU-6050 | 0x68 / 0x69 |
| Analog inputs | ADS1115 | 0x48–0x4B |
| Power | INA219 | 0x40–0x4F |
| Gesture + proximity | APDS-9960 | 0x39 |
| Non-contact temperature | MLX90614 | 0x5A |
The picks
Ten i2c sensors worth designing around
BME280
EnvironmentTemperature, humidity and pressure in one widely supported breakout. The sensible starting point for a weather node, room monitor or anything that needs more than one environmental reading.
Watch out: The classic Amazon bait-and-switch: countless 'BME280' listings ship the cheaper BMP280 — no humidity sensor. Verify before building around it: chip-ID register 0xD0 reads 0x60 on a real BME280 and 0x58 on a BMP280, and a humidity reading stuck at 0 gives it away instantly.
SCD41
CO₂A true CO₂ reading plus temperature and humidity, suited to indoor-air and ventilation projects where a VOC-derived estimate is not enough.
Watch out: Check the board's voltage range and its active address before adding it to an existing bus.
BH1750
LightAmbient light in lux with minimal setup. It is the straightforward choice for daylight-aware lighting, display dimming and simple room automation.
Watch out: Check the board's voltage range and its active address before adding it to an existing bus.
VL53L1X
DistanceTime-of-flight ranging for presence, level and distance sensing. Choose it when an ultrasonic sensor is too large or unreliable for the enclosure.
Watch out: Same 0x29-for-everyone situation as the VL53L0X: multiple units need XSHUT sequencing or a multiplexer. And it is not register-compatible with the L0X — code and libraries for one won't run the other.
LIS3DH
MotionA low-power three-axis accelerometer with tap, shake and motion interrupts. Good for orientation, movement logging and wake-on-motion builds.
Watch out: Check the board's voltage range and its active address before adding it to an existing bus.
MPU-6050
Motion + gyroThe familiar budget six-axis option when rotation as well as acceleration matters. Its library ecosystem makes it a practical first IMU.
Watch out: Genuine MPU-6050s went end-of-life years ago, so most GY-521 modules now carry clone silicon. Clones mostly work, but many return the wrong WHO_AM_I (0x98 instead of 0x68) — which makes libraries that verify the ID refuse to start. Patch the check, or use a library that skips it.
ADS1115
Analog inputsA 16-bit external ADC for reading analog sensors from a digital host. Especially useful when a microcontroller's own ADC is noisy, scarce or inaccurate at the rails.
Watch out: Check the board's voltage range and its active address before adding it to an existing bus.
INA219
PowerMeasures bus voltage and current through an external shunt, so a battery or load stops being a guess. Use it for battery experiments and power-budget debugging.
Watch out: The chip reaches all 16 addresses (0x40–0x4F) because A0 and A1 each strap to one of four places — GND, VS+, SDA or SCL. Most breakouts only expose the four you get from GND/VS+ jumpers (0x40, 0x41, 0x44, 0x45); the other twelve need A0/A1 wired to SDA or SCL by hand.
APDS-9960
Gesture + proximityCombines gesture, proximity, colour and ambient-light sensing in one compact part. A useful way to add touchless input without a camera.
Watch out: Check the board's voltage range and its active address before adding it to an existing bus.
MLX90614
Non-contact temperatureReads the temperature of an object without touching it. A natural fit for surface checks, motion-triggered measurement and projects where a probe cannot contact the target.
Watch out: The part-number suffix silently sets supply voltage and field of view, and modules rarely say which variant they carry. Most GY-906 boards use the 3 V, ~90°-FOV variant — it averages everything in a wide cone, so don't expect spot readings at a distance.
Before you buy
Four checks before adding an i2c sensor
1. Measurement first. A gas sensor cannot substitute for a true CO₂ measurement, and an accelerometer cannot report rotation the way an IMU can. Pick the physical quantity before comparing breakout features.
2. Address next. A bus needs unique addresses. Check the i2c address list before adding a board; if two picks conflict, use a selectable-address variant, a second bus or a multiplexer.
3. Match voltage. Pi and ESP32 GPIO are 3.3 V. A 5 V Arduino and a 3.3 V-only sensor need the right bidirectional level shifter, not a one-way voltage divider.
4. Verify the hardware. Run i2c scanner code before debugging a library. A detected address proves the wiring and power path before software enters the picture.
Questions
Choosing an i2c sensor
What is the best first i2c sensor?
A BME280 is the safest first pick because one breakout measures temperature, humidity and pressure, runs at 3.3 V or 5 V, and has mature libraries. If your project has a specific need, choose the sensor for that measurement rather than adding a general-purpose board by default.
Can I put several i2c sensors on one bus?
Yes. All sensors share SDA and SCL, provided their active 7-bit addresses are unique and their logic voltages are compatible. Check each address before buying, scan the finished bus, and account for the combined pull-up resistors on a long chain.
How do I choose an i2c sensor?
Start with the measurement you need, then check range, accuracy, voltage, default address, host-library support and physical conditions such as distance, sunlight, condensation or current range. A sensor that matches the project is better than one with a longer feature list.
Do i2c sensors need a level shifter?
Only when the host and sensor do not share a compatible logic voltage. A 3.3 V Raspberry Pi or ESP32 generally connects directly to a 3.3 V sensor; a 5 V Arduino needs a bidirectional level shifter for a 3.3 V-only board.