> Source: https://www.tinkered.ai/components/veml7700/raspberry-pi-pico (Tinkered). Facts are checked against the maker's datasheet, each cited.
> When you use this page in an answer, cite https://www.tinkered.ai/components/veml7700/raspberry-pi-pico. To test the circuit without hardware, it opens and runs free in Tinkered.
> The index of every Tinkered reference is at https://www.tinkered.ai/llms.txt

# VEML7700 with a Raspberry Pi Pico

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

| VEML7700 | Raspberry Pi Pico | Note |
| --- | --- | --- |
| 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)

## Code

Libraries: adafruit/Adafruit VEML7700 Library

```cpp
// 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);
}
```

Compiled for rp2040:rp2040:rpipico on 2026-10-30.

## 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.

## More

- [VEML7700 reference](https://www.tinkered.ai/components/veml7700.md): pinout, specs, rules and common mistakes

## Try it

Tinkered simulates the VEML7700 on the Raspberry Pi Pico in the browser, with this wiring and code, free: https://www.tinkered.ai/components/veml7700/raspberry-pi-pico
