Andrey Ovcharov

Professional Software Engineer and hobbyist Hardware enthusiast

Andrey Ovcharov

How to use FPC1020A Capacitive Fingerprint Identification Module with Arduino

About one year ago I have purchased a widely available fingerprint identification module with UART interface. You can find this module almost everywhere for quite a decent price. However, the information about how to use it with Arduino is not that easy to find. I am interested to use it with the URU Card device so I took some time to play with it.

The module looks like on the picture below and it’s price ranges from 6 to 15 euro in most online shops. The description usually is the same everywhere and contains only basic information on module capabilities.

FPC1020A Capacitive Fingerprint Identification Module
FPC1020A Capacitive Fingerprint Identification Module

The sellers reference the module as “FPC1020A Capacitive Fingerprint Identification Module”, but the module itself has only the code ZW-5323-10.4-V2 and the number 20171111, probably the version date.

I guess the scanner used in the module is one of Fingerprints family and it explains the name used by sellers. The name can be very misleading as the module carries STM32 microcontroller on the board and performs fingerprint recognition internally opposing to the bare metal scanners I tested and described before.

Dimensions of the module are 30x18mm. Without the connector, the thickness of about 3 mm which makes the device a good candidate to use with the URU Card project.

You can purchase the module using this link.

Connection diagram

Again, most of the sellers provide only the pictures of the module itself and it’s not that easy to find pinout and connection diagram. Some search helped me to find one.

Pinout of the FPC1020A module
Pinout of the FPC1020A module

Pins are functioning as follows, bottom to top:

  • GND - power ground
  • RX and TX - UART interface
  • V - module power, 3.3V
  • T - touch detection signal
  • VT - touch detection power, 3.3V

As far as I understand touch detector can be powered separately and has very little consumption so can be used as a power button for the whole device. But it’s only my guess and I did not test it. In cases where touch detection is not needed, like testing, the two wires T and VT can be left unconnected.

FPC1020A module connected to the ESP32 DEVKIT
FPC1020A module connected to the ESP32 DEVKIT

I have tested the device with the ESP32 DEVKITV1 board, the same I used for the URU Card.

Programming the module

At the moment of writing, I do not have the document describing the commands of the module. The only reference I have is the library for the Arduino Framework.

The library allows managing 150 fingerprints stored in the module. To enrol a new fingerprint you have three attempts only. The matching is relatively stable and allows to place fingerprint from any angle.

Using the module is fairly simple

#include <Arduino.h>

#include "fpc1020a.h"

HardwareSerial hwSerial(2);
FPC1020 fp(&hwSerial);

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

Enrollment is done by the commands

unsigned int user_id = 1; // User ID is in range 0..149
unsigned char rtf = fp.Enroll(user_id);

if (rtf == TRUE)
{
	Serial.print("Success, your User ID is: ");
	Serial.println(user_id, DEC);
}

Matching of the user is simple as well

extern unsigned char l_ucFPID;

if (fp.Search())
{
	Serial.print("Success, your User ID is: ");
	Serial.println(l_ucFPID, DEC);
}

Other commands allow delete selected fingerprints or clear the whole database.

Unfortunately, I could not find the commands to retrieve the raw fingerprint image to analyze it outside of the module.

Conclusion

The module is a very cheap option to add simple biometric security to Arduino projects. It has a small size and a simple programming interface. Fingerprint recognition works well but I did not make extensive testing for false positives. Anyway, for simple Arduino projects, it should be okay.

References