Xcc700: Self-Hosted C Compiler For The ESP32/Xtensa

With two cores at 240 MHz and about 8.5 MB of non-banked RAM if you’re using the right ESP32-S3 version, this MCU seems at least in terms of specifications to be quite the mini PC. Obviously this means that it should be capable of self-hosting its compiler, which is exactly what [Valentyn Danylchuk] did with the xcc700 C compiler project.

Targeting the Xtensa Lx7 ISA of the ESP32-S3, this is a minimal C compiler that outputs relocatable ELF binaries. These binaries can subsequently be run with for example the ESP-IDF-based elf_loader component. Obviously, this is best done on an ESP32 platform that has PSRAM, unless your binary fits within the few hundred kB that’s left after all the housekeeping and communication stacks are loaded.

The xcc700 compiler is currently very minimalistic, omitting more complex loop types as well as long and floating point types, for starters. There’s no optimization of the final code either, but considering that it’s 700 lines of code just for a PoC, there seems to be still plenty of room for improvement.

Virtual Pet Responds To WiFi

When the Tamagotchi first launched all those decades ago, it took the world by storm. It was just a bunch of simple animations on a monochrome LCD, but it had heart, and people responded to that. Modern technology is capable of so much more, so [CiferTech] set out to build a virtual pet that can sniff out WiFi networks.

The build employs an ESP32-S3, perhaps the world’s favorite microcontroller that has WiFi baked right in from the factory. It’s paired with a 240×240 TFT LCD that delivers bright, vivid colors to show the digital pet living inside. Addressable WS2812B LEDs and a simple sound engine provide further feedback on the pet’s status.

The pet has various behaviors coded in, like hunting, exploring, and resting, and moods such as “happy,” “curious,” and “bored.” For a bit of environmental reactivity, [CiferTech] also made the local WiFi environment play a role. Nearby networks can influence the “hunger, happiness, and health” of the pet.

Incidentally, if you’ve ever wondered what made the Tamagotchi tick, we’ve explored that before, too.

Continue reading “Virtual Pet Responds To WiFi”

A circular 3D-printed board is shown, with a roughly star-shaped pattern of white LEDs glowing through the surface. Yellow and green LEDs are also visible through the surface at a few points.

Adding Electronics To A Classic Game

Like many classic board games, Ludo offers its players numerous opportunities to inflict frustration on other players. Despite this, [Viktor Takacs] apparently enjoys it, which motivated him to build a thoroughly modernized, LED-based, WiFi-enabled game board for it (GitHub repository).

The new game board is built inside a stylish 3D-printed enclosure with a thin white front face, under which the 115 LEDs sit. Seven LEDs in the center represent a die, and the rest mark out the track around the board and each user’s home row. Up to six people can play on the board, and different colors of the LEDs along the track represent their tokens’ positions. To prevent light leaks, a black plastic barrier surrounds each LED. Each player has one button to control their pieces, with a combination of long and short presses serving to select one of the possible actions.

The electronics themselves are mounted on seven circuit boards, which were divided into sections to reduce their size and therefore their manufacturing cost. For component placement reasons, [Viktor] used a barrel connector instead of USB, but for more general compatibility also created an adapter from USB-C to a barrel plug. The board is controlled by an ESP32-S3, which hosts a server that can be used to set game rules, configure player colors, save and load games, and view statistics for the game (who rolled the most sixes, who sent other players home most often, etc.).

If you prefer your games a bit more complex, we’ve also seen electronics added to Settlers of Catan. On a rather larger scale, there is also this LED-based board game which invites humans onto the board itself. Continue reading “Adding Electronics To A Classic Game”

Tiny386 On An Espressif ESP32-S3

Some people may remember the joys of trying to boot Linux on an 8-bit AVR microcontroller, which was an absolute exercise in patience. In comparison [He Chunhui]’s Tiny386 emulator running on an ESP32-S3 MCU is positively zippy when it boots and runs Windows 95. The provided video (also embedded below) makes clear that while you can comfortably waddle off to prepare and pour a fresh cup of tea, it’s actually borderline usable.

The source code can be obtained via GitHub, which contains not just the basic emulated 80386 CPU written in C99, but also peripherals borrowed from TinyEMU and QEMU, along with a SeaBIOS ROM. In addition to the Windows 95 demo it’s claimed that Tiny386 should be able to run most 16/32-bit software.

