ESP8266 Wi-Fi Controlled Biometric Attendance System with OLED Display
View and Edit Project In Cirkit Designer
Circuit Documentation
Summary
This document provides a detailed overview of a circuit designed using an ESP8266 NodeMCU microcontroller, an AS608 fingerprint sensor, a 0.96" OLED display, a 18650 battery in a holder, a rocker switch, and a 2.1mm barrel jack with a terminal block. The circuit is designed to capture and process fingerprint data, display information on an OLED screen, and communicate over WiFi.
Component List
ESP8266 NodeMCU
- Description: A low-cost WiFi microcontroller with GPIO, ADC, and PWM capabilities.
- Pins: D0, D1, D2, D3, D4, 3V3, GND, D5, D6, D7, D8, RX, TX, A0, RSV, SD3, SD2, SD1, CMD, SD0, CLK, EN, RST, VIN
AS608 Fingerprint Sensor
- Description: A fingerprint sensor module used for capturing and processing fingerprint data.
- Pins: VCC, TX, GND, RX
0.96" OLED Display
- Description: A small OLED display module used for displaying information.
- Pins: GND, VDD, SCK, SDA
18650 Battery in Holder
- Description: A battery holder for a 18650 lithium-ion battery.
- Pins: GND, VCC
Rocker Switch
- Description: A simple on/off switch.
- Pins: 1, 2
2.1mm Barrel Jack with Terminal Block
- Description: A barrel jack connector for power input.
- Pins: POS, NEG
Wiring Details
ESP8266 NodeMCU
- D1: Connected to SCK of the 0.96" OLED Display
- D2: Connected to SDA of the 0.96" OLED Display
- D3: Connected to TX of the AS608 Fingerprint Sensor
- D4: Connected to RX of the AS608 Fingerprint Sensor
- 3V3: Connected to VDD of the 0.96" OLED Display and VCC of the AS608 Fingerprint Sensor
- GND: Connected to GND of the 0.96" OLED Display, GND of the AS608 Fingerprint Sensor, and GND of the 18650 Battery in Holder
- VIN: Connected to VCC of the 18650 Battery in Holder
AS608 Fingerprint Sensor
- TX: Connected to D3 of the ESP8266 NodeMCU
- RX: Connected to D4 of the ESP8266 NodeMCU
- VCC: Connected to 3V3 of the ESP8266 NodeMCU
- GND: Connected to GND of the ESP8266 NodeMCU
0.96" OLED Display
- SCK: Connected to D1 of the ESP8266 NodeMCU
- SDA: Connected to D2 of the ESP8266 NodeMCU
- VDD: Connected to 3V3 of the ESP8266 NodeMCU
- GND: Connected to GND of the ESP8266 NodeMCU
18650 Battery in Holder
- GND: Connected to GND of the ESP8266 NodeMCU
- VCC: Connected to VIN of the ESP8266 NodeMCU
Rocker Switch
- 1: Not connected in the provided net list
- 2: Not connected in the provided net list
2.1mm Barrel Jack with Terminal Block
- POS: Not connected in the provided net list
- NEG: Not connected in the provided net list
Code Documentation
Overview
The provided code is written for the ESP8266 NodeMCU microcontroller. It includes libraries for handling WiFi, HTTP requests, OLED display, and fingerprint sensor functionalities. The code initializes the components, connects to a WiFi network, and processes fingerprint data to display information on the OLED screen and send data to a server.
Code Breakdown
Libraries
#include <SPI.h>
#include <Wire.h>
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <SoftwareSerial.h>
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Fingerprint.h>
Definitions and Initializations
#define Finger_Rx 0 //D3
#define Finger_Tx 2 //D4
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 0
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
SoftwareSerial mySerial(Finger_Rx, Finger_Tx);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
const char *ssid = "JustDoElectronics";
const char *password = "prateek";
String postData;
String link = "http://192.168.0.108/biometricattendance/getdata.php";
int FingerID = 0;
uint8_t id;
WiFi Connection
void connectToWiFi() {
WiFi.mode(WIFI_OFF);
delay(1000);
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(F("Connecting to \n"));
display.setCursor(0, 50);
display.setTextSize(2);
display.print(ssid);
display.drawBitmap(73, 10, Wifi_start_bits, Wifi_start_width, Wifi_start_height, WHITE);
display.display();
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Connected");
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(8, 0);
display.print(F("Connected \n"));
display.drawBitmap(33, 15, Wifi_connected_bits, Wifi_connected_width, Wifi_connected_height, WHITE);
display.display();
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
Setup Function
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
connectToWiFi();
finger.begin(57600);
Serial.println("\n\nAdafruit finger detect test");
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
display.clearDisplay();
display.drawBitmap(34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE);
display.display();
} else {
Serial.println("Did not find fingerprint sensor :(");
display.clearDisplay();
display.drawBitmap(32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height, WHITE);
display.display();
while (1) { delay(1); }
}
finger.getTemplateCount();
Serial.print("Sensor contains ");
Serial.print(finger.templateCount);
Serial.println(" templates");
Serial.println("Waiting for valid finger...");
}
Main Loop
void loop() {
if (WiFi.status() != WL_CONNECTED) {
connectToWiFi();
}
FingerID = getFingerprintID();
delay(50);
DisplayFingerprintID();
ChecktoAddID();
ChecktoDeleteID();
}
Display Fingerprint ID
void DisplayFingerprintID() {
if (FingerID > 0) {
display.clearDisplay();
display.drawBitmap(34, 0, FinPr_valid_bits, FinPr_valid_width, FinPr_valid_height, WHITE);
display.display();
SendFingerprintID(FingerID);
} else if (FingerID == 0) {
display.clearDisplay();
display.drawBitmap(32, 0, FinPr_start_bits, FinPr_start_width, FinPr_start_height, WHITE);
display.display();
} else if (FingerID == -1) {
display.clearDisplay();
display.drawBitmap(34, 0, FinPr_invalid_bits, FinPr_invalid_width, FinPr_invalid_height, WHITE);
display.display();
} else if (FingerID == -2) {
display.clearDisplay();
display.drawBitmap(32, 0, FinPr_failed_bits, FinPr_failed_width, FinPr_failed_height, WHITE);
display.display();