Skip to content
SensorBSDv2.1.4

Adafruit Fingerprint Sensor Library

by Adafruit (Limor Fried / Ladyada)

Wraps the 0xEF01-header UART packet protocol shared by Adafruit's own fingerprint sensor and its common clones — GROW's R307, the AS608, and the FPM10A — into simple calls like getImage(), image2Tz(), fingerFastSearch(), and storeModel(). All the packet framing, checksums, and confirmation-code handling from the module's binary protocol happen inside the library, so application code just checks return constants like FINGERPRINT_OK or FINGERPRINT_NOFINGER. Written by Limor Fried/Ladyada for Adafruit Industries.

Installation

Arduino IDE — Library Manager

Sketch → Include Library → Manage Libraries → search Adafruit Fingerprint Sensor Library

PlatformIO

lib_deps = adafruit/Adafruit Fingerprint Sensor Library

Supported boards

arduino unoesp32stm32 blue-pill

Examples

Enroll a new fingerprint

Captures a finger twice, builds a template from both scans, and stores it in the module's flash under a chosen ID (1-127 on most R30x-family modules).

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger(&mySerial);

void setup() {
  Serial.begin(9600);
  mySerial.begin(57600);
  finger.verifyPassword();
  Serial.println("Enter an ID # (1-127) to enroll:");
}

void loop() {
  if (!Serial.available()) return;
  uint8_t id = (uint8_t)Serial.parseInt();
  if (id == 0) return;

  Serial.print("Place finger for ID #"); Serial.println(id);
  int p = -1;
  while (p != FINGERPRINT_OK) p = finger.getImage();
  finger.image2Tz(1);

  Serial.println("Remove finger");
  delay(2000);
  p = 0;
  while (p != FINGERPRINT_NOFINGER) p = finger.getImage();

  Serial.println("Place same finger again");
  p = -1;
  while (p != FINGERPRINT_OK) p = finger.getImage();
  finger.image2Tz(2);

  if (finger.createModel() == FINGERPRINT_OK && finger.storeModel(id) == FINGERPRINT_OK) {
    Serial.println("Stored!");
  } else {
    Serial.println("Enrollment failed — try again");
  }
}

Search for a fingerprint match

Captures a finger and searches the whole onboard library for a match, returning the stored ID and a confidence score on success.

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger(&mySerial);

void setup() {
  Serial.begin(9600);
  mySerial.begin(57600);
  finger.verifyPassword();
}

void loop() {
  if (finger.getImage() != FINGERPRINT_OK) return;
  if (finger.image2Tz() != FINGERPRINT_OK) return;

  if (finger.fingerFastSearch() == FINGERPRINT_OK) {
    Serial.print("Match! ID #"); Serial.print(finger.fingerID);
    Serial.print(", confidence "); Serial.println(finger.confidence);
  } else {
    Serial.println("No match found");
  }
  delay(1000);
}