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 last week was very busy! CircuitPython 8.1.0-beta.0 dropped with the huge addition of native animated GIF playing support (up to 480×320) and more. Your editor and others were quick to kick the tires, find issues and optimizations. Raspberry Pi has new documentation for their RP2040 chip and boards out. There are some very novel projects out there as well as interesting hardware coming soon. I hope you enjoy this issue. And if you ever have news or projects to share, please post it on the ‘net and send a link to cpnews(at)adafruit(dot)com for consideration – 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 8.1.0-beta.0 Released

CircuitPython 8.1.0-beta.0 Released

CircuitPython 8.1.0-beta.0 is the new CircuitPython unstable release – Adafruit Blog and full Release Notes.

Notable changes to 8.1.0 since 8.0.0

  • Add animated GIF support: gifio.OnDiskGif.
  • Add safemode.py, for programmatic handling of safe mode.
  • Add 7-color e-ink display support.
  • Allow setting pystack size in settings.toml.
  • Add dither support to Palette.
  • Support array.extend(iterable).

New Documentation for Raspberry Pi Pico, Pico W and RP2040

New Documentation for Raspberry Pi Pico, Pico W and RP2040

Raspberry Pi has released a new set of RP2040, Pico & Pico W documentation – Documentation, Datasheets and Adafruit Blog.

Advanced Pico Pinout

An advanced pinout of the Raspberry Pi Pico compiled by Gadgetoid – pico.pinout.xyz.

A CircuitPython Battery Tester Which Works From Big Car Batteries Down to Teeny-Tiny Coin Cells

CircuitPython Battery Tester

Powered by a Raspberry Pi Pico, this battery tester uses a solid-state relay to shunt current through the user’s choice of resistors – hackster.io and YouTube.

The device is powered by a Raspberry Pi Pico development board running CircuitPython on a RP2040 microcontroller, connected to an Adafruit 16×2 character-based LCD with buttons for user input and status reporting. There’s a Texas Instruments INA260 battery monitor, connected via I2C, and a solid-state relay plus three different resistors to provide an adjustable current sink.

Making Animated GIF Display on a Floppy

Making Animated GIF Floppies

Your editor has been kicking the tires on the new animated GIF support in CircuitPython 8.1.0-beta.0. Taking the Floppy with a Display hardware, I loaded the beta and a test GIF player. It worked out of the gate! First was a Max Headroom demo, initially posted to Twitter. About 10 different iterations were made with memes, computer and software startup screens and more.

Likely when 8.1.0 is released, there will be an Adafruit guide on using animated GIFs as we are still working out subtle bugs and performance. A huge shout out to CircuitPython community member Mark Komus for adding this capability, it was my top #CircuitPython2023 request – Twitter initial post, Adafruit Blog video medley, and Adafruit Show and Tell.

NASA and Open Source Software

NASA and open-source software

NASA and open-source software: sharing information has been in the DNA of the space agency from the beginning. As a result, NASA contributes to and releases open-source software and open data. In a keynote at FOSDEM 2023, Science Data Officer Steve Crawford talked about NASA and open-source software, including the challenges NASA has faced in using open source and the agency’s recent initiatives to lower barriers – lwn.net.

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

This week, Tim streamed work on Framebuf testing and updating examples for the displayio API.

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 Rainbowio Colorwheel – Adafruit Blog and YouTube.

Catch all the episodes in the YouTube playlist.

Project of the Week: VT2040 – A MicroPython-based Portable Terminal

MicroPython-based Portable Terminal

MicroPython-based Portable Terminal

VT2040 is a portable serial terminal, based on an RP2040 dev board, with a Gherkin keyboard and an ILI9488 480×320 LCD screen. The prototype gets about 18 hours out of 3 AA batteries and runs MicroPython – GitHub.

News from around the web!

Build a Raspberry Pi Pico powered DJ Board with CircuitPython

Build a Raspberry Pi Pico powered DJ Board with CircuitPython – Twitter.

Distance Camera

Using a VL53L0X sensor with a camera to visualize distance – Twitter.

Animated GIF

Another user checking out CircuitPython 8.1.0 Beta 0 using animated GIFs running on an ESP32-S3 – Twitter.

Nixie Display

Displaying images of Nixie tubes displaying digits on an LCD display with MicroPython – Twitter.

PID temperature controller

A prototype PID temperature controller using a Raspberry Pi Pico and CircuitPython – Twitter.

Vim Cheat Sheet

A Vim cheat sheet – Twitter.


Sending LoRa data on an Adafruit PyGamer with a custom menu system in CircuitPython – Twitter Thread.

DIY MP3 player for a toddler

