Quick Start
This guide introduces the FoBE Breakout ENS160 and how to use it.
Hardware diagram
The following figure illustrates the FoBE Breakout ENS160 hardware diagram.

Mechanical dimensions
FoBE Breakout ENS160 is a single-sided 25.4mm x 25.4mm (1" x 1") 1.6mm thick PCB with two SH1.0 4-pin connectors and a set of 5-pin 2.54mm header holes. Fixing by 4 x 1.6mm Screw holes.

Interfaces
The module provides dual 4-Pin JST SH1.0 connectors, compatible with STEMMA QT / Qwiic.
2.54mm 5-Pin | JST-SH1.0 | Features |
---|---|---|
GND | GND | Ground |
3V3 | 3V3 | Power supply, Only 3.3V |
SDA | SDA | I2C-Data line |
SCL | SCL | I2C-Clock line |
INT | — | Interrupt, Active Low |
Advanced
Jumper
The module features two jumper pads:
Interface | Description |
---|---|
LED-JUMPER | Disconnect this jumper to turn off the power LED for further power saving |
ENS160-ADDR | I2C address selector: 0x53 Set JUMPER:H 0x52 Set JUMPER:L |
Programming
Running with FoBE Quill ESP32S3 Mesh
Let's get started with the FoBE Quill ESP32S3 Mesh using the MFP interface.
- Connect the FoBE Breakout ENS160 to the FoBE Quill ESP32S3 Mesh using the MFP interface.

-
Create a sketch or PlatformIO project, or follow the FoBE Quill ESP32S3 Programming Guide for pre-configuration.
-
Install the necessary library in your project:
sciosense/ScioSense_ENS16x@^2.0.4
- Copy the following code into your sketch or PlatformIO project:
#include <ScioSense_ENS16x.h>
#define I2C_ADDRESS 0x52 // I2C address definition (H: 0x53, L: 0x52), check your jumper settings
#define I2C_SDA_PIN PIN_MFP3 // SDA pin for MFP to I2C cable, change if needed
#define I2C_SCL_PIN PIN_MFP4 // SCL pin for MFP to I2C cable, change if needed
#define PERI_EN_PIN PIN_PERI_EN // Peripheral enable pin, change if needed
ENS160 sensor;
void setup()
{
// Initialize serial communication
Serial.begin(115200);
Serial.println("Serial initialized");
// Initialize peripheral power
if (PERI_EN_PIN >= 0)
{
pinMode(PERI_EN_PIN, OUTPUT);
digitalWrite(PERI_EN_PIN, HIGH); // Enable peripheral power
Serial.println("Peripheral power enabled");
}
// Initialize sensor
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
sensor.begin(&Wire, I2C_ADDRESS);
Serial.println("I2C bus initialized");
while (sensor.init() != true)
{
delay(200);
}
Serial.println("ENS160 sensor initialized");
// Start measurement
sensor.startStandardMeasure();
}
void loop()
{
sensor.wait();
if (sensor.update() == RESULT_OK)
{
if (sensor.hasNewData())
{
// Display data on screen
Serial.print("\033[H\033[J");
Serial.println("> FoBE Breakout ENS160 Monitor");
Serial.println();
Serial.print("\033[7m");
Serial.printf("%-12s%-12s%-12s\n", "INDEX", "VALUE", "UNIT");
Serial.print("\033[0m");
Serial.printf("%-12s%-12d%-12s\n", "AQI", sensor.getAirQualityIndex_UBA(), "UBA");
Serial.printf("%-12s%-12d%-12s\n", "TVOC", sensor.getTvoc(), "ppb");
Serial.printf("%-12s%-12d%-12s\n", "ECO2", sensor.getEco2(), "ppm");
if (sensor.hasNewGeneralPurposeData())
{
Serial.printf("%-12s%-12d%-12s\n", "RS0", sensor.getRs0(), "Ohm");
Serial.printf("%-12s%-12d%-12s\n", "RS1", sensor.getRs1(), "Ohm");
Serial.printf("%-12s%-12d%-12s\n", "RS2", sensor.getRs2(), "Ohm");
Serial.printf("%-12s%-12d%-12s\n", "RS3", sensor.getRs3(), "Ohm");
}
}
}
}
This example code uses ANSI output formatting. Your terminal must support ANSI escape codes to display the output correctly.
# platformio.ini
[env:fobe_quill_esp32s3_mesh]
platform = FoBE Espressif 32
board = fobe_quill_esp32s3_mesh
framework = arduino
lib_deps =
sciosense/ScioSense_ENS16x@^2.0.4
monitor_speed = 115200
monitor_raw = true
- Build and upload the project. You should see the FoBE Breakout ENS160 Monitor output in the serial monitor (raw mode).
> FoBE Breakout ENS160 Monitor
INDEX VALUE UNIT
AQI 2 UBA
TVOC 109 ppb
ECO2 564 ppm
RS0 62991 Ohm
RS1 1 Ohm
RS2 100831 Ohm
RS3 22143 Ohm