An EInk, ESP32-based Game Boy

This is one of those projects that was both inspired and made possible by the absolute embarrassment of dev boards available to the modern hacker. In this case, the dev board was the M5Stack PaperS3, which as the name implies combines an ESP32-S3 with an e-ink panel. [Wenting Zhang] picked one up and was immediately inspired to try and make an e-ink Game Boy.

The M5Stack PaperS3 made this project possible by exposing the display with row/column control — parallel, some would call it, as opposed to the usual serial interface of SPI. That allowed [Wenting] to work some of the same e-ink magic he perfected on his Modos monitors to allow partial refresh at up to 60 Hz. That the ESP32-S3 is capable of emulating a Game Boy while driving the screen should surprise no one, since it can emulate an MSX while outputting VGA or even Windows 95 on a 386. In this case, he’s basing the actual Game Boy emulation on Crank Boy.

Of course the e-ink screen on the M5Stack is far larger and has a much higher resolution than what the Game Boy shipped with, which lets him implement touch controls and scale the image up 3X so he can fake a couple of shades of grayscale while actually outputting black and white. Even better, if he was actually playing this thing on the regular, once the high-refresh portion of the screen starts to wear out, he can flip the orientation and keep gaming on the virtually-unrefreshed control portion of the screen — doubling the lifetime of the system, something many of you raised as a concern when we last looked at a his e-ink monitor project.

The only real shortcoming of this hack is the sound. With one-bit beeps coming out of the M5Stack buzzer, it’s got nothing on Nintendo’s hardware. Of course, that’s partially down to using the hardware as-is. With the addition of an I2S sound chip like the one used in the MOD player project we featured recently, you’d just need to squeeze out enough processor cycles to make this sound as good as it looks.

Continue reading “An EInk, ESP32-based Game Boy”

Reflective LCD Slabtop Terminal Runs Homebrewed Solar OS

Have you ever spotted something in a catalog or on a website and just known you had to build a project around that one part? That’s how [nilseuropa] felt about the Waveshare ESP32-S3-RLCD-4.2, which — as you might guess from the name — pairs an ESP32-S3 with a reflective LCD. With a screen reminiscent of a palmtop of yore, [nilseuropa] wanted a personal device, and needed something to run on it. That’s where Solar OS comes in.

Physically he’s paired the Waveshare board with a mini keyboard and put them together in a handsome 3D printed case with a battery. The slabtop form-factor was more for ease-of-creation than any preference; in the project’s reddit thread [nils] is reaching out for help making something cooler, possibly of the palmtop form-factor. He also describes some of the thinking behind his operating system.

You had us at “terminal”.

He’s not starting entirely from scratch: it’s based on FreeRTOS and the ESP-IDE toolset. Right now all applications are built with the OS into a single binary, while the SD card on the Waveshare board handles persistent storage. The interface is pure text, with all applications launched via shell commands. That doesn’t mean you have to go back to your PC to add anything, however.

The system is user-programmable, with Python and Lua scripting as “first class citizens”, having access to the hardware through the Solar OS APIs. As for the applications built into the firmware, it looks like along with the serial terminal, you get quite a lot: an orthodox file manager à la Norton Commander, networking tools that include a web browser and chat client, MP3 player, image viewer, text editor, games, and more.

While they are obviously pretty niche projects, we do appreciate that there’s a growing collection of homebrew operating systems that you can run on your bespoke computing device.

Deeply Optimized MSX Emulation On ESP32-S3 With VGA Output

ESP32-S3 board with VGA and audio output during development. (Credit: Ivan Svarkovsky)
ESP32-S3 board with VGA and audio output during development. (Credit: Ivan Svarkovsky)

The ESP32-S3 is by many metrics quite the powerful little computer, which has led to it being used even for things like emulating retro consoles and similar. Here [Ivan Svarkovsky]’s S3-MSX-PC project pushes the envelope by taking the multi-system Retro-Go project’s MSX component and optimizing it for the ESP32-S3’s Xtensa Lx7 CPU cores.

The project involves an ESP32-S3 as the core, requiring at least 8 MB of PSRAM (N16R8 configuration) to match the tested configuration. Any software is loaded into PSRAM before it’s executed, with the MSX1, MSX2 and MSX2+ supported.

For audio you have to wire up your own PDM filters to connect to the two GPIO pins that are used for audio output, while VGA output is handled by a basic 2-bit R-2R RGB222 DAC. For input devices you can use any USB keyboard, while software is added via the web interface or directly onto an SD card.

The Technical Deep Dive section goes into more detail as to what exactly got changed – with the blessing of the fMSX author – in the original fMSX core, such as targeting the Lx7 core’s cache dimensions and optimizing hot paths to avoid bottlenecks. Memory accesses were aligned for Xtensa and moving certain data from Flash to RAM was another change, along with the prevention of pipeline flushing due to certain branching decisions.

Considering that MSX specifications are based on a Z80 core, it’s not so crazy that one of these ESP32-S3 MCUs can effectively emulate them. The Retro-Go project itself claims to cover a whole swath of Nintendo and Sega consoles, as well as others, making it almost too easy to do some retrogaming without even having to drag out a Raspberry Pi SBC or so.

The turntable in question, or at least the same model.

Vintage Turntable Gets Brain Transplant And Home Assistant Integration

