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 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:
safemode.py, for programmatic handling of safe mode.
- Add 7-color e-ink display support.
- Allow setting pystack size in
- Add dither support to
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.
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
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
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: 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 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
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.
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
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 – Twitter.
Using a VL53L0X sensor with a camera to visualize distance – Twitter.
Another user checking out CircuitPython 8.1.0 Beta 0 using animated GIFs running on an ESP32-S3 – Twitter.
Displaying images of Nixie tubes displaying digits on an LCD display with MicroPython – Twitter.
A prototype PID temperature controller using a Raspberry Pi Pico and CircuitPython – Twitter.
A Vim cheat sheet – Twitter.
Sending LoRa data on an Adafruit PyGamer with a custom menu system in CircuitPython – Twitter Thread.
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 – YouTube.
ESP32 ESP8266 SMTP client send sensor readings via Email using MicroPython – Microcontrollers Lab.
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.
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 coding challenge – GitHub.
Debugging Embedded Targets with pyOCD and Eclipse – MCU on Eclipse.
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.
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 board launches with STM32H7 MCU, up to 76 I/O pins, running Arduino and MicroPython – CNX Software.
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!
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 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!
Here’s this week’s new CircuitPython libraries:
Here’s this week’s updated CircuitPython libraries:
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:
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.
Unlock the Power of MicroPython on an Arduino: Join a Live Webinar March 9, 2023 – Elector
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
The next MicroPython Meetup in Melbourne will be on March 22nd – Meetup.
Hackaday Berlin 2023 is scheduled for Saturday, March 25 – Adafruit Blog and announcement.
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.
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!
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 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.
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, 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.