Preview:
#include <Adafruit_Fingerprint.h>
#include <WiFi.h>
#include <HTTPClient.h>

// Replace with your fingerprint sensor's serial port
SoftwareSerial mySerial(3, 1);

// Create an instance of the Adafruit Fingerprint library
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);

// Enter the ID of the fingerprint you want to enroll
int fingerID = 1;

// Enter the URL of the online web system
const char* serverName = "https://example.com/verify";

// Enter the ID of the voter
int voterID = 1;

// Enter the vote ID
int voteID = 1;

// Enter your WiFi credentials
const char* ssid = "your_SSID";
const char* password = "your_PASSWORD";

void setup() {
  // Start the serial communication
  Serial.begin(9600);

  // Set the data rate for the fingerprint sensor serial port
  finger.begin(57600);

  // Check if the fingerprint sensor is found
  if (finger.verifyPassword()) {
    Serial.println("Found fingerprint sensor!");
  } else {
    Serial.println("Did not find fingerprint sensor :(");
    while (1) {
      delay(1);
    }
  }

  // Enroll a new fingerprint
  enrollFingerprint(fingerID);

  // Connect to WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");

  // Find a fingerprint match
  if (findFingerprintMatch()) {
    // Send the fingerprint template to the online web system for verification
    if (verifyFingerprint()) {
      // Record the vote securely
      recordVote();

      // Send a confirmation to the online web system
      sendConfirmation();
    } else {
      // Display an error message
      Serial.println("Verification failed.");
    }
  }
}

void loop() {
  // Put your code here
}

void enrollFingerprint(int id) {
  // Wait for the user to place their finger on the sensor
  Serial.println("Please place your finger on the sensor...");
  finger.getImage();
  delay(100);

  // Convert the image to a template
  Serial.println("Converting image...");
  finger.image2tz(1);
  delay(100);

  // Save the template to the specified ID
  Serial.println("Saving template...");
  finger.storeModel(id);
  delay(100);

  // Print a success message
  Serial.println("Template saved!");
}

bool findFingerprintMatch() {
  // Wait for the user to place their finger on the sensor
  Serial.println("Please place your finger on the sensor...");
  finger.getImage();
  delay(100);

  // Convert the image to a template
  Serial.println("Converting image...");
  finger.image2tz(1);
  delay(100);

  // Search for a match
  Serial.println("Searching for a match...");
  finger.searchModels();
  delay(100);

  // Print the match result
  if (finger.fingerID == fingerID) {
    Serial.println("Match found!");
    return true;
  } else {
    Serial.println("No match found.");
    return false;
  }
}

bool verifyFingerprint() {
  // Send the fingerprint template to the online web system for verification
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;

    // Prepare the HTTP request
    http.begin(serverName);
    http.addHeader("Content-Type", "application/json");

    // Convert the fingerprint template to a JSON string
    String json = "{\"fingerprint\":";
    finger.getModel(json);
    json += "}";

    // Send the HTTP request
    int httpResponseCode = http.POST(json);

    // Check the HTTP response code
    if (httpResponseCode == 200) {
      // Parse the verification result from the response
      String response = http.getString();
      if (response == "true") {
        Serial.println("Verification successful.");
        return true;
      } else {
        Serial.println("Verification failed.");
        return false;
      }
    } else {
      Serial.print("Error on sending POST: ");
      Serial.println(httpResponseCode);
      return false;
    }

    http.end();
  } else {
    Serial.println("WiFi not connected.");
    return false;
  }
}

void recordVote() {
  // Record the vote securely
  // You can use a secure database or a blockchain to record the vote
  Serial.println("Vote recorded.");
}

void sendConfirmation() {
  // Send a confirmation to the online web system
downloadDownload PNG downloadDownload JPEG downloadDownload SVG

Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!

Click to optimize width for Twitter