Time Clock With Fingerprint IoT Module, Uploading Data to Thingspeak

by CarlosVoltT in Circuits > Microcontrollers

56 Views, 0 Favorites, 0 Comments

Time Clock With Fingerprint IoT Module, Uploading Data to Thingspeak

portada1-820x461.png

In this tutorial we will see how to create a personal control reader/clock with esp32, a fingerprint reader sensor.

In this tutorial we will see how to create a personal control reader/clock with esp32, a fingerprint reader sensor. All the data will be uploaded to the cloud, through the services of thingspeak.com. The assembly of the electronic circuit, the detailed explanation of the source code and finally, the device will be tested will be included.

Electronic components

An Esp32

Features of the ESP32-T module


Connectivity

The ESP32 module has all the WiFi variants :

  • 802.11 b/g/n/e/i/n
  • Wi-Fi Direct (P2P), P2P Discovery, P2P Group Owner mode and P2P Power Management

This new version includes connectivity via low-consumption Bluetooth

  • Bluetooth v4.2 BR/EDR and BLE
  • BLE Beacon

In addition, it can communicate using SPI, I2C, UART, MAC Ethernet, Host SD protocols

Microcontroller Features

The CPU is made up of a Tensilica LX6 model SoC with the following features and memory

  • Dual core 32-bit with 160MHz speed
  • 448 kBytes ROM memory
  • 520kBytes SRAM memory

48 Pin Dispne

  • 18 12-bit ADCs
  • 2 8-bit DACs
  • 10 pin contact sensors
  • 16 PWM
  • 20 Digital inputs/outputs

Food and consumption patterns

For the correct operation of the ESP32, it is necessary to supply a voltage between 2.8V and 3.6V. The energy it consumes depends on the operating mode. It contains a mode, the Ultra Low Power Solution (ULP) , in which basic tasks (ADC, RTC...) continue to be performed in Sleep mode.

Open Smart fingerprint module

Download Manual –> R308-fingerprint-module-user-manual_English

Buzzer

Female pins


Male pins


PCB


Download gerber file –> Esp32_fingerprint_PCB


Source Code

// Importar bibliotecas necesarias

#include <WiFi.h>

#include <HTTPClient.h>

#include <Adafruit_Fingerprint.h>

Adafruit_Fingerprint finger = Adafruit_Fingerprint(&Serial2);

uint8_t id;

int pin27 = 27;

const int led = 2;//Led onboard del esp32

String numID;

int codigo;

// Establezca su nombre y contraseña de wifi

const char* ssid = "Tu_red_wifi";

const char* password = "Tu_clave_wifi";

// La URL de tu canal de thingspeak con el número de api_key

String nombreServidor = "https://api.thingspeak.com/update?api_key=Tu_Api_Key";

void setup()

{

while (!Serial); // Para Yun/Leo/Micro/Zero/...

Serial.begin(9600);//Velocidad del puerto serie arduino

pinMode(pin27, OUTPUT);//Buzzer

pinMode(led, OUTPUT);//Led onboard del esp32

WiFi.begin(ssid, password); // Intenta conectarte a wifi con nuestra contraseña

Serial.println("Conectando"); // Imprime nuestro estado en el monitor de serie

// Espera a que se conecte el wifi

while(WiFi.status() != WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println("");

Serial.print("Conectado a la red WiFi con la dirección IP: ");

Serial.println(WiFi.localIP());

//Dos bip indican que se conectó el dispositivo a la red wifi

bip(100);

delay(400);

bip(100);

Serial.println("Inicio detección del módulo fingerprint");

// Velocidad de transmisión de datos entre el arduino y el módulo fingerprint

finger.begin(57600);



if (finger.verifyPassword()) {

Serial.println("¡Sensor de huellas dactilares conectado ok!");

} else {

Serial.println("Revisa la conexión del sensor de huellas :(");

while (1);

}

Serial.println("Esperando una huella válida...");

}

void loop()

{

datosFingerprint();

delay(50); //Pequeño delay

}

// Devuelve -1 si falla, de lo contrario devuelve ID #

int datosFingerprint() {

uint8_t p = finger.getImage();

if (p != FINGERPRINT_OK) return -1;

p = finger.image2Tz();

if (p != FINGERPRINT_OK) return -1;

p = finger.fingerFastSearch();

if (p != FINGERPRINT_OK) return -1;

//Encontrado una coincidencia!

Serial.print("Huella ID #"); Serial.print(finger.fingerID);

Serial.print(" con una confianza de "); Serial.println(finger.confidence);

//Activar el buzzer durante 100 mili segundos

bip(100);

delay(100);

numID = String(finger.fingerID); //Convierte el id en cadena para ser compatible con el display

Serial.print("Huella Correcta # ");

Serial.println(numID);

digitalWrite(led, HIGH);

////---------------------

if(WiFi.status()== WL_CONNECTED){ // Comprueba que la wifi todavía esté conectada

HTTPClient http; // Inicializar nuestro cliente HTTP

String url = nombreServidor + "&field1=" + numID ; // Definir nuestra URL completa

http.begin(url.c_str()); // Inicializa nuestra solicitud HTTP

int codigoRespuestaHTTP = http.GET(); // Enviar solicitud HTTP

if (codigoRespuestaHTTP > 0){ // Verifica que haya código de estado HTTP correcto

Serial.print("Codigo de respuesta HTTP: ");

Serial.println(codigoRespuestaHTTP);

codigo = codigoRespuestaHTTP;

}else{

Serial.print("Codigo de error: ");

Serial.println(codigoRespuestaHTTP);

//Reintentamos una vez más por si hubo un error en la comunicación

http.begin(url.c_str()); // Inicializa nuestra solicitud HTTP

int codigoRespuestaHTTP = http.GET(); // Enviar solicitud HTTP

if (codigoRespuestaHTTP > 0){ // Verifica que haya código de estado HTTP correcto

Serial.print("Codigo de respuesta HTTP: ");

Serial.println(codigoRespuestaHTTP);

}

}

http.end();

}

else {

Serial.println("WiFi desconectado");

}

numID="";

delay(10000);

//Bip largo sibió datos a thingspeak

if(codigo == 200){

digitalWrite(led, LOW);

bip(750);

}

//Tres bip hubo un problema al subir los datos a thingpeag

if(codigo != 200){

bip(150);

delay(150);

digitalWrite(led, LOW);

bip(150);

delay(150);

digitalWrite(led, HIGH);

bip(150);

delay(150);

digitalWrite(led, LOW);

}

}

//Sonido del buzzer

void bip(int demora){

digitalWrite(pin27, HIGH);

delay(demora);

digitalWrite(pin27, LOW);

}