Daily tips and tricks from the experts at Adafruit!
View this email in your browser

View this email in your browser. Warning: Flashing Imagery

Welcome to the latest Python on Microcontrollers newsletter! Knowing how to catch when your program isn’t doing what you want can be critical. Fortunately Python has some good ways to detect such. And languages like CircuitPython can help, even when your project is remote. We strive to find all the week’s best news. You can help: send in your news, projects, etc. to cpnews(at)adafruit(dot)com for consideration. Happy Valentine’s Day! – Anne Barela, Ed.

We’re on Discord, Twitter, and for past newsletters – view them all here. If you’re reading this on the web, subscribe here. Here’s the news this week:

A Submarine Hunting Game With CircuitPython

Submarine Hunting Game

Submarine HuntingGame

For Global Game Jam, Piotr Gaczkowski and his team built a 3D game using a mix of 2D and 3D assets found in their Hackerspace, garages, local trash bins, etc., the perfect embodiment of “one man’s trash is another man’s treasure.” The protagonist is the captain of a nuclear submarine. The vessel is controlled using a discarded washing machine front panel. An oscilloscope acts as a sonar and shows incoming enemies. A 128×64 LED matrix panel acts as a periscope. And there’s lots of cardboard for the hull.

Gameplay consists of several mini games played using the washing machine panel, a PiDP11 (Raspberry Pi powered) computer, and other items. A Raspberry Pi acts as the central game “server” and communicates with other devices using a serial protocol. The controllers are a mix of Raspberry Pi Pico and Arduino Nano. Code was written in C, C++ and CircuitPython – X.

How to Fail with CircuitPython

Code can fail as can hardware. Learning how it might fail and what to do can be important, especially if a device running ones code is remote. Adafruit Playground author fede2 looks at how CircuitPython detects failures and how to devise a programmatic method for recovery – Adafruit Playground.

PCWorld Reviews the Raspberry Pi 5

PCWorld Reviews the Raspberry Pi 5

PCWorld reviewed the Raspberry Pi 5 – PCWorld and Adafruit Blog.

“With Model 5 and the new Raspberry Pi OS, the Raspberry Pi Foundation does almost everything right: even demanding program such as Firefox, Chromium, and VS Code run absolutely smoothly on the desktop. Working is simply fun. In normal use, the mini computer is still silent. If a fan is installed, it only starts during longer CPU-intensive work. The Pi 5 is ideal for server use (NAS), as a media center, for home automation, or as a desktop. The biggest disadvantage is its price. While an impulse purchase for experimentation was still conceivable with earlier models, a clear purpose is now required to justify the cost.”

Python Software Foundation News: New Versions of Python, Security BOMs

Python Software Foundation News

Python 3.12.2 and 3.11.8 are now available: Python 3.12.2 and 3.11.8 are now available. In addition to all the usual bug fixes, these releases contain a small security fix – Python Insider Blog.

Software Bill-of-Materials documents are now available for CPython: with the release of CPython 3.12.2, the next step of the Python Software Foundation vulnerability management strategy is now available in the form of Software Bill-of-Materials (SBOM) documents for CPython source releases – Python Foundation Blog.

The Five Best Raspberry Pi Alternatives in 2024

The 5 Best Raspberry Pi Alternatives in 2024

Digital Trends looks at the single board computer market and picks five that they believe can be worthy alternatives to Raspberry Pi – DigitalTrends and Adafruit Blog.

“While there are a ton of competitors out there, we’ve picked our five favorites and listed them below, as well as going into their specs and some of their best use cases. Of course, you don’t have to use them in the way we suggest, which is one of the great things about SBCs like this: you can use them in pretty much any way you choose.”

Raspberry Pi Crystal Sculpture

Raspberry Pi Crystal Sculpture

Raspberry Pi Maker in Residence Toby Roberts made a grid of 24×24 NeoPixel LEDs each with a crystal in front of it. Using a Raspberry Pi Touch Display, the grid can display multi-colored artwork using a Raspberry Pi 4 with Python – Raspberry Pi News.

Apple Just Launched a New Open Source Programming Language

Apple Just Launched a New Open Source Programming Language

