Lector RFID con LCD para implementar tarjeta de débito y guardar saldo o dinero

Monedero electrónico con PHP y RFID

En este post te mostraré cómo implementar un pequeño monedero electrónico, tarjetas de saldo o tarjetas de débito usando PHP y etiquetas RFID.

Como bien sabes, las etiquetas RFID están presentes en varios componentes, entre ellos una tarjeta. Así que podemos usar esa tarjeta para guardar el saldo de un usuario.

Lo que te mostraré será cómo guardar y leer el dinero / saldo en las tarjetas, mostrarlo en una LCD para que el usuario lo pueda ver, y además implementar la parte del servidor con PHP para poder recargar y comprar cosas.

Básicamente será un monedero electrónico o una tarjeta con la que el usuario podrá comprar y recargar. A partir de aquí puedes mejorar el código para adaptarlo a tus necesidades.

Lector RFID

Lo que yo usaré es la tarjeta NodeMCU ESP8266, el lector MFRC522 RFID-RC522 y una LCD de 16 x 2 usando un módulo I2C. La comunicación con el servidor la haremos a través del WiFi que ya viene integrado en la ESP8266.

El circuito de conexión queda como se ve a continuación. Obviamente tú puedes reemplazar componentes, mejorar conexiones u optimizar el modelo si es que sabes lo que haces.

Circuito para monedero electrónico RFID y ESP8266
Circuito para monedero electrónico RFID y ESP8266

En mi caso lo he montado así:

Lector RFID con LCD para implementar tarjeta de débito y guardar saldo o dinero
Lector RFID con LCD para implementar tarjeta de débito y guardar saldo o dinero

Lecturas recomendadas

Aquí voy a saltarme algunos pasos básicos, así que te recomiendo ir a los posts que citaré a continuación en caso de que tengas dudas adicionales o quieras aprender a fondo. También me voy a saltar lo de las librerías, pues eso ya está en sus respectivos posts.

Yo usaré Visual Studio Code para programar la tarjeta. Vamos a hacer peticiones HTTP a PHP, además de leer y escribir datos en las tarjetas RFID. También vamos a imprimir en la LCD, para lo cual necesitamos conocer la dirección I2C.

Explicación de la arquitectura

LCD preparada para leer RFID
LCD preparada para leer RFID

Tan pronto se lea una tarjeta, vamos a mostrar el saldo del usuario en la LCD. Si la tarjeta es nueva, el saldo será 0. Además de mostrar el dinero de la tarjeta vamos a comenzar a hacer peticiones al servidor con PHP y Apache para esperar dos cosas:

  • Recargar saldo: el servidor le ordenará a la tarjeta que recargue saldo al usuario
  • Descontar saldo: el servidor va a indicar que la tarjeta descuente saldo si es que eso es posible

Mientras no haya órdenes por parte del servidor, la ESP8266 va a estar consultando cada 5 segundos. Tan pronto reciba una orden, la va a ejecutar e indicar los resultados a través de la LCD.

Para realizar una compra o una recarga he escrito el frontend en JavaScript. Lo que se hace es simplemente indicarle al servidor PHP la orden que le tiene que dar a la tarjeta, y después de eso igualmente comenzamos a realizar peticiones cada 2 segundos para ver lo que la tarjeta ha respondido.

Código para la tarjeta ESP8266

Aquí dejo el código completo de la tarjeta. No olvides cambiar la dirección del I2C, así como las credenciales para conectar a la red WiFi y la dirección de tu servidor, que puede ser de la red local o un servidor en internet (para esto último tendrás que configurar el certificado en caso de usar https).

Por cierto, fíjate en las funciones de guardarSaldo y obtenerSaldo, pues son muy importantes y se encargan de leer o escribir los bloques de la tarjeta RFID. Si te quedan dudas recuerda que anteriormente te dejé los posts en donde explico eso más a fondo.

Fíjate en que para las órdenes del servidor estoy usando el separador de ; y luego utilizo strtok para separar la orden y el saldo. Por otro lado estoy usando strcmp para comparar las cadenas.

Realizar compra con RFID y descontar saldo

Veamos un poco el lado del servidor para este monedero con PHP y la tarjeta ESP8266 que bien podría ser remplazada por un Arduino. Primero tenemos la interfaz con productos estáticos (más tarde se podrían obtener desde una base de datos):

Interfaz para comprar productos en PHP usando tarjeta RFID con saldo
Interfaz para comprar productos en PHP usando tarjeta RFID con saldo

Recuerda que debes acceder al lugar en donde hayas montado tu proyecto y acceder a comprar.php, en mi caso lo he montado en C:\xampp\htdocs\rfid_saldo así que la URL es localhost/rfid_saldo/comprar.php.

Cada producto tiene un data-precio para indicar el precio, así:

Luego de eso se escucha el clic del botón, se extrae el precio y se le solicita al servidor que le indique al lector descontar esa cantidad:

Y después de eso va a estar invocando a la función esperarLector para que nos indique cuando el lector haya indicado que se ha descontado el saldo del usuario.

El código de PHP que establece el modo de compra es el siguiente:

La respuesta del lector

Después de recibir una orden, el lector va a respondernos para saber si la transacción ha sido exitosa, ya que para este proyecto de tarjetas de saldo con PHP y RFID se puede dar el caso de que el saldo sea insuficiente o alguna otra situación.

Saldo insuficiente al comprar con RFID
Saldo insuficiente al comprar con RFID

Para ello PHP se encarga de establecer la respuesta del lector:

Misma que luego es consultada al comprar o recargar:

Recargar saldo

Ya vimos la operación de descontar saldo o crédito a la tarjeta con PHP y ESP8266 usando RFID, ahora vamos a ver cómo recargar saldo. El proceso es similar:

Recargar saldo al monedero con PHP y tarjetas RFID
Recargar saldo al monedero con PHP y tarjetas RFID

En este caso solicitamos que se recargue saldo:

Y la respuesta del lector se va a manejar del mismo modo que cuando hacíamos compras.

Poniendo todo junto

Así es como funciona todo este pequeño proyecto de monedero o saldo electrónico con tarjetas RFID y PHP. Me siento muy orgulloso de haberlo realizado, ya que se me hizo difícil al inicio y no me había enfrentado a algo así.

Yo utilicé PHP pero puedes portarlo fácilmente a Go, Java, C#, etcétera; todo depende de lo que tú necesitas.

Te dejo el código fuente completo en mi GitHub. Más adelante traeré un vídeo de YouTube para mostrarte una pequeña demostración.

También te invito a leer más sobre Electrónica y PHP en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario