Nueva librería Arduino/ESP32 para trabajar con el lector UHF RFID IN‑R200/YPD‑R200, LibR200 publicada en Github.
¿Que es el IN-R200?
También vendido como módulo R200 o YPD‑R200, es un lector RFID UHF que trabaja típicamente entre 860 y 960 MHz, pensado para inventario, control de accesos y trazabilidad y nos permite leer múltiples tags por segundo y alcanzar varios metros de alcance (dependiendo de antena, el tipo de tag, potencia configurada y entorno), lo que lo hace muy distinto a los clásicos módulos RFID de corto alcance tipo 13,56 MHz.
A nivel eléctrico, el módulo puede alimentarse entre 3,3 V y 5 V y expone una interfaz serie TTL, por lo que encaja bien tanto con placas Arduino de 5 V como con ESP32 a 3,3 V. Para la librería LibR200 se asume el uso directo del puerto UART TTL hacia el microcontrolador.
Que nos aporta la librería LibR200
LibR200 nace para simplificar el uso del lector IN‑R200 en proyectos con el core de ESP32, encapsulando el protocolo serie del módulo en una API simple con clases C++. En lugar de lidiar con tramas hexadecimales y comandos propios del fabricante, el objetivo es exponer funciones de alto nivel para inicializar el lector, configurar parámetros básicos y leer etiquetas UHF EPC Gen‑2.
El lector es capaz de leer múltiples etiquetas por segundo (se anuncian cifras del orden de decenas de tags por segundo), de modo que tiene sentido que la librería gestione buffers de lectura y proporcione mecanismos para iterar por los EPC detectados en un periodo de tiempo.
Ideas de uso y proyectos
Con un lector UHF de largo alcance aparecen escenarios que no son viables con RFID de proximidad: inventario de cajas en una estantería, control de paso en una puerta o conteo de objetos que cruzan una zona concreta. LibR200 permite integrar estas lecturas en proyectos ya existentes de Arduino/ESP32, combinando por ejemplo la detección de tags con conexión WiFi, MQTT, registro en SD o publicación en una API web.
Cómo empezar a probarla
El código fuente de LibR200 está publicado en el repositorio Github (https://github.com/pinguytaz/LibreriasArduino/tree/main/LibR200) existiendo un fichero «LibR200.zip» que es el que instalaremos en las librerías de nuestro IDE-Arduino. Una vez instalada, bastará con incluir el header «#include <LibR200.h>» para poder instanciar la clase con el constructor base «R200 Lector(&Puerto)» o si se desea podremos configurar los parámetros de comunicación y pines.
R200(HardwareSerial, int baud = 115200, uint8_t RxPin = 16, uint8_t TxPin = 17) // Prototipo constructor y valores por defecto.
R200 Lector(&Puerto) // Instancia simple
R200 Lector(&Puerto, 115200, 16, 17) // Instancia con parámetros del puerto serie.
Una vez tenemos instanciado el objeto la iniciaremos con «Lector.iniciaR200()», disponemos de un ejemplo simple en la clase «VerificaLector.ino» junto a otros que nos muestran como usar los métodos creados y descritos en el repositorio de la librería.
Antes de montar nada definitivo, es recomendable revisar la hoja de características del módulo R200/IN‑R200 para confirmar pines, tensiones y la antena incluida, ya que hay pequeñas variaciones entre placas de distintos fabricantes. A partir de ahí, el objetivo de esta nueva librería es que el foco esté en el proyecto (qué hacer con las lecturas UHF) y no en pelearse con el protocolo del lector, así que cualquier feedback y propuestas de mejora serán bienvenidas.
Ejemplo de configuración para Europa
La librería LibR200 permite ajustar la potencia de salida RF del módulo IN-R200/R200 , típicamente en un rango de 0 a 30-33 dBm así como la región y otros parametros para la gestión de anticolisión y ganancias del demodulador que podrian interesar cambiar según el tipo de etiqueta utilizado.
Lector.set_Region(EU); // Pone región de europa, para cumplir normativa ETSI/FCC
Lector.set_Potencia(15);
// Frecuencia en Hopping recomendadas para Europa (MHz) (4)865.7 (7) 866.3 (10) 866.9 (13) 867.5
uint8_t canales [4] = {4, 7, 10, 13};
Lector.insertCanales(4,canales);
Lector.hopping(true);
Lector.transmisionContinua(false); // Quitamos la transmisión continua que solo deberemos utilizar en pruebas.
Lector.set_Firmware(ALL,S1,A,5); // Parámetros prácticos para lectura de multiples TAG, unos 10.
// Parámetros del demodulador que me han dado buen resultado en etiquetas U9
t_Demodulador demodulador;
demodulador.campo.Mixer_G = MG_9;
demodulador.campo.IF_G = IFG_36;
demodulador.campo.Thrd = 0x01B0;
Lector.set_Demodulador(demodulador);
Podemos poner el máximo de potencia pero es recomendable ajustarlo, segun a la distancia que estemos leyendo las etiquetas para evitar saturaciones y ahorrar energía.
