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
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);
}