Getting Started

Getting Started with the ProtoCentral FDC2214 Breakout

Last updated Jun 14, 2026

The ProtoCentral FDC2214 breakout puts Texas Instruments’ 4-channel, 28-bit capacitance-to-digital converter on a compact Qwiic-ready board so you can start measuring capacitance over I²C in minutes. This guide takes you from an unboxed board to live capacitance readings on the Arduino Serial Plotter.

Introduction

The FDC2214 measures capacitance indirectly: each channel drives an LC tank (an inductor plus a capacitor) and measures its resonant frequency. As the capacitance of your sensing electrode changes — a finger approaching, liquid rising in a tank, a material moving closer — the resonant frequency shifts, and the FDC2214 reports it as a 28-bit number. Because it tracks frequency rather than absolute charge, the FDC2214 is highly resistant to the EMI and supply noise that defeat simpler capacitive front-ends, and it resolves capacitance changes down to the femtofarad level.

That makes this board a good fit for proximity and gesture sensing, touch buttons behind any surface, liquid-level measurement, material/thickness analysis, and flex/displacement sensing.

How is this different from the FDC1004? ProtoCentral’s FDC1004 breakout uses a charge-based converter that reads absolute capacitance to ground, whereas the FDC2214 tracks the resonant frequency of an LC tank. The resonant approach gives the FDC2214 much higher resolution (28-bit) and far better immunity to electrical noise — making it the stronger choice for proximity, gesture, and high-precision sensing. For a full side-by-side, see FDC1004 vs FDC2214.

Key Features

  • 4 independent channels (CH0–CH3) — sense four electrodes at once with autoscan.
  • 28-bit resolution — femtofarad-level capacitance changes.
  • LC-based measurement — EMI-resistant; works through plastic, glass, and other non-conductive surfaces.
  • I²C interface with two Qwiic connectors for solder-free daisy-chaining, plus a 0.1″ header for breadboards.
  • 3.3 V – 5 V tolerant logic and supply.
  • Open hardware (CERN-OHL-P v2) with an MIT-licensed Arduino library.

What’s in the Box

Qty Item
1 ProtoCentral FDC2214 Capacitance-to-Digital Converter Breakout
2 0.1″ male header strips (unsoldered)

The board ships with a default LC tank (18 µH inductor + 33 pF capacitor) on all four channels, so every channel resonates in a useful range and works out of the box for proximity sensing. Your sensing electrode is application-specific and not included — see The onboard LC tank below.

Specifications

Parameter Value
Sensor IC Texas Instruments FDC2214
Channels 4 (CH0–CH3)
Resolution 28-bit
Interface I²C (up to 400 kHz) + 2× Qwiic
I²C address 0x2B default (ADDR→VDD on-board); 0x2A with ADDR→GND
Operating voltage 3.3 V – 5 V
Reference oscillator 43.4 MHz internal
Sensor frequency range 10 kHz – 10 MHz

Wiring

Option 1 — Qwiic (recommended, solder-free)

If your microcontroller has a Qwiic / STEMMA QT connector (SparkFun RedBoard, Adafruit QT Py, ESP32-S3 Qwiic boards, etc.), just plug a Qwiic cable into either of the board’s two Qwiic ports. Power and I²C are handled for you — no soldering. The second port lets you daisy-chain another Qwiic device.

Option 2 — 0.1″ header to a breadboard

Solder one of the included header strips and wire four lines to your microcontroller:

FDC2214 pin Arduino Uno ESP32 (default I²C)
VCC 3.3V 3.3V
GND GND GND
SDA A4 GPIO21
SCL A5 GPIO22
INTB (optional) any GPIO any GPIO

The board includes I²C pull-ups, so no external resistors are needed. INTB is an optional data-ready interrupt; you can leave it unconnected and poll instead.

FDC2214 breakout to Arduino Uno I²C wiring diagram: 3V3 to VCC, GND to GND, A4 to SDA, A5 to SCL

FDC2214 ↔ Arduino Uno I²C connections. With Qwiic, a single cable carries all four lines — no wiring needed.

The onboard LC tank

The board ships with a default LC tank — an 18 µH inductor and a 33 pF capacitor — on every channel (IN0A/IN0B through IN3A/IN3B). All four resonate in a useful range out of the box: connect a sensing electrode to any channel and you can start measuring immediately.

You can change the tank components to retune the sensor for your application — in practice you’ll usually only swap the inductor, since it dominates the resonant frequency and sensitivity. Whatever inductor you fit, pass its value to the library so the capacitance conversion stays accurate (readCapacitancePf(ch, inductance_uH) — see Converting to Capacitance below).

A channel whose tank is removed or damaged will read 0 or report an amplitude error — that is expected.

Installing the Arduino Library

Option 1 — Library Manager (recommended)

  1. In the Arduino IDE, open Tools → Manage Libraries…
  2. Search for ProtoCentral FDC2214.
  3. Install ProtoCentral_FDC2214_Capacitance.

Option 2 — Manual install from GitHub

  1. Download the library as a ZIP from github.com/Protocentral/protocentral_fdc2214_arduino (Code → Download ZIP).
  2. In the Arduino IDE: Sketch → Include Library → Add .ZIP Library… and select the downloaded file.

Either way, the example sketches below appear under File → Examples → ProtoCentral_FDC2214_Capacitance.

Your First Reading — verify the board

Start with 01_DeviceInfo. It scans the I²C bus and reads back the Manufacturer ID (0x5449 = “TI”) and Device ID (0x3055 = FDC2214) — the quickest way to confirm wiring and power before you attach any tanks.