Apple has released Pkl, a new open source ‘embeddable configuration language’, hoping to take the stress out of ‘small to large, simple to complex, ad-hoc to repetitive configuration tasks’. Launched on February 1 2024 into version 0.25, the tech giant’s team have provided a ‘quick tour’ of the language in a text post on the Pkl documentation websiteTechradar Pro.

“Pkl is designed around a key value structure, in a manner akin to JSON, rather than imperative instructions like many other traditional programming languages, Apple has designed Pkl to specialise in configuration, along with a few neat quality-of-life features to turn heads. Indeed, Pkl supports JSON, XML, and YAML property lists at launch to generate static configuration files.”

This Week’s Python Streams

Python Streams

Python on Hardware is all about building a cooperative ecosphere which allows contributions to be valued and to grow knowledge. Below are the streams within the last week focusing on the community.

CircuitPython Deep Dive Stream

Deep Dive

Last Friday, Scott streamed work on ESP-IDF 5.0 updates.

You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.

CircuitPython Parsec

CircuitPython Parsec

John Park’s CircuitPython Parsec this week is on Fun with Lists – Adafruit Blog and YouTube.

Catch all the episodes in the YouTube playlist.

CircuitPython Weekly Meeting

CircuitPython Weekly Meeting for February 5, 2024 (notes) on YouTube.

Project of the Week: Oliver Hagen’s DivingBoard

Oliver Hagen's DivingBoard

DivingBoard is a homemade MIDI controller aiming to solve the lack of parameter accessibility on the Roland JD-Xi synthesiser. It differs from other solutions – customizability and potential ease-of-use are greater, and general use with a range of synthesisers is possible, rather than just with the JD-Xi. The project uses an Arduino Nano running Arduino and a Raspberry Pi Zero 2 W running Python – hackster.io, Project and YouTube.

Popular Last Week

What was the most popular, most clicked link, in last week’s newsletter? Espressif Systems
SoC Portfolio Summary Graphic

New Notes from Adafruit Playground

Adafruit Playground is a new place for the community to post their projects and other making tips/tricks/techniques. Ad-free, it’s an easy way to publish your work in a safe space for free.

Hiking Masterpiece

A Badger Mountain themed art piece using Feather RP2040 and CircuitPython – Adafruit Playground.

Spock on a Chip!

Spock on a Chip will blink LEDs on an Adafruit NeoTrinkey with CircuitPython then print a Spock quote when touched – Adafruit Playground.

Teach your NeoTrinkey Morse code!

Teach your NeoTrinkey Morse code with CircuitPython – Adafruit Playground.

Doggy Buttons!

Signalling buttons for your dog with Raspberry Pi and Python – Adafruit Playground.

News from around the web

CircuitPython Robot

Scott achieves full remote control of his robot via WiFi using Raspberry Pi Pico W and CircuitPython – X and GitHub.

Programming GreenPAK (SLG46826) with CircuitPython

Programming Renesas GreenPAK chips with an RP2040 and CircuitPython – elchika (Japanese).

Low cost C64-style thermometer

An ESP8266 MicroPython project providing a thermometer that is also a tribute to the old 80s computing era: the graphics is reminiscent of the Commodore 64, and the backgrounds are extracted from actual games screenshots – GitHub via X.

Pet Feeder

An automated pet feeder using 3D printed parts, Raspberry Pi Pico and MicroPython – Raspberry Pi News and Instagram.

AQI Quality Monitor v2.0

Air quality monitor v2.0 (Pico W) web server with MicroPython – hackster.io and YouTube.

Using Speech Recognition, PTT, and a Large Action Model on a Raspberry Pi

Using speech recognition, Push-to-Talk (PTT), and an AI large action model on a Raspberry Pi in Python – Towards Data Science.

Visual illusion

A visual illusion on ESP32-S3/CircuitPython + ST7789/FT6236 capacitive touch display – X and YouTube Short.

Plotting in Thonny

How to plot MicroPython or CircuitPython data in the Thonny editor – electromaker.

Image blitting

Support for image blitting from a file with a PNG conversion tool for the ST77xx display with a pure MicroPython driver – X and GitHub.

