VEML7700 with a Raspberry Pi Pico
A Vishay VEML7700 high-accuracy ambient light sensor that reports illuminance in lux over I2C, from near-darkness up to about 140,000 lux.

The VEML7700 breakout connects to the Raspberry Pi Pico's I2C0, SDA on GP4 and SCL on GP5, at its fixed address 0x10, with VIN on 3V3. The bare sensor is a 2.5 V to 3.6 V part, and from the Pico's 3.3 V the breakout's level shifter passes 3.3 V logic straight through.
Wiring the VEML7700 to the Raspberry Pi Pico
Pin by pin.
| VEML7700 | Raspberry Pi Pico |
|---|---|
| VIN | 3V3 |
| GND | GND |
| SCL | GP5 |
| SDA | GP4 |
What to know on the Raspberry Pi Pico
- The chip runs from 2.5 V to 3.6 V with an I2C bus of 1.7 V to 3.6 V; the Pico's 3.3 V sits inside both.Vishay VEML7700 datasheet Rev 1.8, p. 1
- Wire VIN, not the breakout's 3V3 pin, which is its regulator's output.Adafruit VEML7700 breakout, pinouts
- Its address is fixed at 0x10. A second VEML7700 on the same Pico needs the second I2C controller (Wire1).Vishay VEML7700 datasheet, I2C slave address; Raspberry Pi Pico datasheet, release 21, p. 4
- The sensor supports I2C clocks from 10 kHz to 400 kHz, so Wire.setClock(400000) on the Pico is within its range.Vishay VEML7700 datasheet, I2C bus timing
VEML7700 code for the Raspberry Pi Pico
Compiled for rp2040:rp2040:rpipico on 2026-10-30.
// VEML7700 on Raspberry Pi Pico: wiring and a free simulation at https://www.tinkered.ai/components/veml7700/raspberry-pi-pico
#include <Wire.h>
#include <Adafruit_VEML7700.h>
Adafruit_VEML7700 veml;
void setup() {
Serial.begin(9600);
if (!veml.begin()) { // fixed I2C address 0x10
Serial.println("VEML7700 not found");
while (1) delay(10);
}
// Default gain 1x / integration time 100 ms: readLux() reads the gain and
// integration time back from the sensor, so these stay consistent.
}
void loop() {
Serial.print("Lux: ");
Serial.println(veml.readLux());
delay(500);
}
VEML7700 on the Raspberry Pi Pico: questions
Does the VEML7700 work with the Raspberry Pi Pico?
Yes: power the breakout from 3V3, wire SDA to GP4 and SCL to GP5. The sensor itself is a 2.5 V to 3.6 V part (Vishay datasheet Rev 1.8, p. 1).
Why does begin() fail on my Pico?
Check SDA on GP4, SCL on GP5 and VIN (not 3V3) powered. Its address is fixed at 0x10; nothing else on the bus may use it.
Can I read two VEML7700 sensors with one Pico?
Not on one bus, since the address is fixed. Use the Pico's second I2C controller (Pico datasheet, p. 4) or an I2C multiplexer.
Keep going
This guide as plain Markdown. /components/veml7700/raspberry-pi-pico.md