#include <Wire.h>
#include <Protocentral_FDC2214.h>

FDC2214 fdc;   // defaults to I2C address 0x2B (ProtoCentral board)

void setup() {
    Serial.begin(115200);
    Wire.begin();
}

void loop() {
    Serial.println();
    Serial.println(F("FDC2214 Device Info"));

    if (!fdc.begin()) {
        Serial.println(F("FDC2214 not found at 0x2B."));
        Serial.println(F("Check 3.3V power, SDA/SCL wiring, and ADDR pin (VDD=0x2B, GND=0x2A)."));
    } else {
        Serial.print(F("Manufacturer ID: 0x"));
        Serial.println(fdc.getManufacturerID(), HEX);   // expect 0x5449
        Serial.print(F("Device ID:       0x"));
        Serial.println(fdc.getDeviceID(), HEX);          // expect 0x3055
        Serial.println(F("Device responding correctly."));
    }
    delay(2000);
}

Upload it, open the Serial Monitor at 115200 baud, and you should see the FDC2214 reported at 0x2B with both IDs reading back correctly.

Reading All 4 Channels

03_MultiChannelAutoScan enables autoscan across CH0–CH3 and prints each channel’s resonant frequency as a tab-separated row — open the Serial Plotter to watch all four live.

#include <Wire.h>
#include <Protocentral_FDC2214.h>

FDC2214 fdc;

void setup() {
    Serial.begin(115200);
    while (!Serial && millis() < 3000);
    Wire.begin();

    if (!fdc.begin()) {
        Serial.println(F("FDC2214 not found"));
        while (1) delay(1000);
    }

    fdc.configureDefaults();                       // sensible defaults for cap sensing
    fdc.setAutoscan(true, FDC2214_RR_SEQ_ALL);     // round-robin all 4 channels
    fdc.start();

    Serial.println(F("CH0_ftCH1_ftCH2_ftCH3_f   (MHz)"));
}

void loop() {
    for (uint8_t ch = 0; ch < 4; ch++) {
        float mhz = fdc.readFrequencyHz((fdc2214_channel_t)ch) / 1.0e6f;
        Serial.print(mhz, 4);
        Serial.print(ch < 3 ? 't' : 'n');
    }
    delay(100);
}

Channels without a tank attached will read 0 — connect a tank to CH0 first and watch that column respond as you move your electrode.

Converting to Capacitance (picofarads)

04_Capacitance turns a single channel’s frequency into picofarads using the LC resonance equation C = 1 / (L·(2πf)²). You must give the library your tank’s inductance.

#include <Wire.h>
#include <Protocentral_FDC2214.h>

const float TANK_INDUCTANCE_UH = 18.0f;   // 18 uH = board's default tank inductor; change if you swap it

FDC2214 fdc;

void setup() {
    Serial.begin(115200);
    while (!Serial && millis() < 3000);
    Wire.begin();

    if (!fdc.begin()) {
        Serial.println(F("FDC2214 not found"));
        while (1) delay(1000);
    }

    fdc.configureDefaults();
    fdc.setActiveChannel(FDC2214_CH0);
    fdc.setAutoscan(false);                 // single channel
    fdc.start();

    Serial.println(F("Freq (MHz)tC (pF)"));
}

void loop() {
    if (fdc.isDataReady(FDC2214_CH0)) {
        float f_hz = fdc.readFrequencyHz(FDC2214_CH0);
        float c_pf = fdc.readCapacitancePf(FDC2214_CH0, TANK_INDUCTANCE_UH);
        Serial.print(f_hz / 1.0e6f, 6);
        Serial.print('t');
        Serial.println(c_pf, 4);
    }
    delay(100);
}

Application Examples

Live demo: real-time capacitance changes as a hand moves over a copper-foil electrode (proximity / gesture sensing).

The library ships two ready-to-adapt application sketches:

  • 05_ProximitySensing — track a single electrode’s capacitance and trigger on a threshold (touch button / proximity).
  • 06_LiquidLevel — use a channel as a level probe and report fill level.

Both build directly on the patterns above — start from them when prototyping your own sensor.

Visualizing with OpenView

For a live graphical view without writing plotter code, you can stream readings into ProtoCentral OpenView, our cross-platform visualization tool. Print your channel values over serial in the format OpenView expects and watch them plotted in real time — handy for tuning electrode geometry and thresholds.

Troubleshooting

“FDC2214 not found” / nothing on the I²C scan
Check 3.3 V power and GND, confirm SDA/SCL aren’t swapped, and verify the I²C address — the ProtoCentral board ships with ADDR tied HIGH (0x2B). If you’ve strapped ADDR to GND, construct the driver as FDC2214 fdc(FDC2214_I2C_ADDR_0); for 0x2A.

A channel reads 0 or throws an amplitude error
That channel has no working LC tank. Confirm the inductor and capacitor are connected across INxA/INxB, and that solder joints are sound. Amplitude warnings usually mean the tank’s drive level needs adjusting — try fdc.setHighCurrentDrive(true) or a different inductor/cap pairing.

Readings are noisy or drift
Keep electrode leads short and away from moving conductors, give the board a solid ground reference, and let the sensor settle for a second after start(). For very fast sensors, raise the deglitch filter (setDeglitch).

Qwiic device not detected
Make sure the Qwiic cable is fully seated and not reversed, try the second Qwiic port, and confirm your host runs 3.3 V I²C logic.

Resources

Licenses

  • Hardware: CERN-OHL-P v2 (Permissive)
  • Software / Arduino library: MIT