A CH32V003 Toolchain — If You Can Get One To Try It On

We’re in an exciting time for cheap microcontrollers, as with both the rise of RISC-V and the split between ARM and its Chinese subsidiary, a heap of super-cheap and very capable parts are coming to market. Sometimes these cheap chips come with the catch of being difficult to program though, but for one of them the ever-dependable [CNLohr] has brought together his own open-source toolchain. The part in question is the WCH CH32V003, which is a ten-cent RISC-V part that has an impressive array of capabilities. As always though, there’s a snag, in that we’re also told that while supplies are improving this part can be hard to find. The repository is ready for when you can get them again though, and currently also contains some demo work including addressable LED driver code.

As an alternative there’s a comparable and slightly cheaper ARM-based part, the Puya PY32. It’s reckoned to be the cheapest of the flash-based microcontrollers, and like the WCH part is bearing down on the crop of one-time-programmable chips such as the famous and considerably less powerful 3-cent Padauk. This end of the market is certainly heating up a little, and from our point of view this can only mean some exciting projects ahead.

Wi-Fi Sensor For Rapid Prototyping

There might seem like a wide gulf between the rapid prototyping of a project and learning a completely new electronics platform, but with the right set of tools, these two tasks can go hand-in-hand. That was at least the goal with this particular build, which seeks to use a no-soldering method of assembling electronics projects and keeping code to a minimum, while still maintaining a platform that is useful for a wide variety of projects.

As a demonstration, this specific project is a simple Wi-Fi connected temperature monitoring station. Based around an ESP32 and using a DS18B20 digital temperature sensor, the components all attach to a back plate installed in a waterproof enclosure and are wired together with screw-type terminal breakout boards to avoid the need for soldering. The software suite is similarly easy to set up, revolving around the use of Tasmota and ESPHome, which means no direct programming — although there will need to be some configuration of these tools.

With the included small display, this build makes a very capable, simple, and quick temperature monitor. But this isn’t so much a build about monitoring temperature but about building and prototyping quickly without the need for specialized tools and programming. There is something to be said for having access to a suite of rapid prototyping tools for projects as well, though.

Audio Playback Toy For DSP Adventures

The declining costs of single-board computers has made serious computing power available for even the most trivial of tasks. It’s easy enough to slap a Raspberry Pi onto almost anything for nearly the same cost as a powerful 32-bit microcontroller platform, but this takes some of the fun out of projects for a few of us. Looking to get into the weeds can be a challenge as well, as [Michal Zalewski] demonstrates in this audio playback device he built from a simple 8-bit microcontroller.

The small toy takes audio input from a microphone through an op-amp and feeds this signal to an ADC within the AVR128DA28 microcontroller. The data is then stored on a separate memory chip ready to be played back through another op-amp paired with a speaker. This is where being familiar with the inner workings of the microcontroller comes in handy. By manipulating the interrupt routines in specific ways, the audio stored in memory can be played back at various speeds.

[Michal] intended this build to be a toy for one of his younger relatives, and for the price of a few ICs and buttons it does a pretty good job of turning a regular voice into a chipmunk voice like some commercial children’s toys some of us might remember. If the design aesthetics of this gadget look familiar, you may be thinking of his minimalist gaming device which we recently featured.

A wooden box sits on a darker wooden table. The box has a red, glowing number 8 on it.

Ambient Display Tells You If Borealis Is Coming To Town

For those times when you’d rather not get sucked down another internet rabbit hole when you really just wanted the weather, an ambient display can be great. [AlexanderK106] built a simple ambient display to know the probability the Northern Lights would visit his town.

Starting with a NodeMCU featuring the ESP8266, [AlexanderK106] walks us through a beginner-friendly tutorial on how to do everything from configure the Arduino IDE, the basics of using a breadboard. finding a data source and parsing it, and finally sticking everything into an enclosure.

The 7-segment display is taped and set into the back of the 1/4″ pine with enough brightness to shine through the additional layer of veneer on top. The display is set to show one digit and then the next before a three second repeat. A second display would probably make this easier to use day-to-day, but we appreciate him keeping it simple for this tutorial.

Looking for more ambient displays? Checkout the Tempescope or this clock that lets you feel the temperature outside!

A grid of 5 3D Printed projects with ESP-32 microcontroller boards

ESP32 Projects From Northwestern University’s Embedded Electronics Class

Northwestern University’s Embedded Electronics Class delivered a bumper crop of ESP-32 projects this year. The student teams recorded their progress on hackaday.io with project descriptions, logs, BOMs, diagrams, photos, and videos to share with other makers. While all utilized the web connection that the ESP32 offers some teams chose to use ESP32 Cams to incorporate photos, video, and computer vision. We love the variety of projects the teams created, some customized versions of consumer products and others new types of smart-devices. Continue reading “ESP32 Projects From Northwestern University’s Embedded Electronics Class”

Lisp Runs This Microcontroller Pendant

As a programming language, Lisp has been around longer than any other active language except for Fortran. To anyone who regularly uses it, it’s easy to see why: the language allows for new syntax and macros to be created fluidly, which makes it easy to adapt it to new situations, like running it on a modern Atmel microcontroller to control the LEDs on this star pendant.

The pendant has simple enough hardware — six LEDs arranged around the points of the star, all being driven by a small ATtiny3227 operating from a coin cell battery. This isn’t especially spectacular on it’s own, but this particular microcontroller is running an integer version of a custom-built Lisp interpreter called uLisp. The project’s creator did this simply because of the whimsy involved in running a high-level programming language on one of the smallest microcontrollers around that would actually support the limited functionality of this version of Lisp. This implementation does stretch the memory and processing capabilities of the microcontroller quite a bit, but with some concessions, it’s able to run everything without issue.

As far as this project goes, it’s impressive if for nothing other than the ‘I climbed the mountain because it was there’ attitude. We appreciate all kinds of projects in that same vein, like this Arduino competitor which supports a programming language with only eight commands, or this drone which can carry a human.

ESP8266 Web Server Saves 60% Power With A 1 Ms Delay

Arduino has a library for quickly and easily setting up a simple web server on an ESP8622-based board, and [Tomaž] found that power consumption on an ESP-01 can be reduced a considerable amount by simply inserting a 1 ms delay in the right place. The reason this works isn’t because of some strange bug or oddball feature — it’s really just a side effect of how the hardware operates under the hood.

[Tomaž] uses the “hello world” example from ESP8266WebServer to explain. In it, the main loop essentially consists of calling server.handleClient() forever. That process checks for incoming HTTP connections, handles them, sends responses, exits — and then does it all over again. A simple web server like this one spends most of its time waiting.

A far more efficient way to handle things would be to launch server.handleClient() only when an incoming network connection calls for it, and put the hardware to sleep whenever that is not happening. However, that level of control just isn’t possible in the context of the Arduino’s ESP8266WebServer library.

So what’s to be done? The next best thing turns out to be a simple delay(1) statement right after each server.handleClient() call in the main loop.

Why does this work? Adding delay(1) actually causes the CPU to spend the vast majority of its time in that one millisecond loop. And counting microseconds turns out to be a far less demanding task, power-wise, than checking for incoming network requests about a hundred thousand times per second. In [Tomaž]’s tests, that one millisecond delay reduced idle power consumption at 3.3 V from roughly 230 mW to around 70 mW — about 60% — while only delaying the web server’s response times by 6-8 milliseconds.

For simple web server applications, this is is for sure a good trick to keep in mind. There are also much more advanced techniques for saving power on ESP8266-based boards; from boards that barely sip a single microamp while sleeping, to coin-cell powered boards that go so far as to modify the TCP/IP stack to help squeeze every bit of power savings possible.