Time of Flight distance sensor

Using a VL53L0X (Time of Flight distance sensor) on an ESP32-S3 microcontroller running CircuitPython – YouTube via X.

MicroPython SRAM

Accessing an SRAM chip with an M5Stack and MicroPython – jhalfmoon.com (Japanese).


Hacking USB HID descriptors with MicroPython – Hackaday.

Device Auth Flow with Pimoroni Badger 2040W

Device Auth Flow with Pimoroni Badger 2040W and MicroPython – Twitch and X.

How to Use Python Lambda Functions

How to use Python Lambda functions – Real Python.

Text Wrapping

Everything you can do with the Python textwrap module – Towards Data Science.


Arduino IDE 2.3 released

Arduino IDE 2.3 has just been released with a range of bug fixes and improvements, but the main change is that the debug feature is not experimental anymore and is now considered stable – CNX Software.

LicheeRV Nano

LicheeRV Nano is a low-cost SG2002 RISC-V and Arm camera and display board with optional WiFi 6 and/or Ethernet running Linux – CNX Software.

Waveshare's PoE HAT for Raspberry Pi 5

Waveshare’s PoE HAT is the first for Raspberry Pi 5 – Jeff Geerling and YouTube.

New Boards Supported by CircuitPython

The number of supported microcontrollers and Single Board Computers (SBC) grows every week. This section outlines which boards have been included in CircuitPython or added to CircuitPython.org.

This week, there were two new boards added:

Note: For non-Adafruit boards, please use the support forums of the board manufacturer for assistance, as Adafruit does not have the hardware to assist in troubleshooting.

Looking to add a new board to CircuitPython? It’s highly encouraged! Adafruit has four guides to help you do so:

New Learn Guides

New Learn Guides

DIY IoT Doorbell Camera with MEMENTO from Brent Rubell

Adafruit UPDI Friend from Liz Clark

CircuitPython Libraries

CircuitPython Libraries

The CircuitPython library numbers are continually increasing, while existing ones continue to be updated. Here we provide library numbers and updates!

To get the latest Adafruit libraries, download the Adafruit CircuitPython Library Bundle. To get the latest community contributed libraries, download the CircuitPython Community Bundle.

If you’d like to contribute to the CircuitPython project on the Python side of things, the libraries are a great place to start. Check out the CircuitPython.org Contributing page. If you’re interested in reviewing, check out Open Pull Requests. If you’d like to contribute code or documentation, check out Open Issues. We have a guide on contributing to CircuitPython with Git and GitHub, and you can find us in the #help-with-circuitpython and #circuitpython-dev channels on the Adafruit Discord.

You can check out this list of all the Adafruit CircuitPython libraries and drivers available.

The current number of CircuitPython libraries is 476!

Updated Libraries

Here’s this week’s updated CircuitPython libraries:

Library PyPI Weekly Download Stats

Total Library Stats

  • 188620 PyPI downloads over 324 libraries

Top 10 Libraries by PyPI Downloads

  • Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 9226
  • Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 8792
  • Adafruit CircuitPython Register (adafruit-circuitpython-register): 2933
  • Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1801
  • Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1645
  • Adafruit CircuitPython HTTPServer (adafruit-circuitpython-httpserver): 1581
  • Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1578
  • Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1507
  • Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1506
  • Adafruit CircuitPython ESP32SPI (adafruit-circuitpython-esp32spi): 1458

What’s the CircuitPython team up to this week?

What is the team up to this week? Let’s check in:


I returned from a short vacation and am now back to working on fixing issues needed for a CircuitPython 9.0.0 release.

I am investigating an unusual problem: on ESP32-S3 only, the first byte received on a busio.UART object can be a stray junk byte with a few consecutive 1’s. A simple fix is just to wait a bit and clear the input buffer when first using the object. But I’d like to understand the problem in more detail before applying such a fix.


Now that I have the PiTFTs up and running, this past week I’ve been focusing on the Snake Eyes Bonnet, which allows driving 2 displays at the same time. While I was able to get the HDMI only version of Pi Eyes running on the Raspberry Pi 5 by converting a bunch of code to Blinka, so far I haven’t had much success with getting two displays running on the bonnet at the same time. In the process of trying different things, I did end up finding and fixing some bugs related to Blinka and the Blinka port of Displayio.