Right now the ESP32-S3 version targets the JC3248W535 board, which is a roughly $30 development board featuring a built-in display with touch screen and an ESP32-S3 module. Although it has a USB-C port, it appears that this one is just for programming and not for the USB peripheral of the ESP32-S3. With the USB OTG peripheral used, one could conceivably make a small 386 system based around an ESP32-S3 that features a USB hub to plug a keyboard, mouse, etc. into.

Considering that the Tiny386 emulator is a very simple and straightforward approach to emulating an early-90s PC, some optimization might enable a pretty zippy general purpose PC for early 90s software. Quite a boost from watching Linux struggle into a command line on an AVR, indeed.

Continue reading “Tiny386 On An Espressif ESP32-S3”

splashflag iot swimming notification

Splashflag: Raising The Flag On A Pool Party

Some things are more fun when there are more folks involved, and enjoying time in the pool is one of those activities. Knowing this, [Bert Wagner] started thinking of ways to best coordinate pool activities with his kids and their neighborhood friends. Out of this came the Splashflag, an IoT device built from the ground up that provides fun pool parties and a great learning experience along the way.

The USB-powered Splashflag is housed in a 3D-printed case, with a simple 2×16 LCD mounted on the front to display the notification. There’s also a small servo mounted to the rear that raises a 3D-printed flag when the notification comes in—drawing your attention to it a bit more than just text alone would. Hidden on the back is also a reset button: a long press factory-resets the device to connect to a different Wi-Fi network, and a quick press clears the notification to return the device to its resting state.

Inside is an ESP32-S3 that drives the servo and display and connects to the Wi-Fi. The ESP32 is set up with a captive portal, easing the device’s connection to a wireless network. The ESP32, once connected, joins an MQTT broker hosted by [Bert Wagner], allowing easy sending of notifications via the web app he made to quickly and easily send out invitations.

Thanks, [Bert Wagner], for sharing the process of building this fun, unique IoT device—be sure to read all the details on his website or check out the code and design files available over on his GitHub. Check out some of our other IoT projects if this project has you interested in making your own.

Continue reading “Splashflag: Raising The Flag On A Pool Party”

Business Card Ouija board

This Ouija Business Card Helps You Speak To Tiny Llamas

Business cards, on the whole, haven’t changed significantly over the past 600-ish years, and arguably are not as important as they used to be, but they are still worth considering as a reminder for someone to contact you. If the format of that card and method of contact stand out as unique and related to your personal or professional interests, you have a winning combination that will cement yourself in the recipient’s memory.

In a case study of “show, don’t tell”, [Binh]’s business card draws on technological and paranormal curiosity, blending affordable, short-run PCB manufacturing and an, LLM or, in this case, a Small Language Model, with a tiny Ouija board. While [Binh] is very much with us in the here and now, and a séance isn’t really an effective way to get a hold of him, the interactive Ouija card gives recipient’s a playful demonstration of his skills.

Continue reading “This Ouija Business Card Helps You Speak To Tiny Llamas”

Picture of front and back of thumb drive enclosure

Jcorp Nomad: ESP32-S3 Offline Media Server In A Thumbdrive

[Jackson Studner] wrote in to let us know about his ESP32-based media server: Jcorp Nomad.

This project uses a ESP32-S3 to create a WiFi hotspot you can connect to from your devices. The hotspot is a captive portal which directs the user to a web-interface comprised of static HTML assets which are in situ with the various media on an attached SD card formatted with a FAT32 file system. The static HTML assets are generated by the media.py Python 3 script when the ESP32 boots.

This project exists because the typical Raspberry Pi media server costs more than an ESP32 does. The ESP32 is smaller too, and demands less power.

According to [Jackson] this ESP32-based solution can support at least four concurrent viewers. The captive portal is implemented with DNS and HTTP services from the ESP32. The firmware is an Arduino project that integrates a bunch of libraries to provide the necessary services. The Jcorp Nomad media template supports Books (in pdf files), Music (in mp3 files), and Movies and Shows (in mp4 files). Also there is a convention for including JPEG files which can represent media in the user-interface.

And the icing on the cake? The project files include STL files so you can 3D print an enclosure. All in all, a very nice hack.