The Momobox is a DIY MP3 player for a toddler. It’s made with a Raspberry Pi and 3D printed components, and runs on CircuitPython. Blair is building it for his daughter, with special Momies — figurines that play different songs when you put them on the box with a magnet – Twitter.

Raspberry Pi Pico-W and DHT11 using Thonny IDE and MicroPython

Raspberry Pi Pico-W and DHT11 using Thonny IDE and MicroPython – YouTube.

ESP32 ESP8266 SMTP Client Send Sensor Readings via Email using MicroPython

ESP32 ESP8266 SMTP client send sensor readings via Email using MicroPython – Microcontrollers Lab.

MicroPython Avatars

A MicroPython version of M5Stack Avatar. Make cute M5Stack avatars – Tech Blog by Akanuma Hiroaki.


microdot is “The impossibly small web framework for Python and MicroPython”. It is a minimalistic Python web framework inspired by Flask, and designed to run on systems with limited resources such as microcontrollers. It runs on standard Python and on MicroPython – GitHub.

Port of CircuitPython for lilygo9 T-embed S3 board

I’m on my way for my first port of CircuitPython for Lilygo T-Embed S3 board. Special shout-out to my CALM community which support me and of course the Adafruit
community – Twitter.

30 Days Of Python

30 Days Of Python coding challenge – GitHub.

Debugging Embedded Targets with pyOCD and Eclipse

Debugging Embedded Targets with pyOCD and Eclipse – MCU on Eclipse.

Raspberry Pi Automation

Brompton Bicycles CEO talking about their homegrown factory floor automation using Python and Raspberry Pi – Mastodon and YouTube.

PyDev of the Week: Janos Gabler on Mouse vs Python

CircuitPython Weekly Meeting for March 6, 2023 (notes) on YouTube.

#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? OpenSPICE: A Portable Python Circuit Simulator.

Coming Soon

RP2020 Feather USB Host

An RP2040-based Feather with a USB host port. The port is a bit-banged ‘full-speed’ USB Host implementation using TinyUSB – Twitter.

Arduino GIGA R1 WiFi

Arduino GIGA R1 WiFi board launches with STM32H7 MCU, up to 76 I/O pins, running Arduino and MicroPython – CNX Software.

RP2040 CAN Feather

The RP2040 CAN Feather is another Adafruit RP2040 ‘Bones’ board, following up on the DVI, RFM/LoRa, and E-Ink boards shown last week. This time there is an MCP25625 on there – this is basically an MCP2515 + MCP2551 all-in-one chip. The extra GPIO are for control and IRQ pins, and share the main SPI port – Twitter.

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

Matrix Portal M4 Boxing Interval Timer from Trevor Beaton

SNES Mouse to USB HID with CircuitPython from Jeff Epler

CircuitPython Safe Mode from Dan Halbert

CircuitPython Libraries!

CircuitPython Libraries

CircuitPython support for hardware continues to grow. We are adding support for new sensors and breakouts all the time, as well as improving on the drivers we already have. As we add more libraries and update current ones, you can keep up with all the changes right here!

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

If you’d like to contribute, CircuitPython libraries are a great place to start. Have an idea for a new driver? File an issue on CircuitPython! Have you written a library you’d like to make available? Submit it to the CircuitPython Community Bundle. Interested in helping with current libraries? Check out the CircuitPython.org Contributing page. We’ve included open pull requests and issues from the libraries, and details about repo-level issues that need to be addressed. We have a guide on contributing to CircuitPython with Git and GitHub if you need help getting started. You can also find us in the #circuitpython 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 368!

New Libraries!

Here’s this week’s new CircuitPython libraries:

Updated Libraries!

Here’s this week’s updated CircuitPython libraries:

Library Statistics

Adafruit_CircuitPython_Bundle downloads for the past week:

  • adafruit-circuitpython-bundle-8.x-mpy: 3048
  • adafruit-circuitpython-bundle-7.x-mpy: 2124
  • adafruit-circuitpython-bundle-py: 1833
  • adafruit-circuitpython-bundle: 360
  • adafruit-circuitpython-bundle-examples: 193

Adafruit CircuitPython Library Piwheels downloads:

Library Last Month Total
Adafruit-Blinka 8488 516789
Adafruit_CircuitPython_BusDevice 6919 329682
Adafruit_CircuitPython_Typing 6531 82377
Adafruit_CircuitPython_Requests 6529 28140
Adafruit_CircuitPython_Register 1535 89099
Adafruit_CircuitPython_framebuf 1012 51905
Adafruit_CircuitPython_DHT 993 64695
Adafruit_CircuitPython_Pixelbuf 990 25577
Adafruit_CircuitPython_NeoPixel 932 70625
Adafruit_CircuitPython_SSD1306 922 42756
Adafruit_CircuitPython_ADS1x15 743 40942