When [Marsupial] picked up a vintage Sansusi P-L45 turntable, he figured it would be an easy fix: a few capacitors, a belt or two, and maybe a new cartridge, the usual. But it turned out the electronics were fried, which set the stage for an upgrade that turned it into what may be the world’s only ESP32-driven, Home Assistant integrated, linear tracking turntable.

That last bit, the linear tracking, is why the turntable originally had a microprocessor in the first place: rather than an arm that pivots along the groove naturally, fancy turntables towards the end of the golden era of vinyl slid the needle along a linear track at a variable speed to follow the spiral groove on the record. You can see that in action in the demo video below, though it’s of a working version owned by [BFinks].

The fancy linear mechanism required electronic control to match the speed to the RPM, and in the example of Sansusi’s P-L45, that was provided by an NEC microcontroller on a daughter-board labelled “F4992 CPU”. CPU is a grandiose title, perhaps, but that’s irrelevant since the chip on the board was deader than disco.

That meant [Marsupial] had some reverse engineering to do — figuring out exactly what that chip did to drive this board, in order to replicate its behavior on an ESP32-S3. Luckily the golden era of vinyl correlated with the golden era of service manuals, and the manuals are still available, so [Marsupial] had a big leg up on that. After making the turntable work like stock, what else to do with the extra capability of the ESP32 than plug it into HA and make it really automatic?

Of course it wasn’t quite that easy: a new daughter-board was created that needed to do level shifting to the ESP32’s modern 3.3 V logic as well as hardware debounce on some inputs. The whole saga is very well documented on [Marsupial]’s blog WeAreAllGeeks. The link here takes you to the overview, but he’s got a lot more info on other pages — and of course links to the firmware and PCB design if you happen to have a Sansusi turntable in need of a brain transplant.

Vinyl lovers will appreciate this project much more than the last ESP32 “turntable” we featured, which was anything but. If you want to get into records but don’t have a turntable, you can always make your own.

Continue reading “Vintage Turntable Gets Brain Transplant And Home Assistant Integration”

A tiny, rectangular, 3D-printed box with an e-paper display and a fortune cookie design beneath it. The fortune reads: "Your next firmware update will both solve and create problems."

E-Fortune Cookie Will Humble, But Never Crumble

Will your next project be a success? Only time will tell, but if you build [gokux]’s tiny ESP32 fortune cookie, we predict that, at the very least, there won’t be any crumbs involved.

After briefly entertaining the idea of shoving an ESP32 in a standard fortune cookie, [gokux] thought better of it and came up with this instead. Once shaken, this small gadget displays a fortune on its e-paper screen. It can store over 3,000 fortunes and works entirely offline, so you’re never without an oracle.

Inside you’ll find a Seeed Xiao ESP32-S3 Plus and a matching e-paper display board. [gokux] is detecting the shakes with an MPU-6050 accelerometer, and powers everything with a small Li-Po pouch.

If you tire of the fortunes that shake out, the small buttons on the left side will get you into the other modes, which are a dice roller and a coin flipper. Again, you just shake the thing until you get what you want. Be sure to check it out in the video after the break.

Want to know how an MPU-6050 works, and what it looks like under the hood? Yeah, we thought so.

Continue reading “E-Fortune Cookie Will Humble, But Never Crumble”

A render of the moon, on a circular display.

Put The Moon On Your Desk

Most people take the Moon for granted, not considering its slow cycle where the sun gradually illuminates different parts of it. A recent project from [Karsten Mueller] helps you keep our nearest celestial neighbor in mind by putting a tiny version on your desk. (German)

The device itself is made with a circular display, an ESP32-S3, and a simple 3D printed case. But the interesting part is the software — it’s not just a moon phase display, it actually takes your local time, latitude and longitude into account. The resulting image is an approximation of what the moon looks like if you were to look at it, even if you wouldn’t actually be able to see it, such as when it is obscured by the Earth or barely visible during the daylight sky. Initially the project actually used a photograph of the Moon that [Karsten] personally snapped, but there’s also an option to pull the imagery from NASA.

The original write-up is in German, but there’s also an English page for the project on Hackaday.io, and the source is available on GitHub if you’d like to put one together yourself.

A black screen with green text is shown. The green text logs events from a VPN gateway.

Running A VPN Gateway On An ESP32

If you need a VPN gateway to access your home network, the fastest and most cost-effective way is probably by using a Raspberry Pi Zero. But in [Samir Makwana]’s view, an ESP32-S3 is just as capable for moderate use, and in some respects even superior.

This was possible thanks to the MicroLink project, which is a full implementation of a Tailscale client for the ESP32 family. In some ways the ESP32 worked better than a Raspberry Pi: it boots in two seconds rather than thirty, draws 0.5 Watts rather than 1.5, and there’s no chance of it failing due to a corrupted SD card. Compared to a Raspberry Pi, however, which can be set up as a Tailscale client in a few minutes, this took several hours to get running. The biggest issue was making sure that there was enough memory available for TLS handshakes, which was solved by enabling the ESP32’s PSRAM.

Once the VPN client is running, the ESP32 can be used as an SSH jump machine to access other devices on the home network, without needing to expose those machines to the open Internet. The ESP32 also hosts an HTTP server which can send a wake-on-LAN magic packet to another device on the local network, letting unused devices sleep without impairing their availability.

The ESP32 doesn’t provide much bandwidth — streaming video would cause issues — but it works well enough for lightweight applications. If you’re wanting to stream video from an ESP32, though, it is technically possible.