This week I’ve been working on a Text Editor project for the Feather RP2040 with USB Host port. It uses a TFT Display and a USB keyboard to allow editing text files directly on the microcontroller. I also integrated a tool created by a community member that generates device specific board stubs with the stubs that are automatically generated by the core repo.


This week I’ve continued replacing our last few uses of IDF 4 APIs in favor of the IDF 5 versions. Overall, they are working better for us. I’m having to retest the affected classes, including protomatter and then will make a PR. Hopefully I’ll fix some crashes during file system writes that the old code was susceptible to.


This past week I worked on a guide for the Adafruit UPDI Friend. This breakout lets you easily program ATtiny chips like the ones found on the seesaw breakouts. Previously we had instructions for how to build a DIY programmer, but this makes it so that you can have a solderless solution.

I also setup PlatformIO to work on some larger MEMENTO and Qualia S3 projects. Brent wrote a great page on how to setup PlatformIO in the MEMENTO product guide. I had never used PlatformIO before and I was able to get up and running very quickly by following along with his steps.

Upcoming Events

MicroPython Meetup

The next MicroPython Meetup in Melbourne will be on February 28th – Meetup.

PyCascades 2024

PyCascades 2024 is back in Seattle, Washington, USA and online, April 5-8th at the University of Washington, Kane Hall – PyCascades.

PyCon US 2024

PyCon US 2024 launches May 15-23, 2024 in Pittsburgh, Pennsylvania US – PyCon US.

EuroPython 2024

EuroPython is the oldest and longest running volunteer-led Python programming conference on the planet. This year it will be held July 8-14 in Prague. Call for Proposals, the Mentorship Programme, and the Financial Aid Programme are out this month – EuroPython 2024.

Send Your Events In

If you know of virtual events or upcoming events, please let us know via email to cpnews(at)adafruit(dot)com.

Latest Releases

CircuitPython’s stable release is 8.2.9 and its unstable release is 9.0.0 beta 0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.

20240209 is the latest Adafruit CircuitPython library bundle.

20240131 is the latest CircuitPython Community library bundle.

v1.22.0 is the latest MicroPython release. Documentation for it is here.

3.12.2 is the latest Python release. The latest pre-release version is 3.13.0a3.

3,804 Stars Like CircuitPython? Star it on GitHub!

Call for Help – Translating CircuitPython is now easier than ever

CircuitPython translation statistics on weblate

One important feature of CircuitPython is translated control and error messages. With the help of fellow open source project Weblate, we’re making it even easier to add or improve translations.

Sign in with an existing account such as GitHub, Google or Facebook and start contributing through a simple web interface. No forks or pull requests needed! As always, if you run into trouble join us on Discord, we’re here to help.

38,666 Thanks

38,666 THANKS

Adafruit Discord

The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 38,666 humans – thank you! Adafruit believes Discord offers a unique way for Python on hardware folks to connect. Join today at https://adafru.it/discord.

ICYMI – In case you missed it


Python on hardware is the Adafruit Python video-newsletter-podcast! The news comes from the Python community, Discord, Adafruit communities and more and is broadcast on ASK an ENGINEER Wednesdays. The complete Python on Hardware weekly videocast playlist is here. The video podcast is on iTunes, YouTube, Instagram Reels), and XML.

The weekly community chat on Adafruit Discord server CircuitPython channel – Audio / Podcast edition – Audio from the Discord chat space for CircuitPython, meetings are usually Mondays at 2pm ET, this is the audio version on iTunes, Pocket Casts, Spotify, and XML feed.


The CircuitPython Weekly Newsletter is a CircuitPython community-run newsletter emailed every Monday. The complete archives are here. It highlights the latest CircuitPython related news from around the web including Python and MicroPython developments. To contribute, edit next week’s draft on GitHub and submit a pull request with the changes. You may also tag your information on Twitter with #CircuitPython.

Join the Adafruit Discord or post to the forum if you have questions.