VAIBHAV DUBEY
Published © GPL3+

Interfacing GT511C3 Fingerprint Sensor (FPS) with Nodemcu

First time ever on internet someone discussing about how to configure FPS with Nodemcu....................

BeginnerProtip1 hour35
Interfacing GT511C3 Fingerprint Sensor (FPS) with Nodemcu

Things used in this project

Hardware components

NodeMCU ESP8266 Breakout Board
NodeMCU ESP8266 Breakout Board
×1
GT511C3 FPS
×1

Software apps and online services

Arduino IDE
Arduino IDE

Story

Read more

Code

FINGERPRINT CHECKING

C/C++
ITS A CODE FOR CHECKING WHETHER THE FINGERPRINT IS SAVED OR NOT
/*****************************************************************
	ALL_Fingerprints_Scanner.ino - NodeMCU ESP8266
	Scans ALL enrolled IDs (0-199) at once
*****************************************************************/

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

FPS_GT511C3 fps(D7, D8);  // RX=D7, TX=D8

void setup()
{
  Serial.begin(115200);
  delay(1000);
  fps.Open();
  fps.SetLED(true);
  
  Serial.println("=== ALL FINGERPRINTS ACCESS ===");
  Serial.println("Place ANY enrolled finger...");
  Serial.println("Supports ID #0, #1, #2...");
}

void loop()
{
  if (fps.IsPressFinger())
  {
    Serial.println("\n🔍 Scanning ALL fingerprints...");
    
    bool captured = fps.CaptureFinger(false);
    if (captured)
    {
      // SEARCH ALL 200 IDs AT ONCE
      int matchedID = fps.Identify1_N();
      
      if (matchedID >= 0 && matchedID <= 199)
      {
        Serial.print("✅ ACCESS GRANTED! ");
        Serial.print("ID #"); Serial.print(matchedID);
        Serial.println(" MATCHED!");
        
        // Your actions here:
        // digitalWrite(RELAY, HIGH);  // Unlock door
        // sendWiFiAlert(matchedID);   // IoT notification
      }
      else if (matchedID == -6)
      {
        Serial.println("❌ NO FINGERPRINT MATCHED");
      }
      else
      {
        Serial.print("❌ Scanner Error: "); Serial.println(matchedID);
      }
    }
    else
    {
      Serial.println("❌ Fingerprint too messy");
    }
    
    Serial.println("--- Ready for next scan ---");
    delay(3000);  // 3 second cooldown
  }
  delay(50);
}

FINGERPRINT ADDING

C/C++
ITS CODE FOR ADDING YOUR FINGERPRINT
/*****************************************************************
	FPS_Enroll.ino - NodeMCU ESP8266 Version
	Original by Josh Hawley, adapted for NodeMCU
	
	NodeMCU Pin Changes:
	- FPS(TX) → D7 (GPIO13 = Software RX)
	- FPS(RX) → D8 (GPIO15 = Software TX)
	- Serial baud: 115200 (faster)
*****************************************************************/

#include "FPS_GT511C3.h"
#include "SoftwareSerial.h"

// NodeMCU pins: RX=D7, TX=D8
FPS_GT511C3 fps(D7, D8);  // (NodeMCU SS_RX=D7, SS_TX=D8)

void setup()
{
  Serial.begin(115200);    // Faster for NodeMCU
  delay(1000);             // Extra delay for ESP boot
  fps.Open();              // Initialize FPS
  fps.SetLED(true);        // Turn on LED
  
  Serial.println("=== GT-511C3 NODEMCU ENROLL ===");
  Enroll();                // Start enrolling
}

void Enroll()
{
  // Find open enroll ID
  int enrollid = 0;
  bool usedid = true;
  while (usedid == true)
  {
    usedid = fps.CheckEnrolled(enrollid);
    if (usedid==true) enrollid++;
  }
  fps.EnrollStart(enrollid);

  // 1st scan
  Serial.print("Press finger to Enroll #");
  Serial.println(enrollid);
  while(fps.IsPressFinger() == false) delay(100);
  bool bret = fps.CaptureFinger(true);
  int iret = 0;
  
  if (bret != false)
  {
    Serial.println("Remove finger");
    fps.Enroll1(); 
    while(fps.IsPressFinger() == true) delay(100);
    
    // 2nd scan
    Serial.println("Press same finger again");
    while(fps.IsPressFinger() == false) delay(100);
    bret = fps.CaptureFinger(true);
    if (bret != false)
    {
      Serial.println("Remove finger");
      fps.Enroll2();
      while(fps.IsPressFinger() == true) delay(100);
      
      // 3rd scan
      Serial.println("Press same finger yet again");
      while(fps.IsPressFinger() == false) delay(100);
      bret = fps.CaptureFinger(true);
      if (bret != false)
      {
        Serial.println("Remove finger");
        iret = fps.Enroll3();
        if (iret == 0)
        {
          Serial.println("✅ ENROLLING SUCCESSFUL!");
          Serial.print("Fingerprint ID #"); Serial.print(enrollid); Serial.println(" saved!");
        }
        else
        {
          Serial.print("❌ Enrolling Failed: ");
          Serial.println(iret);
        }
      }
      else Serial.println("❌ Failed third finger");
    }
    else Serial.println("❌ Failed second finger");
  }
  else Serial.println("❌ Failed first finger");
}

void loop()
{
  delay(100000);
}

Credits

VAIBHAV DUBEY
10 projects • 6 followers
Aspiring hardware engineer focused on embedded systems, high‑reliability circuit design, and PCB layout for IoT and robotics projects.

Comments