Cheap usb rfid reader
This PN532 board has better read range than my first try, which was this RC-522 board. But, the PN532 possibly uses I2C clock stretching, which makes it fail sometimes on my Raspberry Pi 3B+. The flakiness sometimes takes hours to show up, and I couldn't find a software way to reset it short of a reboot.
What seems to work better is to make it a USB board with a CP2102 usb serial chip. Now I have [raspberry pi 3B+] -> [usb serial] -> [PN532 in UART mode]. The libnfc path for it is LIBNFC_DEFAULT_DEVICE=pn532_uart:/dev/ttyUSB0
.
Here's how to connect the boards right against each other: