🌈 ESP32-S3 Rainbow: ZX Spectrum Emulator Board! Get it on Crowd Supply →
Teaser Image
atomic14

atomic14

A collection of slightly mad projects, instructive/educational videos, and generally interesting stuff. Building projects around the Arduino and ESP32 platforms - we'll be exploring AI, Computer Vision, Audio, 3D Printing - it may get a bit eclectic...

Want to keep up to date with the latest posts and videos? Subscribe to the newsletter
  Â·     Â·     Â·     Â·     Â·   Posts  Â·   Videos  Â·   ESP32  Â·   Tools  Â·   Support

Rescuing my 2006 Travel Blog

In 2006 I stuffed my life in my parents’ loft and spent 13 months from Guatemala to Tierra del Fuego, live‑blogging 182 posts. Nineteen years on, I yanked exports from Blogger and Flickr, fed them to Claude, and rebuilt it all as a static Astro site on Cloudflare. We reconciled two messy archives (2,819 photos), rescued missing images (even from photos1.blogger.com), fixed rotten HTML, de‑duped re-encodes with cosine‑similarity thumbnails, inferred dates and places from 25k words, disambiguated a plague of beach.jpgs, folded in a CD‑ROM stash, marked truly lost hotlinks, and auto‑rotated 267 sideways shots with a small ResNeXt model....
03 August 2026

I Asked AI to Design 12 Dev Boards. It Told Me to Write a Script.

I wanted a dev board for every Espressif module with a PCB antenna and native USB, 12 boards across the S2, S3, C3, C5, C6 and H2 families, so I asked AI to design them. It talked me out of it: this isn't an AI problem, it's a scripting problem. So I let it write the scripts instead. One curated YAML file per module and a deterministic pipeline does the rest: schematic, placement, autorouting, DRC, 3D renders and fab-ready Gerbers, all built and released by GitHub Actions. Here's how it works, and the three CI bugs that nearly broke me....
03 August 2026

Invaders! is back: rescued from a forgotten Bitbucket account

I dug up my other 2009 iPhone game, Invaders!, after thinking the source was lost—turns out it was hiding in a forgotten Bitbucket git repo (thankfully not Mercurial). Claude Code helped port it to plain JavaScript and canvas while keeping the original OpenGL coordinate logic intact, so it plays exactly like the 2009 version—nixie tubes, bubble shields, UFOs and all. I fixed a 17-year-old power-up bug and worked around a bitmap font that can’t do a dash; you can play it now and browse the code on GitHub.
24 July 2026

Tanks! Mayhem is back: 16 years later, in your browser

I dusted off my 2010 wireframe tank shooter, Tanks! Mayhem—pulled from the US App Store after an Atari complaint—and asked Claude Code to bring it back on the web. About half an hour later I had a faithful browser port: original models and sounds, Box2D physics via planck.js, and my neon line glow rebuilt with quad-expanded edges. A forgotten procedural radar shader finally shipped, multiplayer and the hated attack chopper stayed out, the code’s on GitHub, and it’s free to play at tanks.atomic14.com.
24 July 2026

Any Google Font on Your ESP32 Display

Tired of jagged 1980s-looking text on TFT displays, I built a free, in-browser font studio that turns any of 1,900+ Google Fonts (or your own TTF) into pixel-perfect smooth fonts for TFT_eSPI, M5Stack/M5GFX, and LVGL—no uploads, no Java, no fuss. You get live, device-accurate previews, tiny subsets with live byte counts, PROGMEM headers or VLW files, and a one-click Wokwi test sketch. It even mirrors TFT_eSPI’s quirks so what you see is what you ship. Go make your UI look 2026, not 1986.
12 July 2026

Every Espressif Module in One Place

Picking the right Espressif module means juggling datasheets, pinout diagrams and a dozen browser tabs. I've built a site that does the juggling for you: every module in one place, with searchable specs, colour-coded pinouts, interactive 3D models and side-by-side comparisons. It's free, community-maintained and live now at www.atomic14.com/esp32.
09 June 2026

Did I Actually Make It Worse?

After swapping the PIR in a cheap night light for a microwave radar module, I had a nagging suspicion I'd traded sensitivity for battery life. So I hooked both versions up to a Nordic Power Profiler Kit II and measured. The original sips 72 ”A on average thanks to a clever sleep-and-poke trick. My radar mod sits at a much chunkier 2.8 mA. On the stock 350 mAh cell that’d be days, not months, but with a 2000 mAh upgrade it claws back to about a month between charges, which I can live with.
17 May 2026

ESP-IDF v6 in VS Code: Blink (and debug) on the ESP32-S3

I finally crawled out of the v5.x cave, installed ESP-IDF v6.0.1 with the VS Code extension, spun up the Blink example on an ESP32-S3, fixed a finicky flash by switching to UART, then used menuconfig to set the LED pin, bump the CPU to 240 MHz, use the full 16 MB flash, and enable 8 MB PSRAM. Wrapped it up with proper USB JTAG debugging in VS Code. If you’ve been putting off the IDF, v6 in VS Code is a super-smooth on-ramp.
10 May 2026

Hacking a Cheap PIR Night Light Into Something Actually Useful

Sick of flaky PIR night lights with laughable range and timeouts, I cracked one open, reverse‑engineered the sanded‑off mystery chip, and swapped the PIR for an RC‑WL0516 microwave radar. I added an LDR, bumped the timeout with a cap, drove the LEDs via a MOSFET and resistor, and upgraded the cell to 820 mAh—all neatly tucked back into the original shell. Result: way better sensitivity, sensible timeout, and battery life that should finally match the hype. It works. Now to do the rest of them.
11 April 2026

I learned to solve a Rubik's cube and it was incredibly disappointing

I tried to learn the Rubik’s cube and got bored of rote algorithms, which nudged me toward a GPS-to-map analogy that mirrors the junior-to-senior engineer journey: from following instructions, to pattern matching, to real understanding. Coding agents crush the first two levels, but they still lack taste and judgment—the difference between code that works and code that works well. I may never be a speed cuber, but with agents, I might just become a speed coder.
05 April 2026

Why Won't My Board Reset?

One of my ESP32 dev boards refused to reset, even though the schematic, layout, and solder joints all checked out. Continuity was dead across the reset switch, reflow didn’t help, and under the scope it looked fine—until I realized the switch was packed with flux. A soak in IPA cleaned it out and the reset worked instantly. Moral of the story: sometimes the fix really is more alcohol.
04 April 2026

Is SOT666 Really Standard?

I chased down QA issues on my ESP32 rainbow boards and found the culprit: a USBLC6 in “SOT666” that didn’t match KiCad’s SOT666 footprint. Turns out SOT666 isn’t really standard—Nexperia, ST, and Diodes all suggest different land patterns. I built a custom footprint in KiCad straight from ST’s datasheet and updated the PCB. Moral of the story: don’t trust package names—trust the datasheet.
15 March 2026

MAX30102 $3 Heart Rate Monitor

One of those AliExpress impulse buys finally earned its keep: I paired an ESP32-C3 with a MAX30102 and a tiny OLED to build a pocket pulse oximeter. A bit of I2C wiring, a ring-buffered sampler, and the MAX30102 HR/SpO2 algorithm later, the onboard LED is thumping along with my heartbeat and the readings match a commercial unit (~70 BPM, 99% SpO2). It’s a little finicky about finger placement, but for a few bucks it works brilliantly.
15 March 2026

I Made My ESP32-S3 Faster by Optimizing for SIZE — Not Speed

I tuned a hot path on an ESP32-S3 and found the counter-intuitive winner: optimizing for size (-Os) beat optimizing for speed (-O2). On this chip, flash latency and instruction cache behavior dominate—tighter code stays in cache, misses less, and runs faster. Bumping the CPU to 240 MHz, switching flash to QIO, and maxing caches helped too, but -Os still edged out -O2. As always, benchmark your own workload—yours might differ.
06 March 2026

Watching LLMs Think

I learned early in my almost-PhD: don’t watch the program run. Staring at loss values—or an agent’s “Thinking
”—feels like work, but it isn’t. Kick off the job, step away, and use your brain for the human stuff.
19 February 2026

ESP32-C3 0.42 OLED

Picked up a stack of ESP32-C3 + 0.42" SSD1306 modules and followed an existing guide, but I wasn’t keen on the 128x64-with-offset bodge. I dug into U8g2 and created a proper 72x40 SSD1306 constructor so drawing uses native coordinates. Cleaner code, same tiny display, job done.
16 February 2026

Turning an ESP32 into a Thermal USB Webcam

Last time I faked a webcam on an ESP32; this time I built a real one. The ESP32-S3’s native USB + UVC with MJPEG makes a normal camera dead simple—grab JPEG frames and stream. The fun bit is turning an MLX90640 (32×24 thermal) into a proper USB camera: read over I2C, color-map, scale up to 320×240 (nearest or bilinear), JPEG encode, and stream—works in any camera app, no drivers. Bonus lesson: if an I2C scan finds nothing, stop blaming software; mine was a bad 3.3 V regulator solder joint.
15 February 2026

Pong Cam - My ESP32S3 Thinks It's a WebCam!

I turned an ESP32-S3 into a plug-and-play USB webcam—with no camera attached. The ESP32 generates its own frames, encodes them as JPEGs, and streams them over UVC as MJPEG. I ramp it up from a static BBC test card, to animated GIF playback, and finally a fully playable Pong running at a solid 30 FPS. Under the hood: Espressif’s UVC device component (TinyUSB), Bulk mode for stability, AnimatedGIF for decoding, and esp_new_jpeg for fast JPEG encoding (~21–23 ms/frame). It’s a fun proof that the S3 can be a real-time “display” straight into your PC.
01 February 2026
← Older posts Page 1 of 11
Subscribe!
All content copyright Chris Greening © 2026 • All rights reserved.
ESP32 module database • Bench gear database

This website uses cookies to enhance your browsing experience and analyze site traffic.