What’s the team up to this week?

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


I released CircuitPython 8.1.0-beta.0 on Tuesday; it’s our first beta for 8.1.0. The release includes support for safemode.py, which I documented in a new Learn Guide: CircuitPython Safe Mode.

I’m continuing to look at new and old issues for the 8.x.x releases of CircuitPython.


This past week, I wrote a library to merge binary files at different offsets for use in flashing with esptool. This allows for the WipperSnapper Firmware Uploader to be able to generate downloadable images for flashing later in case users have trouble using the built-in flashing tool.

The CircuitPython Installer I have been working on for quite a while was merged in as well. This tool requires a Chrome browser. This is a tool for ESP32-based boards on circuitpython.org A few follow-up bug fixes were needed, but the tool is ready for testing. It allows for easily flashing CircuitPython and boot loaders using Web Serial and the File System Access APIs right from the circuitpython.org website. This is especially useful for ESP32 boards because there is no native USB and thus no CIRCUITPY drive. For boards without a CIRCUITPY drive, normally the WiFi settings need to be configured via the REPL, however the installer handles all of this for you.


I worked on some additional examples and fixes in two new 7 color e-ink libraries. I tested some proposed fixes for UART usage of the PN532 NFC card reader. Lastly I’ve begun updating example code for the displayio API changes that the now stable 8.0.0 brought.


I published a guide for the Floppy FeatherWing. It includes a CircuitPython example for reading raw flux from a floppy disk.

I have a guide in the works using CircuitPython to adapt the SNES “Mario Paint” mouse to a modern PC using CircuitPython. Watch the New Guides section to find out when that’s released (it’s released – Ed.)


This week has been a whirlwind. The Bangle.js 2 and pulseio.PWMOut fix PRs were merged in. I’ve kept working on analyzing performance of CircuitPython on the iMX RT. I got SWO working for debug messages and have been experimenting with generating full function traces. I’ve learned that _veneer functions are used to call code on flash from tightly couple memory (TCM) or vice versa.

There have been some seemingly random crashes that I’m digging into. The iMX reads code directly from flash and sometimes we’re writing to the same flash. Any mistakes in the code around this sharing could lead to mysterious crashes. In theory, function tracing should help but it isn’t stable on its own yet. So, I’ve been digging deep into CP on the iMX and not doing much concrete. However, the things I’m learning should help us get CP rock solid on the iMX (and make it easier to debug new issues).


This week I worked on some product guides. I updated the I2C/SPI LCD Backpack guide for the new STEMMA QT version. I also updated the ATtiny Breakouts guide for the new ATtiny816 and ATtiny1616 versions in the shop. I added a page on how to reprogram the boards with a UPDI programmer, which I think will be helpful for folks.

I have also been making slow but steady progress on the robot lyre project. The CAD design has proven to be very challenging, but I think I’ve finally gotten it. I posted up a demo plucking one note repeatedly and hopefully I can get a full demo setup and running in the next week.

Upcoming events!

Unlock MicroPython on Arduino Webinar

Unlock the Power of MicroPython on an Arduino: Join a Live Webinar March 9, 2023 – Elector

Munich RISC-V Meetup

A Munich RISC-V Meetup, one day after the doors of Embedded World close on March 17th. RISC-V enthusiasts will get together in Munich, Bavaria – RISCV.org

MicroPython Meetup

The next MicroPython Meetup in Melbourne will be on March 22nd – Meetup.

Hackaday Berlin 2023

Hackaday Berlin 2023 is scheduled for Saturday, March 25 – Adafruit Blog and announcement.

PyCon US 2023

PyCon US 2023 will be April 19-17, 2023, again in Salt Lake City, Utah USA – PyCon US 2023.

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.0.3 and its unstable release is 8.1.0-Beta.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.

20230306 is the latest CircuitPython library bundle.

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

3.11.2 is the latest Python release. The latest pre-release version is 3.12.0a5.

3,423 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.

jobs.adafruit.com – Find a dream job, find great candidates!


jobs.adafruit.com has returned and folks are posting their skills (including CircuitPython) and companies are looking for talented makers to join their companies – from Digi-Key, to Hackaday, Micro Center, Raspberry Pi and more.

Job of the Week

Lead Firmware Engineer – Golioth (Remote) – Adafruit Jobs Board.

36,878 thanks!

36,878 THANKS

Adafruit Discord

The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 36,878 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, IGTV (Instagram TV), 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.

Codecademy “Learn Hardware Programming with CircuitPython”

Codecademy CircuitPython

Codecademy, an online interactive learning platform used by more than 45 million people, has teamed up with Adafruit to create a coding course, “Learn Hardware Programming with CircuitPython”. The course is now available in the Codecademy catalog.


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.