View this email in your browser. Warning: Flashing Imagery
Welcome to the latest Python on Microcontrollers newsletter! No sooner had I predicted the first beta for CircuitPython, it was released. Help the team find any issues by trying it now. Can you remember the difference between Espressif chips? Download a handy chart and never struggle again. If you want to use TensorFlow Lite on an RP2040 dual core, a new version provides that. And much, much more in this week’s edition. - 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 Beta 0 Released
CircuitPython 9.0.0-beta.0, a beta release for 9.0.0, is now available and is the new unstable release. This release has known bugs that will be addressed before 9.0.0 final - Adafruit Blog and the release page - GitHub.
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.
- Make SD cards available over web workflow.
- Remove 8.x.x deprecations:
displayio.*.show()
, I2CPeripheral
renamed to I2CTarget
.
- Add
jpegio
JPEG decoder support.
- Add
bitmapfilter
image manipulation.
- 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
.
- HID can wake up sleeping host computer.
- Allow specifying protocol for raw sockets.
- Add
codeop.compile_command()
.
A Chart on the Espressif Microcontroller Portfolio
In Espressif’s latest newsletter, they have a consise chart of their microcontroller offerings - X.
#CircuitPython2024 Responses Summarized
Scott Shawcroft shares all of the responses to the #CircuitPython2024 campaign - Adafruit Blog.
A Raspberry Pi running Python powers the first driverless car in Formula SAE Brazil competition. Team Ampera pushed through various prototypes before creating a Raspberry Pi-powered car capable of navigating the Formula SAE Brazil track completely autonomously - Raspberry Pi News and YouTube.
“Python algorithms (are used) to build a map of the track. These algorithms don’t just calculate the best path to follow; they also determine control actions, such as steering and acceleration, and send these suggestions to the car’s electronic control unit (ECU).”
A Video Player in a VHS Tape
A fun mini-project to cram a Raspberry Pi-based composite video player/recorder inside a VHS cassette. The build uses a Raspberry Pi 3 A+ controlled by Python - hackster.io, GitHub and YouTube.
A Big Update for TensorFlow Lite for RP2040 Microcontrollers
Pete Warden just upstreamed three years of changes to TensorFlow Lite for Microcontrollers, focused on the Raspberry Pi RP2040. There are dual core optimizations resulting in a 1.4x speed improvement. These updates and changes reduce the time for the person detection benchmark code from 824ms to 588ms - Raspberry Pi News and GitHub.
Installing CircuitPython 9.0.0-beta.0 on a Raspberry Pi Zero 2 W
coXXect shows the steps to install CircuitPython 9.0.0-beta.0 bare metal on a Raspberry Pi Zero 2 W - Blog and YouTube.
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
Last Friday, Scott streamed a CircuitPython Implementer’s guide.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist - YouTube.
CircuitPython Parsec
John Park’s CircuitPython Parsec this week is on using sin and cos to move a display object in a circular path - Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
CircuitPython Weekly Meeting
CircuitPython Weekly Meeting for January 29th, 2024 (notes) on YouTube.
Project of the Week: Streamline Robot Control With an XRP Program Selector
Getting a SparkFun Qwiic Twist RGB rotary encoder and an Adafruit 0.91” OLED display to work with the XRP robotics kit’s drive_examples.py MicroPython file. Both boards are Qwiic and Stemma QT compatible - DigiKey.
Popular Last Week
What was the most popular, most clicked link, in last week’s newsletter? These 8 Raspberry Pi attachments radically expand its powers.
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.
A classic word clock on an RGB color LED matrix with ESP32-S3 and CircuitPython - Adafruit Playground.
Space War: A game for the Adafruit MagTag is a port from 1977 FORTRAN to CircuitPython - Adafruit Playground.
Randall Bohn makes a clock in CircuitPython for a multifunction device based on an ESP32-S2 Feather with a TFT LCD display FeatherWing - Adafruit Playground.
News from around the web
Bluetooth on the Raspberry Pi Pico W with MicroPython, Pi Cast January 3oth with Kevin McAleer - YouTube.
Statistics on the Python on Microcontrollers Newsletter for 2023 Q4 - Adafruit Blog.
Making model railroad level crossing lights with Raspberry Pi Pico and MicroPython - X.
How a photographer built the ultimate DIY digital clock inside a flash unit with Raspberry Pi Pico and CircuitPython - PetaPixel.
Making a Wall of Flippers on a pwnagotchi using Python on a Raspberry Pi Zero - GitHub and X.
TinyTapeout is an educational project that makes it easier and cheaper than ever to get your digital designs manufactured on a real chip! TT06 builds on TT05, with the same space, IOs and speed, but now adds power gating for all designs, mixed signal support and analog pins - Tiny Tapeout.
Using the Adafruit CircuitPython BLE library to make a Bluetooth snooze button - Tea and Tech Time and YouTube, via X.
Build a Raspberry Pi mecanum robot with Raspberry Pi Zero W / 2W and Python - Raspberry Pi News.
Using a Pimoroni 1.3” round display with a Tiny2040 board in MicroPython - X.
ESP32-S3-Zero/CircuitPython display on a 128x64 SSD1306 I2C OLED - YouTube.
Loading CircuitPython on the Waveshare RP2040-GEEK - X and Waveshare.
Making a traffic light controller with a Franzininho WiFi Lab01 and MicroPython - Embarcados (Portuguese) and YouTube.
An EMV III SHT30 sensor data displayed with a M5Stack GLASS2 unit using MicroPython - X.
XIAO-log is a miniature temperature, humidity and luminosity logger hat for the XIAO ESP32-C3 programmed in MicroPython - hackaday.io.
Python List Methods Explained - X.
Python Best Practices for More Pythonic Code - Real Python.
New
The Libre Computer Solitude is a new single-board computer. A Amologic S905D3 ARM-based SoC is installed with up to 4GB RAM. Thanks to the built-in infrared sensor, the Libre Computer Solitude can also be easily controlled using a remote control - Notebook Check.
The M.2 E-Key Wi-Fi 7 HAT for Raspberry Pi 5 also supports Google TPU - CNX Software.
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 was another board 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
Adafruit CAN Bus BFF from Liz Clark
Updated Learn Guides
Adafruit MEMENTO Camera Board
Numerous guides using Adafruit HATs with displays on Raspberry Pi (updated for Raspberry 5 and Bookworm)
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!
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
- 133283 PyPI downloads over 324 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 8801
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 8704
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 3046
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1548
- Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1329
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1206
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1193
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1125
- Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1118
- Adafruit CircuitPython ServoKit (adafruit-circuitpython-servokit): 1096
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in:
Melissa
This past week, I finally wrapped up my fixes for the displays which now run on Bookworm. This includes creating my first pull request to Raspberry Pi Linux to fix up some of the device tree overlays and add additional functionality, which has been merged in. It should be part of the next release of Bookworm and once it is, we can simplify the installer scripts. With the displays now working, I’m going through and testing and updating the learn guides which we had to add warnings to when Bookworm was initially released.
Tim
This week I tested a handful of PRs for MiniMQTT and Wiznet5k libraries. I’ve also begun working on a project for an upcoming guide that is a small text editor cyberdeck built from the Feather RP2040 USB Host and a TFT Feathering. I started with a project that Jeff published a few months back and have added a visible cursor to it that is drawn with displayio
on the display so it can be seen there in addition to the serial console. Next up is getting the keyboard input working into the USB Host feather.
Jeff
I added an example in Adafruit_CircuitPython_PyCamera
of all the features of the new bitmapfilter
module, which was released as part of 9.0.0-beta.0 last week.
Well, almost all the features of bitmapfilter
, because this week I also added support for “blend functions”, similar to the layer blend functions in photo editing programs. There’s one base function coded in C to perform a blend, while the mathematics of each specific blend mode are specified as Python functions (many are quite simple). Applying a blend function on a pair of 208x208 pixel images takes about 20ms on an ESP32-S3.
This code will be in the next beta, and the Memento PyCamera filter example has already been updated to show some blending modes.
Scott
A number of fixes I made for CircuitPython 9.0.0 were merged this past week. I’m really trying to push us to where 9.0.0 is stable.
The SD card over BLE and WiFi work was merged and folks have been hitting the behavior change of storage.mount()
. With 9.0.0 you’ll need to make a directory where you want to mount another file system. So, for example, you’ll need to make a sd
directory on the CIRCUITPY drive in order to mount to /sd
from CircuitPython code.
Lastly, I’ve wrapped up #CircuitPython2024 this week. Thanks to everyone who posted their ideas.
Liz
This past week I worked on the CAN Bus BFF guide. This breakout lets you use CAN Bus with a QT Py form factor board. I’ve worked on a few CAN Bus products in the past year and this guide features a nice demo written by Ladyada that sends CAN messages every time you rotate a rotary encoder.
Upcoming Events
The next MicroPython Meetup in Melbourne will be on February 28th – Meetup.
PyCascades 2024 is back in Seattle, Washington, USA and online, April 5-8th at the University of Washington’s Kane Hall. CircuitPython lead Scott Shawcroft will have a talk - PyCascades.
PyCon US 2024 launches May 15-23, 2024 in Pittsburgh, Pennsylvania US - PyCon US.
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 will be starting 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.
20240130 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.1 is the latest Python release. The latest pre-release version is 3.13.0a3.
3,800 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.
38,616 Thanks
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 38,616 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.
Contribute
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.