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! The holiday celebrations are in full force this week and everyone is talking about Python on hardware! Certainly Python is an intense area of work within the hardware field – just this week six new boards are listed as CircuitPython compatible. A new CircuitPython 9 alpha release brings more goodies – please kick the tires if you have time between eggnogs/Glühweins . Two second edition books from microcontroller authors are in the pipeline. And everyone’s favorite – a new cheat sheet – has surfaced for Python in EXCEL. Enjoy all the projects featured this week too. Happy Holidays! – 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:

CircuitPython 9.0.0 Alpha 6 Released

CircuitPython 9.0.0 Alpha 6 Released

CircuitPython 9.0.0-alpha.6, an alpha release for 9.0.0, has been released. It has significant known bugs and will have further additions and fixes before the final release of 9.0.0 – Adafruit Blog and GitHub Release Notes.

Notable changes to 9.0.0

  • New split-heap internal dynamic storage mechanism.
  • Merge updates from MicroPython v1.19.1, v1.20.0, and v1.21.0.
  • Espressif: update to ESP-IDF v5.1.2.
  • Reorganize and split displayio. 8.x.x naming structure is available in 9.x.x, but will be removed in 10.0.0.
  • CIRCUITPY drives now mount on Android.
  • Increased file capacity on CIRCUITPY drives <= 128kB.
  • Further USB host support, on i.MX and RP2040.
  • Remove 8.x.x deprecations: displayio.*.show(), I2CPeripheral renamed to I2CTarget.
  • Add jpegio JPEG decoder support.
  • Add repl.py, which runs just before the REPL starts up.
  • Add OrderedDict.move_to_end().
  • Add synthio.Synthesizer.note_state.
  • Add warnings module, similar to what is in CPython.
  • Add locale.getlocale().
  • Add I2S MCLK support on Espressif.
  • Add mDNS TXT record support.
  • Add synthio.Note .loop_start and .loop_end properties.
  • Allow signed amplitude in synthio.

Using GPT on a Xiao ESP32-C3 with CircuitPython

Using GPT on a Xiao ESP32-C3 with CircuitPython

Amit demonstrates running GPT on the smallest microcontroller on hand, and it worked flawlessly! OLED + Xiao ESP32C3 + Circuitpython = a tiny story generator – X.

The Second Editions of Two Favorite Books

Programming the Pico Book Released

Second Edition of Programming the Pico Book Released

Programming the Pico has been updated to a second edition with a new chapter on the Pico W. Programming mainly in MicroPython with a couple of examples in CircuitPython – Simon Monk via X and code examples on GitHub.

Making Embedded Systems is Getting a 2nd Edition Refresh

Making Embedded Systems

Making Embedded Systems, 2nd Edition, by Elecia White will have new chapters about motors, managing networked sensors (IoT), debugging hard faults, and more. It’s scheduled for a March release and can be preordered from booksellers now – LinkedIn.

How to Turbo-Charge Your Raspberry Pi 5 With an NVMe Boot Drive


Turbo-charge your Raspberry Pi 5 with an NVMe flash SSD boot drive. Les Pounder shows how to add the drive to a Pi 5 step by step with the Pineberry Pi PCIe board – Tom’s Hardware.

And other PCIe storage boards are coming to market:

Pimoroni NVMe Base arrives to add M.2 SSDs

The Pimoroni NVMe Base is coming soon to add M.2 SSDs to RasPi 5 – Notebook Check.

Python in EXCEL Cheat Sheet

Python in EXCEL Cheatsheet

It’s amazing that concise “cheat sheets” on how to do something in Python are so popular in this newsletter. The latest to appear on the internet is this interesting aid to using Python in Microsoft EXCEL – X via LinkedIn.

From the Python Software Foundation

Python Software Foundation

The PSF December Newsletter is out and here are some of the highlights – python.org.

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, Tim streamed work on Touchscreen Math and DisplayIO.

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 asyncioAdafruit Blog and YouTube.

Catch all the episodes in the YouTube playlist.

The CircuitPython Show

The CircuitPython Show

