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 LibrarySupported boards
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);
}