Proyecto Control de Acceso en Tiempo Real con ESP8266 y Firebase

El desarrollo de sistemas de control de acceso que garanticen seguridad y comodidad es fundamental en la actualidad. Aprende a construir un sistema de control de acceso en tiempo real utilizando la placa ESP8266 o Arduino, junto con Firebase como base de datos en tiempo real. Este sistema emplea la tecnología de Identificación por Radiofrecuencia (RFID), lo que permite gestionar accesos sin necesidad de tocar chapas o puertas, ideal para evitar el contacto directo y promover la higiene.



¿Qué es el Control de Acceso RFID con ESP8266? El sistema de control de acceso RFID (Identificación por Radiofrecuencia) con ESP8266 o NodeMCU es una solución IoT que permite la autenticación sin contacto. Utilizando el módulo RFID-RC522, es posible leer tarjetas o llaveros RFID que actúan como claves de acceso. El ESP8266, conectado a una base de datos en tiempo real de Firebase, puede activar o desactivar un relé que controle un electroimán, un pasador electromagnético, o incluso una carga eléctrica como un bombillo. Ventajas de Implementar un Sistema de Acceso RFID
  • Sin contacto: Ideal para evitar la propagación de gérmenes y asegurar mayor higiene.
  • Acceso en tiempo real: La conexión con Firebase permite actualizaciones instantáneas y control remoto.
  • Versatilidad: Puede utilizarse en aplicaciones residenciales, oficinas, almacenes y más.
  • Fácil de escalar: Firebase facilita la gestión de múltiples usuarios y registros.
Materiales Necesarios
  • ESP8266 (NodeMCU) o Arduino
  • Módulo RFID-RC522
  • Tarjetas o llaveros RFID
  • Relé de 5V
  • Electroimán o cerradura eléctrica
  • Protoboard y cables de conexión
  • Cuenta en Firebase
  • Editor de código (Arduino IDE)




CÓDIGO ESP8266 RFID Y FIREBASE

/*
PINOUT:
RC522 MODULE    Uno/Nano     MEGA     ESP8266
SDA             D10          D9       D8
SCK             D13          D52      D5
MOSI            D11          D51      D7
MISO            D12          D50      D6
IRQ             N/A          N/A      N/A
GND             GND          GND      GND
RST             A0           D8       D1
3.3V            3.3V         3.3V     3.3V
*/

#include "FirebaseESP8266.h"
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <RFID.h>

// database and Wifi connection
#define FIREBASE_HOST "your-host"
#define FIREBASE_AUTH "your-key"
#define WIFI_SSID "your-wifi"
#define WIFI_PASSWORD "your-pass-wifi"

//Define FirebaseESP8266 data object
FirebaseData firebaseData;
FirebaseJson json;
void printResult(FirebaseData &data);
String path = "/usersTest";

#define SDA_DIO 15
#define RESET_DIO 5

RFID RC522(SDA_DIO, RESET_DIO);

int LedRojo=0;
int LedVerde=4;
int Rele=16;
byte pos= 0;
int readData;

void setup()
  Serial.begin(9600);

  // connect to wifi and firebase.
   WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("Connecting to Wi-Fi");
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(300);
  }
  Serial.println();
  Serial.print("Connected with IP: ");
  Serial.println(WiFi.localIP());
  Serial.println();

  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  Firebase.reconnectWiFi(true);
  Firebase.enableClassicRequest(firebaseData, true);


  /* Enable the SPI interface */
  SPI.begin(); 
  /* Initialise the RFID reader */
  RC522.init();

  pinMode(LedRojo, OUTPUT);  //Inicializacion de pines
  pinMode(LedVerde, OUTPUT);
  pinMode(Rele, OUTPUT);
  digitalWrite(LedRojo, LOW);
  digitalWrite(LedVerde, LOW);
  digitalWrite(Rele, LOW);

}

void loop()
{
  if (RC522.isCard()) /* Card Exist? */
  {
    RC522.readCardSerial();   /* Get serial number Card*/

    Serial.println();
    Serial.println("---RC522.serNum----");
    //imprimir codigo de tarjeta
    for(int i=0;i<5;i++)
    {
      Serial.println(RC522.serNum[i],DEC);
      //Serial.println(RC522.serNum[i],HEX); //Card in Hexadecimal
    }
    Serial.println("-------");
    Serial.println();
    
    //----------------------------------------------
     if(checkAuthorization(RC522.serNum))
    { 
      Serial.println("Acceso: Autorizado");
      digitalWrite(LedRojo, LOW);
      digitalWrite(LedVerde, HIGH);
      digitalWrite(Rele, HIGH);
      delay(2000);
      digitalWrite(LedRojo, LOW);
      digitalWrite(LedVerde, LOW);
      digitalWrite(Rele, LOW);
    }
    else
    {
      Serial.println("Acceso: Denegado");
      digitalWrite(LedRojo, HIGH);
      digitalWrite(LedVerde, LOW);
      digitalWrite(Rele, LOW);
      delay(2000);
      digitalWrite(LedRojo, LOW);
      digitalWrite(LedVerde, LOW);
      digitalWrite(Rele, LOW);
          
    }
    Serial.println();
    Serial.println();
    
  }

  delay(10);
}


