Experimenting with a DIY RFID Table and Broadcast Overlay (1 Viewer)

Tina needs to step her game up:

v1 of the RFID board came today. Happy to report no smoking and my PC recognized it immediately upon plugging it in.

I've loaded some basic test firmware and have connected the board to my wifi and blinked the LEDs. It honestly feels like a smashing success so far!


I'm working on cusotm firmware now to test the RFID capabilities. I haven't found any great examples or libraries yet for the esp32/st25r95 combo so this part will be a little slow going.

I've still been working on v2 of the board and also the frontend in parallel with all this so there's some progress being made there, too.

I'm sure I'll have more pics or video of v1 doing it's thing at some point.
Still doing stuff while I wait for a few of the components to come in at the fab shop (might still be a few weeks).

I've started researching and designing v2 of the rfid reader. Early stages but going well. I'm taking extra time to do it right this time in various ways.

I've also started working on a redesign of the frontend in go instead of node/angular as mentioned before. Making good progress here, too.

Been spending some time considering from a UX perspective how everything will flow and work.

Given you've got the hardware installed in your table and you're plugging it in for the first time, what needs to be configured and how does that work and look?

When you're ready to broadcast a game, how does connecting the hardware to the frontend work and look?

How about feed security (outside of obvious SSL/TLS but operationally)?

Lots of things I'm brainstorming on right now in terms of the design of the whole package.

I would love to hear what your ideal solutions look like as well as what features they include.
EightyWon, as you know, i'm working on a similar project with some retrogaming theme. For the sake of discussion and to partially answer to your post, i thought it would be useful to share the current mockup of the GUI i'm currently implementing (used BGinGa idea for the name but i will take it out if asked ofc, as i was answered for your project :tup:). So the idea is to run this on a computer. I might develop something for the dealer in the future, i'm currently thinking of a stream deck, but i think the dealer already has to be 100% focus on the action going, so his input for the rfid system should be minimal.
I will use antennas for an rfid dealer button to track the action / position of players. I'll go for a 6-players table, with central positionned, board-antenna integrated pcb. Each antenna has its own transceiver and is connected via SPI to the mainboard. That will handle the problem of muxing RF signals and allow me to have custom antennas for each role (hole cards, board, much, dealer button all require different sizes, some do not require anti-collision,...).
Again, thx for the shared informations/updates.

Last edited:
Man, it's been a dreadful few days but this morning I jumped out of my seat when I got the bolded lines from the logging output of my firmware:

12:07:31.509 -> ets Jun 8 2016 00:22:57
12:07:31.509 ->
12:07:31.509 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
12:07:31.509 -> configsip: 0, SPIWP:0xee
12:07:31.509 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
12:07:31.509 -> mode: DIO, clock div:1
12:07:31.509 -> load:0x3fff0018,len:4
12:07:31.509 -> load:0x3fff001c,len:1216
12:07:31.509 -> ho 0 tail 12 room 4
12:07:31.509 -> load:0x40078000,len:10944
12:07:31.509 -> load:0x40080400,len:6388
12:07:31.555 -> entry 0x400806b4
12:07:31.877 -> Connecting to WiFi .... (nice)
12:07:33.862 -> RRSI: -58
12:07:33.862 -> trying to put the st25r95 in SPI mode
12:07:34.001 -> IDN_Command
12:07:34.001 -> Response Code 0 Data len F
12:07:34.001 -> DEVICE ID: NFC FS2JAST4 ROM CRC: 2ACE
12:07:35.012 -> setting protocol
12:07:35.012 -> 0
12:07:35.012 -> F
12:07:35.060 -> Response Code 0 Data len 0
12:07:35.060 -> PROTOCOL SET-
12:07:35.060 -> 0
12:07:35.060 -> 0
12:07:35.060 -> Response Code 80 Data len 5
12:07:35.570 -> Response Code 87 Data len 0
12:07:36.126 -> Response Code 80 Data len 5
12:07:36.635 -> Response Code 87 Data len 0
12:07:37.196 -> Response Code 80 Data len 5
12:07:37.705 -> Response Code 87 Data len 0
12:07:38.214 -> Response Code 80 Data len 5
12:07:38.766 -> Response Code 87 Data len 0

From the st25r95 datasheet:
0x80 EFrameRecvOK = Frame correctly received (additionally see CRC/Parity information)
0x87 EFrameWaitTOut = Frame wait time out (no valid reception)

So, after days of trying and troubleshooting and a comedy of errors including a defective antenna, v1 of my board is finally reading an RFID tag!

The feeling of that moment when something you've been working toward/struggling with seemingly forever finally works is so good. When I saw the resp code finally change from a wall of 0x87s (no tag detected, basically) to a 0x80... better than just about anything.


So the bad news is antenna tuning will indeed be a new issue to learn/solve because right now the RFID tag must be fully touching the antenna and even in the perfect orientation for us to detect/read the tag. From everything I've learned so far, this can be solved by fine tuning the antenna matching circuit and the antenna design (right now I'm actually just using one of the Pepper C1 antennas so, someone else's design).

