ESP8266 + MFRC522 – Reading RFID chips through the internet

After working with three.js, I decided to start dabbling with Unity (a popular game engine) again a few days ago. C# is more pleasant to work with than JS (though one could use JS to work with Unity as well), and it’s great to not having to solve similar low level problems again and again. But today my MFRC522 blocks arrived, so I just had to jump back into low level fun.

The first board was quickly assembled. Apply solder paste, place the SMDs, hot air, solder throughhole parts, upload test code: The usual procedure.

It didn’t work. There’s some short to ground, applying power and touching the LDO instantly burned my finger. I tried different switch combos in case one of them was faulty and rechecked my UART pins (though a mistake there usually announces itself by blowing up the capacitor between PWR and GND), but to no avail.

Several burned fingers later I had to admit my defeat. Onto the next board.

As this isn’t my first faulty board, by now I have some theory on why random boards don’t work. Solder paste is, well, a paste. When placing the LDO on top of the solder paste, it squishes out on the site. Because of surface tension, the paste retracts back around the solder pad once it melts, leaving clean gaps between the pads and preventing shorts.

When placing the ESP on top of its pads, it also moves most of the paste under itself. My guess is that my hot air gun only manages to heat up the solder paste on the outside of the ESP7, resulting in a lot of conductive paste shorting a lot of pins. This probably also includes GND and PWR pins, hence the short to ground. In the future I’ll only apply the solder paste after placing the ESP7, so no paste ends up on the inside. Let’s see if that fixes the problem.

Anyways, the next board worked great. UART connected, code uploaded, and voilà, I could read my MyFare cards. Pretty awesome. Fortunately I already wrote a small library to automatically handle the distribution of the data of a block, so i only had to write three small functions to get the whole block up and running. But more about that in the next post.

A great feeling when all the pieces fall into their places.

What I’m going to use it for? Probably to let my system know if I’m at home or not. Sure, I could just check if my phone is in my network, but what if it’s out of power / broken / off?

Worst of all, that solution would be sooo boring. Every beginner can setup a static IP for a specific MAC address, but not everybody can read RFID cards from anywhere with an internet connection. That’s like, three style points there at least.