bool checkAuthorization(byte* data) //Verify Access
{
  //Serial.println();
  //Serial.println("---data READ----");
  //Serial.println();

    for(int i=0;i<5;i++)
    {
      Firebase.getInt(firebaseData, path + "/key"+i);
      //Serial.println(firebaseData.intData());
      if (firebaseData.intData() != data[i]) return false;
      delay(10);
    }
    return true;
    
  /*Serial.println("----JSON---");
  Serial.println();

  if (Firebase.getJSON(firebaseData, "/"))
    {
      //Success, then try to read the JSON payload value
      Serial.println(firebaseData.jsonString());
      
    }
    else
    {
      //Failed to get JSON data at defined database path, print out the error reason
      Serial.println(firebaseData.errorReason());
    }
  
  Serial.println("-------");
  Serial.println();
  */
}


Configuración del Proyecto

1. Conexión de Hardware

Conecta el módulo RFID-RC522 al ESP8266:

  • Pin SDA al D2 (GPIO4)
  • Pin SCK al D5 (GPIO14)
  • Pin MOSI al D7 (GPIO13)
  • Pin MISO al D6 (GPIO12)
  • Pin IRQ sin conexión
  • Pin GND a tierra y VCC a 3.3V
  • Conecta el relé al ESP8266 y al electroimán:
  • Pin de señal del relé a un GPIO (por ejemplo, GPIO5)
  • VCC y GND del relé a la alimentación

2. Configuración de Firebase

Crea un proyecto en Firebase Console.

Activa la base de datos en tiempo real y configura las reglas para permitir la lectura y escritura.

Obtén la URL del proyecto y la clave de autenticación.

3. Programación del ESP8266

Escribe el código para conectar el ESP8266 a WiFi, leer los datos del RFID y comunicarse con Firebase. Instala las librerías necesarias como Firebase ESP8266 y MFRC522 en el Arduino IDE.

Ejemplo de código:

#include <ESP8266WiFi.h>
#include <FirebaseESP8266.h>
#include <MFRC522.h>

#define WIFI_SSID "TuRedWiFi"
#define WIFI_PASSWORD "TuContraseñaWiFi"
#define FIREBASE_HOST "TuProyecto.firebaseio.com"
#define FIREBASE_AUTH "TuClaveFirebase"

#define RST_PIN D1
#define SS_PIN D2
MFRC522 mfrc522(SS_PIN, RST_PIN);

FirebaseData firebaseData;

void setup() {
  Serial.begin(115200);
  SPI.begin();
  mfrc522.PCD_Init();
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Conectando a WiFi...");
  }
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}

void loop() {
  if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
    String uid = "";
    for (byte i = 0; i < mfrc522.uid.size; i++) {
      uid.concat(String(mfrc522.uid.uidByte[i], HEX));
    }
    Serial.println("UID leído: " + uid);
    Firebase.setString(firebaseData, "/access", uid);

    // Lógica para activar relé si UID es válido
    delay(2000);
  }
}

Personalización y Mejoras
  • Interfaz web: Integra una página web sencilla para gestionar los accesos y usuarios autorizados.
  • Notificaciones en tiempo real: Configura alertas por correo electrónico o SMS al detectar un acceso.
  • Seguridad: Implementa reglas de Firebase para proteger los datos.
Aplicaciones Prácticas
  • Control de acceso en hogares: Agrega una capa de seguridad al hogar.
  • Empresas y oficinas: Gestiona quién entra y sale en tiempo real.
  • Almacenes y bodegas: Controla el acceso para proteger inventarios.
El control de acceso RFID con ESP8266 y Firebase es una solución práctica y moderna que combina la potencia de la IoT con la seguridad y la innovación. Con una correcta implementación, este proyecto puede marcar la diferencia en la forma de gestionar accesos, mejorando la eficiencia y seguridad en múltiples ámbitos.


Como siempre, espero que estos videos e información les sea muy útil, no olvides suscribirte a mi canal en YouTube. Saludos 😎

Alex7 Tutoriales

Tutoriales que en algún momento te pueden ser útiles.... Suscribete!

Publicar un comentario

Artículo Anterior Artículo Siguiente