The CircuitPython Show is an independent podcast hosted by Paul Cutler, focusing on the people doing awesome things with CircuitPython. Each episode features Paul in conversation with a guest for a short interview – CircuitPython Show.

The latest episode was released December 18th and features Jan Goolsbey. Jan and Paul discuss the CircuitPython Community Bundle, Jan’s IoT wind chimes project, and the string car racer project.

CircuitPython Weekly Meeting

CircuitPython Weekly Meeting for December 11, 2023 (notes) on YouTube.

Project of the Week: Detecting Ghost Aircraft with Python

Detecting Ghost Aircraft with Python

Angelina Tsuboi has created what she calls Fly Catcher — a Raspberry Pi-powered system that can detect false aircraft using Automatic Dependent Surveillance. Fly Catcher works by monitoring the 1090 MHz frequency and can determine whether or not a potential aircraft is genuine thanks to a neural network developed just for this project, with the app coded in Python – Tom’s Hardware, YouTube and GitHub.

Popular Last Week

What was the most popular, most clicked link, in last week’s newsletter? Best single board computer in 2023.

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.

Two-hand Mouse

Making alternative mouse buttons – Adafruit Playground.

News from around the web


Inkycal is software for select E-Paper displays written in Python. It converts these displays into useful information dashboards. It’s open-source, free for personal use, fully modular and user-friendly. Despite all this, Inkycal can run well even on the Raspberry Pi Zero – GitHub and hackaday.io.

Making a homebrew computer using microcontrollers

Making a homebrew computer using microcontrollers – Adafruit Blog, YouTube and hackaday.io.

A pet robot who gets sleepy when petted

A pet robot who gets sleepy when petted, programmed in MicroPython – X and Adafruit Blog.

4 simple projects to make with a Raspberry Pi 5

4 simple projects to make with a Raspberry Pi 5 – XDA.

Retrogaming mini-console based on Pimoroni Pico Lipo (RP2040) and CircuitPython

A RP2040-based retrogaming mini-console programmed in CircuitPython – YouTube and Adafruit Blog.


Making a Dance Dance Revolution pad with a Raspberry Pi Pico and CircuitPython – X.

Jasper Devreker Sets His Sights on a Fully-Open Wi-Fi Stack for Espressif's ESP32 Microcontrollers

Jasper Devreker sets his sights on a fully-open WiFi stack for Espressif’s ESP32 microcontrollers – hackster.io.

Programming Raspberry Pi Pico with VS Code and MicroPython

Programming Raspberry Pi Pico with VS Code and MicroPython – Random Nerd Tutorials.

Getting Started With MicroPython on Arduino Nano RP2040 Connect

Getting started With MicroPython on an Arduino Nano RP2040 Connect – Codemotion.

1970s binary clock MicroPython upgrade with a Raspberry Pi Pico W

Giving a 1970s binary clock a MicroPython upgrade with a Raspberry Pi Pico W – hackster.io.


Dexed is a multi platform, multi format plugin synth that is closely modeled on the Yamaha DX7. Under the hood it uses music-synthesizer-for-android for the synth engine and JUCE as an application/plugin wrapper – GitHub via X.

Example of serial comms between a Pi and a Pico

Sending serial data between a Raspberry Pi and a Pi Pico using MicroPython – X and GitHub.

What's on BBC Radio with Pimoroni Pico Display Pack 2

What’s on BBC Radio with Pimoroni Pico Display Pack 2 and MicroPython – Simon Prickett.

Confetti Bot

Confetti Bot uses a Raspberry Pi and Python – Raspberri Pi News.

YouTube Subscriber Counter

LED RGB matrix sign displaying YouTube subscriber count and views count per video using a Raspberry Pi Pico W with MicroPython – hackster.io.

Porting TinyBasic to a W65C134-SXB

Porting TinyBasic to the W65C134-SXB – Gordons Projects and YouTube.

Bitty HTTP is a small lightweight web server designed be used in small microcontrollers, but powerful enough to be used with large embedded processors and even embedded into larger programs – GitHub.


HatDrive! Piano