There's also a ton more work to do on the firmware. It's very sloppy right now and literally just the bare minimum code to validate that the hardware works.

Plus all the other outstanding work.

But for right now, HOLY SHIT IT WORKS (kinda) :)
Small bit of good news. Once I had the firmware detecting tags, I did some more testing with different tags. I'm getting about 2.5" of read distance with the RFID deck of cards I bought from AliExpress so my design isn't actually that far off.

As compared to the Pepper C1 (about 4"), I'm still getting less read distance with my board but not terribly so.

So, optimizations to be made still to the antenna circuit but I'm really pleased at this point.

I think I'm going to put most of my focus now into v2 of the board and multiplexing because once that's sent into production, I'll naturally have some time to work on the software side.
First go at an antenna, designed for side-by-side poker-sized cards:


It's at the fab shop for PCB production only. Used 0805 components so I could hand solder this one to experiment with different antenna matching circuit values.


  • 1683238623946.png
    24.7 KB · Views: 113
It is unclear to me why you would need to redesign your antennas. In your case, considering you are using external antennas with a cable (for the eccel antennas, looks like they have some twisted pair for the differential signal and a ground). If eccel did a good job, i would assume the impedance of the load matches the characteristic impedance of the cable for max power transfer. So what i'm saying is that the antennas are fine and you should probably adapt the matching circuit on your main board that comes right after the EMC filter. I don't know, maybe copying the pepper c1 shematic and removing the multiplexer changed the matching for the part before the cable ?
For the antenna design, i saw somewhere that it's best to avoid right angles in the corners. No idea if it's critical x)
Can you put your antenna kicad files on your git? Might save me some hours :-D
It is unclear to me why you would need to redesign your antennas.
A few different reasons.

The biggest reason is so I can eventually offer production-ready files for both the reader and the antennas. With that, no one has to rely on commercial products that may or may not be available in the future. That supports one of my original main project goals which is a complete package from soup to nuts and all the info anyone would need to implement it.

A more immediate reason is for testing and tinkering. With this first antenna design, as I mentioned, I made the component packages a little larger so I could easily hand-solder them with the idea of tweaking certain values and observing the result.

Another reason is that I wanted to modify the footprint slightly. The largest Eccel antenna I own (and the largest they make, last time I looked) is 80x80 which isn't wide enough for two cards side-by-side. Yes, the 80x80 antenna will generally still read two cards side-by-side, but reception gets worse as you deviate more from the center of the antenna. I want to see how the larger antenna footprint behaves with relation to RFID playing cards.

Also, if I can design usable antennas, I think they'll be less expensive to produce than what the commercial versions cost. Not a huge difference or deal, but when you're using 10+ for a table, cheaper is better.

Finally, for fun :cool

For the antenna design, i saw somewhere that it's best to avoid right angles in the corners. No idea if it's critical x)
Yeah, I wish I'd radiused the trace corners a little more. They are slightly radiused, but I think I should have gone more.

From the little I've read, right angles should generally be avoided with traces but I think it only really starts to become critical at higher frequencies than what we're dealing with. I hope. We'll see.

Can you put your antenna kicad files on your git? Might save me some hours :-D

I do intend to make everything public on github eventually. I'm not sure I'm quite ready yet but IM me if there's some specific stuff you want. As for the antenna design, I really just tried to follow the PN5180 design guide doc. I'm really not nearly smart enough to reinvent the wheel.
I finally had a few minutes this morning during a work call to solder some 0 ohm resistors on to one of the new antenna's matching circuits. This basically amounts to no matching at all on the antenna side, just a coil.

Then I did some testing (green light on the board means power and connected to wifi, blue flashing light on the board means we're reading an RFID tag from the field):

Note, this is with 100% of our home-grown hardware and software now - nothing commercial or from a pre-existing solution used in the making of this video. That's HUGE imo.

As you can see from the video we're getting about 1-1.5" of reception without any antenna side tuning which ain't bad!

I've actually been thinking that leaving the antennas slightly detuned might be a good idea anyway so that we're not accidentally reading cards that aren't supposed to be read at a given position e.g. a player's card slides near another player's antenna - with good tuning we may read it from up to 4-6" and we don't want to. If read distance is limited to 1-2", the chance of false reads I think would be much lower?
I think ideally we want to keep a good tuning. From what i understand, if we want lower detection distance, we can lower the Q factor and get a more robust system to detuning, which might occur if people put their phones or any metallic thing on the playing field. That being said, reaching 1.5'' is really great at this stage. Also i'm not sure if we really need a matching circuit at all on the antenna side. I don't see what prevents us from considering the antenna and its cable as one load and only put a matching circuit on the main board ? I don't really know for your transceiver, but i work with the PN5180 and its datasheet recommends a 20 ohm load impedance (source impedance from transceiver is around 3 Ohms), so there is no real "impedance matching" anyway. Actually real matching would burn the transceiver :-D
Good luck and have fun with Smith charts

Create an account or login to comment

You must be a member in order to leave a comment

Create account

Create an account and join our community. It's easy!

Log in

Already have an account? Log in here.

Top Bottom