Alarma ESP32

4.6K1115

Intro: Alarma ESP32

Proyecto de alarma casera con micro ESP32 y programa arduino.

Se trata de montar una caja con el micro, la pantalla, el lector RFID, el buzzer y demás componentes. También habrá que añadir los componentes externos a la caja de control: la sirena con relé, el sensor de movimiento PIR y el sensor magnético de la puerta.

Funciones principales:

  • puesta en marcha - activación de vigía mediante pulsado de tecla en pantalla - desactivación con pulsado mientras no se ha llegado al final del timeout
  • alarma en vigilancia: estado de la alarma una vez se ha puesto en modo vigía: si se abre puerta o se detecta movimiento se activa la cuenta atrás para poder desactivarla mediante un llavero o tarjeta RFID. Si no se desactiva, la alarma sonará durante el tiempo configurado.
  • configuración, permite personalizar totalmente la alarma: tema en pantalla, timeouts, idioma, usuarios permitidos, wifi, ...
  • envío de eventos: si se prepara adecuadamente, todos los eventos se envían a un servidor en la nube para poder notificar por email o aplicación al usuario administrador.

Todos los elementos se pueden adquirir en tiendas de electrónica y amazon. en cuanto a la caja, habra que construirse una, o bien hacer bricolaje con alguna que tengamos en casa. En mi caso he realizado una con una impresora 3D (archivo STL adjunto).

La lista de materiales necesarios:

Herramientas:

  • soldador + estaño
  • pistola de silicona + barras de silicona
  • cables y mangueras
  • tornillos, tuercas de varias medidas M2 y M3
  • cinta aislante
  • tubos termoretráctil

STEP 1: Caja De Conexiones

Usa el archivo adjunto para imprimir la caja en una 3D. Tiene el fondo y la tapa.

Si no dispones de una impresora 3D puedes usar una caja ya hecha o hacerla tu mismo. Las dimensiones son 120mm x 140mm x 40mm aprox.

Las medidas de la ventana para la pantalla son de 55mm x 45mm aprox.

STEP 2: Montaje De Placas Pcb

Para el uso final, es conveniente montar el ESP32 en placas PCB para poder organizar mejor todas las ocnexiones.

Hay que colocar un condensador 10uF entre el EN y GND de la placa ESP32 para poder cargar los programas de forma cómoda, sin tener que pulsar el boton Boot cada vez.

Igualmente, también se deberia preparar una placa con los terminales de tornillo para el acceso a las conexiones de los elementos exteriores de la caja (sensores de puerta, de movimiento y alarma).

Las conexiones de los terminales son:

  1. alarm 3.3V
  2. alarm GND
  3. alarm signal (output)
  4. door sensor (0-3.3V input)
  5. door sensor 3.3V
  6. PIR motion sensor (0-3.3V input)
  7. PIR motion sensor 5V
  8. PIR motion sensor GND

STEP 3: Montaje De Elmentos En Caja Y Cableados

Vamos montando los elementos en la tapa de la caja, siguiendo este orden y cableando a medida que avanzamos. Usa silicona o tornillos para colocar los elementos.

Examinar el dibujo del cableado para seguir las conexiones. Se adjunta archivo Fritzing para edición.

  1. Leds de funcionamiento y alarma
  2. placa pcb de conexiones
  3. modulo RFID
  4. pantalla táctil
  5. placa pcb de ESP32
  6. buzzer

STEP 4: Subida De Programa Arduino

Es preciso instalar algunas librerias para poder subir el programa, entre ellas las de rfid, de ntp, wifi, las de pantalla:

  • lv_arduino
  • Adafruit_ILI9341
  • Adafruit_GFX
  • Adafruit_TFTLCD
  • Adafruit_TouchScreen
  • ESPAsyncWebServer
  • AsyncTCP - MCUFRIEND_kvb
  • TFT-eSPI
  • MFCR522
  • NTP_Client

Debemos localizar algunas librerias en nuestro pc para permitir el uso de las fuentes programadas en la pantalla y los temas permitidos. Normalmente las librerías se ubican en la carpeta \documentos\arduino\libraries.

lv_arduino:

Puedes usar el archivo adjunto o modificar el archivo lv_conf.h para permitir los temas y fuentes usados.

TFT_e-SPI:

Hay que poner los pines correspondientes para el uso de la pantalla en nuestro sistema, para ello edita el User_Setup.h y habilita la pantalla (ILI9341) y fíjate en los pines, puede que tengas que cambiarlos. Dejo el archivo modificado.

STEP 5: Prueba Y Configuración De La Alarma

Una vez montada la caja y antes de colgarla en la pared deberíamos probar las funciones básicas para asegurarnos que todo está correctamente cableado.

La pantalla principal muestra la hora y el estado de la alarma, la conexión wifi y los sensores.

En cuanto a la configuración, es sencilla y se sigue en las 6 pestañas de configuración disponibles a la que se acceden pulsando la tecla de configuración:

  • WIFI
    • configuración de red y contraseña
  • IP/PHP
    • Nombre del dispositivo (se toma en cuenta si se envía la info a la nube)
    • IP local
    • Puerto remoto (para abrirlo en el router de casa y que se redirija al puerto 80 de la IP local)
    • PHP: página php del servidor donde vamos a enviar la información de los eventos
  • RFID
    • desplegable de usuarios, con botón de eliminación del usuario seleccionado
    • añadir nuevo usuario en 3 pasos:
      1. escribir nombre
      2. leer llavero o tarjeta rfid
      3. guardar
  • MISCELÁNEA
    • Tema de presentación (5e idioma (Català, Castellano, English)
    • Zona horaria para la hora recgida por servidor NTP.
    • definir hora de verano
    • test de alarma y sensores
  • TIEMPOS
    • tiempo disponible después de activar
    • tiempo disponible para desactivar
    • tiempo que sonará la alarma
  • SALIR
    • volver a parámetros iniciales

.

STEP 6: Montaje En Pared Y Conexion De Elementos Externos

Buscar un sitio cerca de la puerta para poner la caja y cablar los elementos externos a ella: sirena, sensor de movimiento y de puerta.

Colocar el sensor de movimiento en el techo o encima de la puerta. Se puede usar una cajita para ponerlo dentro y disimularlo. En thingiverse hay multiples opciones para realizar la caja en 3D. Cablear los 3 pines (5V, GND y Salida). Aunque alimentamos a 5V, la salida será a 3.3, por lo tanto es válido para el ESP32, que solo puede manejar entradas y salidas de 3.3V.

El sensor de puerta debe colocarse una parte en la propia puerta y la parte que va cableada en el marco de la misma, de forma que queden encarados. Cuando la puerta está cerrada, hay continuidad en el cable, por lo que en la entrada del micro tendremos 3.3V (HIGH). Cuando se abre la puerta, se corta el cable, por lo que en la entrada del micro tendremos 0V (LOW).

La sirena estará alimentada por una pila de 9V, y un relé permitirá el paso o no de este voltaje a la sirena. Cuando el micro envie una señal alta de 3.3V, el relé se cerrará y permitirá la alimentación de 9V. Cuando haya una señal baja, el relé se abre y no deja pasar los 9V.

STEP 7: Preparación Servidor PHP/MySQL

Opcionalmente se puede preparar un servidor para que la alarma publique los eventos, y poder usarlos mediante una aplicación web o una app para móvil.

En nuestro caso vamos a configurar el sistema web php y enviar un email a un buzón.

Hay que contratar en algún proveedor de servicios un espacio con MySQL y PHP. Luego, habilitar los usuarios y dejar las páginas que están disponibles en un directorio de la web.

El programa hace una llamada a la página add-item.php, pasándole los parámetros de nombre, estado, motivo del evento, .... En la base de datos se añade automáticamente la hora y fecha del evento.

Finalmente, el disponer de una bbdd en la nube, nos permitirá realizar cualquier app para móvil o para browser. Hay disponible una app android que puede manejar estos datos, se publicará proximamente.

11 Comments

Hola, estoy haciendo el proyecto de la alarma, en la compilación se visualizan unos errores que deben ser con respecto a las fuentes. Tengo instalada la versión 3.0.1 de lv_arduino. Agradezco la ayuda.
Un saludo, Angel

/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino: In function 'int readFile(fs::FS&, const char*)':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:517:22: error: 'lv_theme_default_init' was not declared in this scope
case 0: th = lv_theme_default_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:517:22: note: suggested alternative: 'lv_theme_template_init'
case 0: th = lv_theme_default_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~~~~
lv_theme_template_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:518:22: error: 'lv_theme_night_init' was not declared in this scope
case 1: th = lv_theme_night_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:518:22: note: suggested alternative: 'lv_theme_mono_init'
case 1: th = lv_theme_night_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~~
lv_theme_mono_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:519:45: error: could not convert '180' from 'int' to 'lv_color_t' {aka 'lv_color16_t'}
case 2: th = lv_theme_material_init(180, NULL); break;
^~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:520:22: error: 'lv_theme_nemo_init' was not declared in this scope
case 3: th = lv_theme_nemo_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:520:22: note: suggested alternative: 'lv_theme_mono_init'
case 3: th = lv_theme_nemo_init(180, NULL); break;
^~~~~~~~~~~~~~~~~~
lv_theme_mono_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:521:22: error: 'lv_theme_zen_init' was not declared in this scope
case 4: th = lv_theme_zen_init(180, NULL);break;
^~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/alarmaESP32-LVscreen2-52.ino:521:22: note: suggested alternative: 'lv_theme_mono_init'
case 4: th = lv_theme_zen_init(180, NULL);break;
^~~~~~~~~~~~~~~~~
lv_theme_mono_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino: In function 'void setup()':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:67:10: error: 'lv_theme_default_init' was not declared in this scope
th = lv_theme_default_init(180, NULL);
^~~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:67:10: note: suggested alternative: 'lv_theme_template_init'
th = lv_theme_default_init(180, NULL);
^~~~~~~~~~~~~~~~~~~~~
lv_theme_template_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:146:3: error: 'lv_theme_set_current' was not declared in this scope
lv_theme_set_current(th);
^~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:146:3: note: suggested alternative: 'lv_theme_set_act'
lv_theme_set_current(th);
^~~~~~~~~~~~~~~~~~~~
lv_theme_set_act
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino: In function 'void btn_event_cb(lv_obj_t*, lv_event_t)':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:26:9: error: 'pantalla_config' was not declared in this scope
pantalla_config();
^~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:26:9: note: suggested alternative: 'pantalla_principal'
pantalla_config();
^~~~~~~~~~~~~~~
pantalla_principal
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino: In function 'void btnonoff_event_cb(lv_obj_t*, lv_event_t)':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:40:22: error: 'LV_BTN_STATE_TGL_PR' was not declared in this scope
if (estat == LV_BTN_STATE_TGL_PR){
^~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:40:22: note: suggested alternative: 'LV_BTN_STATE_PRESSED'
if (estat == LV_BTN_STATE_TGL_PR){
^~~~~~~~~~~~~~~~~~~
LV_BTN_STATE_PRESSED
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:52:28: error: 'LV_BTN_STATE_TGL_REL' was not declared in this scope
}else if (estat == LV_BTN_STATE_TGL_REL){
^~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:52:28: note: suggested alternative: 'LV_BTN_STATE_PRESSED'
}else if (estat == LV_BTN_STATE_TGL_REL){
^~~~~~~~~~~~~~~~~~~~
LV_BTN_STATE_PRESSED
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino: In function 'void timer_3(lv_task_t*)':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:164:17: error: 'LV_BTN_STATE_TGL_REL' was not declared in this scope
if (estat == LV_BTN_STATE_TGL_REL){
^~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:164:17: note: suggested alternative: 'LV_BTN_STATE_PRESSED'
if (estat == LV_BTN_STATE_TGL_REL){
^~~~~~~~~~~~~~~~~~~~
LV_BTN_STATE_PRESSED
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino: In function 'void principal(lv_task_t*)':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:204:24: error: 'class NTPClient' has no member named 'getFormattedDate'; did you mean 'getFormattedTime'?
dataNTP=timeClient.getFormattedDate().substring(0,10);
^~~~~~~~~~~~~~~~
getFormattedTime
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:269:7: error: 'lv_obj_set_style' was not declared in this scope
lv_obj_set_style(label_estat, &style_large_blue);
^~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:269:7: note: suggested alternative: 'lv_obj_set_state'
lv_obj_set_style(label_estat, &style_large_blue);
^~~~~~~~~~~~~~~~
lv_obj_set_state
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino: In function 'void pantalla_principal()':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:391:38: error: 'lv_style_plain' was not declared in this scope
lv_style_copy(&style_large_green, &lv_style_plain); /*Copy a built-in style to initialize the new style*/
^~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:391:38: note: suggested alternative: 'lv_style_init'
lv_style_copy(&style_large_green, &lv_style_plain); /*Copy a built-in style to initialize the new style*/
^~~~~~~~~~~~~~
lv_style_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:392:21: error: 'struct lv_style_t' has no member named 'text'
style_large_green.text.font=&arialr18s;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:392:32: error: 'arialr18s' was not declared in this scope
style_large_green.text.font=&arialr18s;
^~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:393:21: error: 'struct lv_style_t' has no member named 'text'
style_large_green.text.color = LV_COLOR_GREEN;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:397:20: error: 'struct lv_style_t' has no member named 'text'
style_large_blue.text.font=&arialr18s;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:398:20: error: 'struct lv_style_t' has no member named 'text'
style_large_blue.text.color = LV_COLOR_TEAL;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:402:19: error: 'struct lv_style_t' has no member named 'text'
style_large_red.text.font=&arialr18s;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:403:19: error: 'struct lv_style_t' has no member named 'text'
style_large_red.text.color = LV_COLOR_RED;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:407:22: error: 'struct lv_style_t' has no member named 'text'
style_large_orange.text.font=&arialr18s;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:408:22: error: 'struct lv_style_t' has no member named 'text'
style_large_orange.text.color = LV_COLOR_ORANGE;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:412:13: error: 'struct lv_style_t' has no member named 'text'
style_red.text.color = LV_COLOR_RED;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:416:14: error: 'struct lv_style_t' has no member named 'text'
style_blue.text.color = LV_COLOR_TEAL;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:420:15: error: 'struct lv_style_t' has no member named 'text'
style_green.text.color = LV_COLOR_LIME;
^~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:465:3: error: 'lv_btn_set_toggle' was not declared in this scope
lv_btn_set_toggle(btnonoff, true);
^~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:465:3: note: suggested alternative: 'lv_btn_toggle'
lv_btn_set_toggle(btnonoff, true);
^~~~~~~~~~~~~~~~~
lv_btn_toggle
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:503:3: error: 'lv_obj_set_style' was not declared in this scope
lv_obj_set_style(iconwan, &style_blue); /*Apply the created style*/
^~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_principal.ino:503:3: note: suggested alternative: 'lv_obj_set_state'
lv_obj_set_style(iconwan, &style_blue); /*Apply the created style*/
^~~~~~~~~~~~~~~~
lv_obj_set_state
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino: At global scope:
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:3:6: error: redefinition of 'void setup()'
void setup() {
^~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:3:6: note: 'void setup()' previously defined here
void setup() {
^~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino: In function 'void setup()':
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:67:10: error: 'lv_theme_default_init' was not declared in this scope
th = lv_theme_default_init(180, NULL);
^~~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:67:10: note: suggested alternative: 'lv_theme_template_init'
th = lv_theme_default_init(180, NULL);
^~~~~~~~~~~~~~~~~~~~~
lv_theme_template_init
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:146:3: error: 'lv_theme_set_current' was not declared in this scope
lv_theme_set_current(th);
^~~~~~~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:146:3: note: suggested alternative: 'lv_theme_set_act'
lv_theme_set_current(th);
^~~~~~~~~~~~~~~~~~~~
lv_theme_set_act
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino: At global scope:
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:176:6: error: redefinition of 'void myPrint(boolean, boolean, String)'
void myPrint(boolean crlf, boolean screen, String msg ){
^~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:176:6: note: 'void myPrint(boolean, boolean, String)' previously defined here
void myPrint(boolean crlf, boolean screen, String msg ){
^~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:190:6: error: redefinition of 'void touch_calibrate()'
void touch_calibrate()
^~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:190:6: note: 'void touch_calibrate()' previously defined here
void touch_calibrate()
^~~~~~~~~~~~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/Setup.ino:257:8: error: redefinition of 'String getIp()'
String getIp()
^~~~~
/home/angel/Escritorio/alarmaESP32-LVscreen2-52/A_config.ino:257:8: note: 'String getIp()' previously defined here
String getIp()
^~~~~
exit status 1
Compilation error: 'lv_theme_default_init' was not declared in this scope
Hola, desistí del proyecto por los múltiples problemas y mi falta de conocimiento en el tema, pero si conseguís que funciones y podéis resubir los sketchs y cómo cargarlos (IDE, Visual Studio, Micropython...) os lo agradecería, pues sí me gustaría tener una pequeña alarma que me notificase si entran en casa.
Hola de nuevo. Si quieres puedes mándeme un email donde te pueda dejar todo el contenido de librerías y el programa. El sistema no me deja subir archivos de zip/rar.
Hola, de IDE solo usé el de Arduino.
Subiré un zip con las librerías y el programa tal como las tengo para que te la copies en el directorio correcto.
Hola Angel,
la librería lv_arduino es cierto que existen incompatibilidades segun la versión de librería y pantalla que uses.
Si me das tu correo, puedo pasarte un zip con las librerías adecuadas y una pequeñas instrucciones de como usarlas para que no haya incompatibilidades.
Ya pude arreglarlo encontrando la librería lv_arduino 2.1.5. Solo que ahora tengo un error en la fecha con:
dataNTP=timeClient.getFormattedDate().substring(0,10);

puede que sea el formato de fecha, depende del servidor. ¿Qué error te sale exactamente?
Ya saqué esa parte del código, ahora estoy viendo como manejar las posiciones de los elementos en pantalla, así quito la fecha y hora. ¿Todo eso lo realizaste con un software aparte como Eclipse o algo así?
No, todo con el IDE de Arduino. Tienes que dibujar en un papel tus objetos e los vas posicionando bien con coordenadas o con posición relativa a otro objeto. Es entretenido. ,,😉
Buenas nohes, estoy aprendiendo a usar el ESP8266, y estoy interesado en montar tu proyecto para poder usarlo y aparte trastear para ver cómo funciona, pero la inagen del esquema no veo claramente los cableados en el ESP, donde veo que se conectan varios cables a un mismo pin del ESP, ¿realmente es así ? no quisiera equivocarme y "quemar" la placa o LCD..

Gracias, y buen trabajo...
hola,sí es así. supongo que te refieres a los cables de la entrada 18,19 y 23. son el MOSI, MISO y CLOCK para los datos de la RFID y la pantalla. Comparten pins.