ESP32_RFID_Reader
FDX-B (pet microchip) and EM4100 RFID Reader for ESP32
ESP32 RFID Reader: pet chips and EM4100 tags on a board
An ESP32 application that decodes FDX-B pet microchip tags and 125kHz EM4100 RFID tags. It started life for a catflap, ran into range limits, and works well as a handheld reader.
Two tag standards, one board
With suitable hardware, the app decodes the tags in microchipped pets in the UK and EU, which use the 134.2kHz biphase encoded FDX-B protocol. It can also handle the 125kHz Manchester encoded EM4100 tags. Both protocols are read through an ESP32 with the decoding done in software on the board.
A project that changed purpose
The library was originally written for a microchip controlled catflap. The README is honest that the RDM6300 hardware it used did not have enough range to be reliable for that job, though the same setup is fine for a handheld pet microchip reader. That range limitation is stated directly as part of the project's history.
Cheap hardware, a few modifications
A custom RFID circuit can be built, but the README points at RDM6300 readers, which are cheap 125kHz EM4100 units that can be converted for 134.2kHz. The conversion means removing or disabling the onboard microcontroller and voltage regulator, then raising the antenna resonant frequency to 134.2kHz by reducing a capacitor value or removing turns from the antenna coil. An antennaFreq spreadsheet in the extras folder helps pick values, and both connections back to the ESP32 should go through 5V to 3.3V level shifters.
First boot and everyday use
Installation is Arduino IDE based, with the application folder renamed after download and a Minimal SPIFFS partition scheme selected. On first boot the app starts in WiFi access point mode under an SSID like ESP32 RFID, and a web page at 192.168.4.1 takes the router and password details. Later updates ride the OTA upload tab, and the data folder on the SD card can be reloaded from GitHub or pushed through WebDAV. Configuration screens cover RFID encoding selection, pins for the RDM6300 and an optional LCD1602, and a physical clear button.
Community notes