The ProtoCentral ST1VAFE3BX breakout puts STMicroelectronics’ vital-signs analog front-end (vAFE) — a single-lead biopotential channel plus a 3-axis accelerometer in one tiny chip — on a Qwiic-ready board with an included 3-electrode ECG cable. This guide takes you from an unboxed board to a live ECG trace on the Arduino Serial Plotter.
Introduction
The ST1VAFE3BX combines two sensors in a single LGA package: a single-channel vertical analog front-end (vAFE) for biopotential signals (ECG, EMG, EEG) and a 3-axis MEMS accelerometer, alongside an on-chip Machine Learning Core (MLC) for edge motion classification. That pairing lets you capture a clean ECG while simultaneously tracking body motion — ideal for wearables, hearables, and activity-aware biopotential research where motion artefacts need to be regressed out.
This ProtoCentral breakout is pre-configured for single-lead ECG and ships with a 3-electrode ECG cable that plugs into the on-board 3.5 mm jack. It exposes a QWIIC connector for plug-and-play I²C and a 7-pin header for direct I²C / I³C / SPI access, and its on-board 1.8 V regulator with bidirectional level shifting lets it run from any 2 V – 5 V host (Arduino, ESP32, Raspberry Pi, etc.).
Not a medical device. This board is for evaluation, education, and research only — it is not a diagnostic instrument.
Key Features
- Single-lead ECG via the included 3-electrode cable and 3.5 mm jack — powered by ST’s vAFE biopotential channel (programmable gain 2× / 4× / 8× / 16×, input impedance 100 MΩ – 1 GΩ).
- 3-axis accelerometer (±2 / ±4 / ±8 / ±16 g) for motion and activity tracking.
- On-chip Machine Learning Core (MLC) for low-power motion classification at the edge.
- Triple-mode digital interface — I²C, I³C, and SPI, selectable via the JP2 jumper (or the CS pin) — plus a QWIIC connector for solderless I²C.
- Wide 2 V – 5 V host range thanks to an on-board 1.8 V LDO and bidirectional logic-level translation.
- Open hardware (CERN-OHL-P v2) with an MIT-licensed Arduino library.
What’s in the Box
| Qty | Item |
|---|---|
| 1 | ProtoCentral ST1VAFE3BX Biopotential AFE + Accelerometer Breakout |
| 1 | 3-electrode ECG cable (3.5 mm jack) |
Disposable ECG electrode pads (standard snap type) are consumables and are not included.
Specifications
| Parameter | Value |
|---|---|
| Sensor IC | STMicroelectronics ST1VAFE3BX |
| Biopotential | Single-channel vAFE (ECG / EMG / EEG), 12-bit, gain 2× – 16×, Zin 100 MΩ – 1 GΩ |
| Accelerometer | 3-axis, ±2 / ±4 / ±8 / ±16 g, ODR up to 7680 Hz |
| Digital interface | I²C, I³C, or SPI (JP2-selectable) + QWIIC |
| I²C address | 0x21 default (SA0 → VCC); 0x20 with SA0 → GND |
| Host supply | 2 V – 5 V (on-board 1.8 V LDO + level shifting) |
| Connectors | 3.5 mm ECG jack · QWIIC · 7-pin 0.1″ header |
| Test points | BIO1 / BIO2 / VCM / IN1 / IN2 |
| Edge AI | On-chip MLC + FSM |
Note on operating modes: the ST1VAFE3BX streams either the accelerometer or the vAFE biopotential channel at a time — they are mutually exclusive. The library’s
configureForECG()switches into vAFE-only mode; calldisableVAFE()to return to accelerometer mode.
Wiring the digital interface
Option 1 — QWIIC (recommended, solder-free)
If your microcontroller has a QWIIC / STEMMA QT connector, plug a QWIIC cable into the board’s QWIIC port — power and I²C are handled for you, no soldering. (QWIIC runs at 3.3 V.)
Option 2 — 0.1″ header to a breadboard
Wire four lines from the 7-pin header to your microcontroller for I²C:
| ST1VAFE3BX pin | Arduino Uno | ESP32 (default I²C) |
|---|---|---|
| VCC | 5V (or 3.3V) | 3.3V |
| GND | GND | GND |
| SDA | A4 | GPIO21 |
| SCL | A5 | GPIO22 |
| INT1 / INT2 (optional) | any GPIO | any GPIO |
The breakout includes I²C pull-ups and accepts a 2 V – 5 V supply, so an Arduino Uno can power it from 5V. Make sure the JP2 jumper is set to I²C (the default for this guide). INT1/INT2 are optional data-ready interrupts — leave them unconnected and poll instead.
ST1VAFE3BX ↔ Arduino Uno I²C connections. With QWIIC, a single cable carries all four lines — no wiring needed.
Connecting the ECG electrodes
Single-lead ECG uses the included 3-electrode cable plugged into the board’s 3.5 mm jack. Snap a disposable electrode onto each lead and place them on the body as shown — this is Lead I (LA − RA) with a reference electrode for common-mode rejection:
| Electrode | Body location | Connects to |
|---|---|---|
| LA (red) | Below the left clavicle | ST1VAFE3BX ECG+ |
| RA (black) | Below the right clavicle | ST1VAFE3BX ECG− |
| RL (green) | Lower right abdomen | ST1VAFE3BX reference |
Standard limb-lead (Lead I) placement — the same 3-electrode method used across ProtoCentral’s single-lead ECG boards.
⚠️ Safety: when electrodes are attached to a person, run the host computer on battery power, not mains. This avoids any direct electrical path between mains earth and the user. This board is for research/education only and is not a medical diagnostic device.
Installing the Arduino Library
Option 1 — Library Manager (recommended)
- In the Arduino IDE, open Tools → Manage Libraries…
- Search for
ProtoCentral ST1VAFE3BX. - Click Install.
Option 2 — Manual install from GitHub
- Download the library as a ZIP from github.com/Protocentral/protocentral_st1vafe3bx_arduino (Code → Download ZIP).
- In the Arduino IDE: Sketch → Include Library → Add .ZIP Library… and select the file.
Either way, the example sketches below appear under File → Examples → ProtoCentral ST1VAFE3BX.
Your First Reading — verify the board
The quickest power-on check streams the accelerometer (the default mode after begin()), which confirms I²C wiring before you attach any electrodes. Load 01.Accel:
#include <Wire.h>
#include "ProtoCentral_ST1VAFE3BX.h"
ST1VAFE3BX sensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.begin()) { // defaults to I²C 0x21 (SA0 → VCC)
Serial.println("ST1VAFE3BX not found — check power, SDA/SCL, and JP2 = I2C.");
while (1) delay(1000);
}
sensor.setAccelFullScale(AccelFullScale::G_2);
}
void loop() {
if (sensor.isAccelDataReady()) {
AccelData a;
sensor.readAccel(&a);
Serial.print(a.x, 4); Serial.print('\t');
Serial.print(a.y, 4); Serial.print('\t');
Serial.println(a.z, 4);
}
}
Open the Serial Plotter at 115200 baud and tilt the board — three traces should track gravity. If the sensor isn’t found, see Troubleshooting. (You can also confirm the chip ID directly: sensor.getDeviceID() returns 0x48.)
Recording an ECG
Attach the 3-electrode cable as shown above, then load 02.ECGHeartRate. A single call — configureForECG() — switches the chip into vAFE-only mode with sensible ECG settings (differential input, 1 GΩ impedance, 4× gain, 800 Hz high-performance mode with a 45 Hz low-pass filter):
#include <Wire.h>
#include "ProtoCentral_ST1VAFE3BX.h"
ST1VAFE3BX sensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.begin()) { while (1) delay(1000); }
sensor.configureForECG(); // differential, 1 GΩ, 4× gain — vAFE-only mode
}
void loop() {
Serial.println(sensor.readVAFE_mV(), 3); // ECG amplitude in millivolts
delay(4); // ~250 Hz
}
Open the Serial Plotter and you should see the ECG waveform with clear QRS complexes once the electrodes settle (give it a few seconds). The full 02.ECGHeartRate example adds a baseline filter and a simple heart-rate estimate printed as CSV.
Visualizing with OpenView
For a richer real-time view, 03.ECGOpenView streams the ECG in the packet format used by ProtoCentral OpenView — our cross-platform viewer. Flash the example, open OpenView, and watch the live trace without writing any plotting code.
Going further — on-chip motion AI
Three examples show the ST1VAFE3BX’s Machine Learning Core in action:
04.MotionIntensityMLC— the on-chip MLC classifies motion intensity (0–7) using the official ST UCF, with no MCU-side processing.05.SmartRecorder— a context-aware recorder: the MLC watches for stillness, arms the vAFE only when the subject is still, streams ECG over OpenView, then re-arms.06.HeartRateOnStill— a text-only variant of 05 that drops into ECG and prints heart rate when the subject is still.
These are a great starting point for low-power, activity-aware biopotential designs.
Troubleshooting
“ST1VAFE3BX not found” / nothing on the I²C scan
Confirm VCC (2–5 V) and GND, check that SDA/SCL aren’t swapped, and make sure the JP2 jumper selects I²C (not I³C/SPI). The default address is 0x21 (SA0 → VCC); use sensor.begin(0x20) if SA0 is strapped to GND.
Flat or extremely noisy ECG
Check that the 3-electrode cable is fully seated in the 3.5 mm jack and that all three electrodes have good skin contact (clean, slightly moist skin; fresh pads). Keep the subject still while the baseline settles, and run the host on battery — mains-powered hosts inject 50/60 Hz hum.
Accelerometer reads zeros after running an ECG sketch
That’s expected — the chip is in vAFE-only mode. Call disableVAFE() (or re-run an accelerometer example) to return to accelerometer mode; the two streams are mutually exclusive.
QWIIC device not detected
Make sure the QWIIC cable is fully seated and not reversed, and that your host runs 3.3 V I²C logic.
Resources
- Arduino library + examples: github.com/Protocentral/protocentral_st1vafe3bx_arduino
- ST1VAFE3BX datasheet (ST): st.com/resource/en/datasheet/st1vafe3bx.pdf
- Visualization: ProtoCentral OpenView
Licenses
- Hardware: CERN-OHL-P v2 (Permissive)
- Software / Arduino library: MIT

