This was my first project with the ESP8266 (ESP-01 specifically) and MQTT. It started when I found this cheap Geiger Tube kit from china. It uses a geiger tube to detect radiation "events". These events chirp the onboard buzzer (can be disabled with a jumper), flash the onboard LED, and pull an onboard transistor to GND. The transistor allows for easy interface to an arduino, or in this case an ESP8266. The ESP runs on 3.3v but since the signal is ground, we can safely interface with our 3.3v. The Geiger board does output 5v which we must regulate to 3.3v for the ESP. For this I used an LM317 variable linear voltage regulator. Here is the working prototype
The power reglator only consists of 3 components. LM317's are handy to have, but I will use a dedicated 3.3v regulator for the final circuit.
Here is the soldered circuit. I used a dedicated 3.3v linear regulator because I already had it and I am not worried about power draw. You would want to use something more efficient if your project was battery powered or used more current.
With the ESP-01 installed.
The Geiger tube itself is a straightforward circuit. The seller provided a zip file with more documentation than I was expecting, including the schematics.
As I was working on the code, I noticed one day that the reading were much higher than normal. Eventually I figured out that it was my gerber clutch causing the increase in CPM.
I mounted everything inside this weatherproff enclosure. I did drill a hole for the power but it is mostly sealed and I am not mounting this outside anyway. I epoxied the standoffs that came with the geiger kit to the bottom of the enclosure and that worked very well.
And here it is working. You can see the LED flashing for every detection. I quickly learned that the tube is sensitive to light, so I installed it in a dark location, but would like to modify the case to block the light instead.
My first pass at the web interface was just to have basic information available including links to the JSON api's.
A little bit of inline CSS prettied the original interface up. The api's just return json data and can be polled by any standard web client.