HatDrive! Piano contains an M.2 socket (2230/2242 size, M-key) combined with high-quality DAC audio card (32-bit/384kHz) with embedded headphone amplifier (I2C controlled) for Raspberry Pi 5 – X.

Akruvia Maker Badge

Akruvia Maker Badge (examples in CircuitPython) – ikejr.com and Etsy.

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 six 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

Raspberry Pi 5 3D Printed Case from Ruiz Brothers

Updated Learn Guides

Adafruit 3.5” 320×480 Color TFT Touchscreen Breakout from lady ada

Adafruit Qualia ESP32-S3 for RGB-666 Displays from M. LeBlanc-Williams

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 469!

New Libraries

Here’s this week’s new CircuitPython libraries:

Updated Libraries

Here’s this week’s updated CircuitPython libraries:

Library PyPI Weekly Download Stats

Total Library Stats

  • 206458 PyPI downloads over 323 libraries

Top 10 Libraries by PyPI Downloads

  • Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 14734
  • Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 14638
  • Adafruit CircuitPython Register (adafruit-circuitpython-register): 5375
  • Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 2026
  • Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1973
  • Adafruit CircuitPython Pixelbuf (adafruit-circuitpython-pixelbuf): 1572
  • Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1505
  • Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1462
  • Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1411
  • Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1305

What’s the CircuitPython team up to this week?

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


I released CircuitPython 9.0.0-alpha.6 last week, about a month after alpha.5. Alpha.6 has jpegio courtesy Jeff, and about 50 other fixes and improvements.

I’m continuing to debug issues with the NINA-FW firmware used on AirLift boards, now with Ha Thach’s help. Some things that did not work a couple of months ago are now working, which is quite confusing.


This past week, I worked on updating the circuitpython.org website to allow using multiple URLs with each board. This is in preparation for a new feature on the Adafruit website to identify boards that can run CircuitPython. I also updated the Arduino library used for the Qualia displays to add a new parameter similar to CircuitPython so that a couple of bar displays that require an overscan parameter can be used.


This week I used a utility I added recently to Adabot to release all of the libraries that were changed by the patch rollout from last week. As with the patch itself there were a few that the utility didn’t work on so I tracked them down and fixed various infrastructure issues to get them sorted out. I believe I’m nearing the end of the work in circup to refactor proposed addition of support for web workflow.


Last week I added support for jpeg decoding in CircuitPython, which has appeared in the latest release. We enabled the new jpegio module on as many boards as we could. I’m in the process of making an adaptation of an existing guide to use jpegio and Qualia instead of using Adafruit IO to convert a JPEG image to a format that CircuitPython can handle.


This week I’ve been around off and on. I’ve been keeping up with emails and reviews but not a ton else. My main focus is to add SD card support to the BLE and web workflows. To make that easier, I’m doing a bit of refactoring to share code and clarify how filesystems are locked. The locking will prevent one workflow from reading while another is in the middle of a something. An interrupted change can look like corruption and an interrupted read could slow both reads down.


This week I worked on a CircuitPython library for the FT5336 capacitive touch driver and updated the associated guide for the new 3.5” 480×320 display. This driver allows for up to 5 simultaneous touch points and the libraries for both Arduino and CircuitPython can keep track of the coordinates for each touch in a list which could make for some interesting projects. I also finally setup a Raspberry Pi 5 with Raspberry Pi OS Bookworm. I had been putting it off because I had heard about all of the changes for Python but the updated Blinka guide made everything go very smoothly.

Upcoming Events

MicroPython Meetup

The next MicroPython Meetup in Melbourne will be on December 27th – Meetup.

PyCon US 2024

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

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 alpha 6. New to CircuitPython? Start with our Welcome to CircuitPython Guide.

20231215 is the latest Adafruit CircuitPython library bundle.

20231215 is the latest CircuitPython Community library bundle.

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

3.12.1 is the latest Python release. The latest pre-release version is 3.13.0a2.

3,741 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,287 Thanks

38,287 THANKS

Adafruit Discord

The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 38,287 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 Tuesday. 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.