If you missed this week’s Python on Microcontrollers Newsletter, here is the ICYMI (in case you missed it) version.
To never miss another issue, subscribe now! – You’ll get one terrific newsletter each Tuesday (which is out before this post). 10,430 subscribers worldwide.
The next newsletter goes out in a week and subscribing is the best way to keep up with all things Python for hardware. No spam, no selling lists, leave any time.
Welcome to the latest Python on Microcontrollers newsletter! There is so much significant news that the features section up top is expanded to cover it all. Milestones, a new Arduino, and informational items. There are two projects of the week, both fabulous. And, there are some really great community projects. I hope you enjoy this issue – 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:
100 CircuitPython Community Libraries!
The CircuitPython community reached a big milestone together! There are now 100 libraries in the CircuitPython Community Bundle! CircuitPython libraries are separate files designed to work with CircuitPython code.
The CircuitPython Community Bundle contains all the available libraries for CircuitPython that have been submitted by the CircuitPython community at large. These libraries are updated and maintained by their community authors. A huge thanks to all the authors and the folks that make CircuitPython easy and friendly for everyone. A special thanks to CedarGroveStudios for submitting the 100th library: CircuitPython_AD5293 – a CircuitPython driver for the AD5293 digital potentiometer.
The full list of all the CircuitPython libraries contained in the library bundles (Adafruit + Community) can be found on the circuitpython.org libraries page – Adafruit Blog.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 37,000 humans – thank you! Adafruit believes Discord offers a unique way for Python on hardware folks to connect. Join today at https://adafru.it/discord.
Clippy gets smarter with Raspberry Pi and ChatGPT
Everyone is asking if ChatGPT is actually Clippy in disguise. Well, what better way to find out than building a ChatGPT-powered Clippy. ChatGPT in a box runs Azure Speech Services. It listens to what you ask and runs it through ChatGPT, which then sends back an answer for Azure Speech Services to say out loud, making it seems as though Clippy is talking to you.
David Packman’s Raspberry Pi project uses an Adafruit CRICKIT HAT, which gives Clippy a lot of functionality, including running speakers to give it a voice. Programming is with Python and the Adafruit Blinka compatibility layer for using CircuitPython code – Raspberry Pi, Hackster.io, and YouTube.
Arduino Announces a New Iteration of the Uno
On Arduino Day (March 25th). Arduino announced the Arduino Uno R4, two boards in the Uno form factor with significantly more resources than the aging Uno R3. The Arduino UNO R4 has been announced as featuring a 48 MHz Renesas RA4M1 Arm Cortex-M4F 32-bit microcontroller. It has 256kB of flash and 32kB of RAM, and is 5V compatible. It is available with an optional ESP32-S3 module for WiFi 4 and Bluetooth 5.0 connectivity. While programming options were not announced, it was implied that the Arduino IDE would be supported (with some library authors needing to change their code if it is AVR-centric). The MicroPython website states they support the Renesas RA4M1 Arm Cortex-M4F 32-bit microcontroller but it is unclear if Arduino will make such support official for their R4 boards. Arduino UNO R4 is scheduled for release in late May, when more details about its features will be disclosed. Pricing has not been announced – CNX Software and Arduino.
Help micro:bit Test New Firmware
micro:bit has a new beta release of the micro:bit V2 firmware (DAPLink) with improvements and they need folks to help test them before it is launched – micro:bit.
Comparing Hobby PCB Vendors
There are numerous comparisons of quality and cost for different PCB manufacturers on the internet, but many of them are dated or suspect — so lcamtuf figured it’s worthwhile to experiment and share their notes for 2023 – lcamtuf’s thing.
Adafruit Engineer Anne Barela on Hackster Cafe Videocast
Adafruit engineer Anne Barela (Ed. your editor) appeared on the hackster.io Hackster Cafe broadcast March 21st discussing a wide range of topics including the Floppy with a Display project, Adafruit and much more – YouTube and the Adafruit Blog.
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 Practice Adding New Board Def with Built-in Display.
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 how to use DotStar RGB LEDs in CircuitPython – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
Project of the Week Part I: Oor Monsters / Oor Future
“Oor Future” is an exhibition highlighting fundamental climate issues by exploring key subjects of positive and negative human activities impacting climate change as ‘Two Headed Monsters.’ It prompts individuals to be positive, self-reflective, and proactive in relation to climate action in their own lives.
Gabrielle Reith and Philip Thompson are Aberdeen-based artists making work under the name of “Oor Monsters.” They have worked together on many playful and inspiring projects, ‘monsterising’ things, from the everyday into the fantastical, since 2008.
Phil uses Raspberry Pi Picos and a Tiny2040 using CircuitPython in the art – Aberdeen Performing Arts.
Project of the Week Part II: Pi-PipBoy
Pi-PipBoy is a Fallout style Pip-boy wrist-mounted computer using a Raspberry Pi Zero 2W, Pimoroni Hyperpixel display and 18650 battery pack, with a Mini Bluetooth Keyboard.
It features a Raspberry Pi Pico W and a breadboard for on-the-go hacking in Python – kevsrobots.com, YouTube via Twitter
News from around the web!
A ZX Spectrum emulation computer with Raspberry Pi Pico. The system can be configured with CircuitPython – Twitter and YouTube.
Upcycling a Tandy Model 100, Part II, using an Adafruit Grand Central board and CircuitPython – IEEE Spectrum.
A Getting Started with MQTT on Raspberry Pi Pico W and MicroPython tutorial. Connect to the Internet of Things using Adafruit IO – Core Electronics and YouTube.
Caleb Olson created his own baby sleep tracker with Raspberry Pi 4 to make it easier for those caring for babies to know when they themselves can get some sleep – Raspberry Pi and GitHub via Twitter.
From Smart Bracelet to Smart Watch after successfully installing MicroPython using wasp-os. First test app loaded and now it is time to explore the API methods – Twitter.
Two Keyboard FeatherWings using FeatherS2 and CircuitPython – Twitter.
Making a graphical display for an Si4735 radio with MicroPython – Twitter.
MicroPython support of the X68000 includes unicode characters – Twitter.
Raspberry Pi Pico Minimal Ethernet – Adafruit Blog.
Raspi Pi Pico W: Comfortable programming with CircuitPython (German) – heise online.
Music notes playback using ESP32 and MicroPython and standard DAC output – Twitter.
Using a Badger 2040 display to show passing aircraft flight data from a redis stream – Twitter and YouTube.
“My heart beats for you”: an animated birthday gift for my wife, using my actual EKG and pulse, with an anatomically correct heart (that’s how we roll). Build: An Ikea picture frame with a two-color, 3D-printed design and NeoPixels animated with CircuitPython on a QtPy Haxpress. (Inspired by the delightfully creative Charlyn) – Molecularist blog.
A Makecode/Python project, called “Grand” for CircuitPlayground. ‘Shake’ sets random colors on all pixels. Tilt left/right/up/down to “pour” pixels away in that direction – Mastodon.
SVG is a horribly complex format and an overkill for most projects. The specification includes way too many edge cases so implementing a new SVG renderer will always have drawbacks or missing pieces. TinyVG tries to be simpler. Fewer features, but powerful enough to cover 90% of use cases – tinyvg.tech.
BlenderGPT is an extension to use Blender with natural language commands using OpenAI’s GPT-4 – GitHub.
AACircuitPy – Draw electronic circuits with ASCII characters. This is a Pythonized version of (Borland Delphi) AACircuit (by Andreas Weber) – GitHub.
Retro BASIC and BCPL Benchmarks – drogon.net.
PyDev of the Week: Kevin Kho on Mouse vs Python.
CircuitPython Weekly Meeting for March 27, 2023 (notes) on YouTube.
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? Book: Robotics at Home with Raspberry Pi Pico: Build autonomous robots with the versatile low-cost Raspberry Pi Pico controller and Python.
New and Coming Soon
The Pimoroni Plasma Stick 2040 W adds a 5V NeoPixel controller, reset button and a qwiic/STEMMA QT I2C port to a Raspberry Pi Pico W board – CNX Software.
Asus has unveiled a RISC-V model in its range of Tinker Board single board computer (SBC) systems, which up until now have all been Arm-based. The Tinker V is powered by a 64-bit RISC-V chip and aimed at embedded and IoT applications, but like other Tinker Boards and the Raspberry Pi, is likely to find its way into the hands of makers and enthusiasts as well – The Register and Asus.
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 one new 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:
- How to Add a New Board to CircuitPython
- How to add a New Board to the circuitpython.org website
- Adding a Single Board Computer to PlatformDetect for Blinka
- Adding a Single Board Computer to Blinka
New Learn Guides!
MIDI Controlled Robot Lyre with CircuitPython from Liz Clark
Adafruit Metro M7 1011 with AirLift from Liz Clark
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 414!
Here’s this week’s new CircuitPython libraries:
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Statistics
Total Library Stats
- 146,809 PyPI downloads over 309 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 7654
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 7022
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 2074
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1822
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1708
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1445
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1311
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1304
- Adafruit CircuitPython ESP32SPI (adafruit-circuitpython-esp32spi): 1138
- Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 991
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in!
I’m wrangling the release of CircuitPython 8.1.0-beta.1 now. As I write this, it looks like we’ll include at least 70 pull requests since beta.0, and have a good collection of fixes and enhancements.
I’ve contributed several miscellaneous fixes. On the build side, I changed the way we fetch submodules in a CircuitPython clone to use git “partial clones”, specifically “blobless” clones. We used to use shallow clones for submodules. These had incomplete information about the git commit tree, which made it difficult to move between, or find tags or branches. Partial clones are better: they fetch metadata or commits lazily, but all the information is available on demand, so they appear as if they are complete.
I recently returned after being out for a bit. I got some misc things out of the way before beginning the guide for the Adafruit Feather RP2040 DVI microcontroller. If you pick up one of these nifty boards, keep an eye out for the guide!
Next up will be getting a head start on the Adafruit Feather RP2040 RFM by getting it added to CircuitPython, and creating the Fritzing object and PrettyPins diagram!
This past week, I took the ChatGPT Voice assistant and placed it inside a motorized toy bear. To keep everything nice and neat, I designed a 3D-printable case to house the Raspberry Pi and all of the components. This was one of the more complex things I’ve 3D modeled and am very happy with how it turned out. I showed off a demonstration of the bear at its current progress on Adafruit’s March 22nd SHOW and TELL.
I finished up the diskinfo API for web workflow. Working on that pushed the boundaries of my knowledge of core development out a bit further, so it was a great opportunity to learn more about “under the hood” of CircuitPython. I begun work on making a way for displayio Group to know the height and width of the rectangle that it occupies on the display so that it can more easily be used with touch screens to test whether a user has touched within the bounds of a Group or not. There is still much work to do in order to get all of the measurements working correctly, especially when considering the scale and possible negative positions of children elements.
It took a bit of time, but the pull request to add support for I2S Audio Output on the i.MX RT family microcontrollers is finally ready for folks to kick the tires. As I write this there are still a few items to check and refine before merging it, but it’ll be in “latest” builds some time soon.
I’ve tested the feature only on the Metro M7 with the Maxim MAX98357A I2S amplifier (Adafruit has a breakout board with this chip) but it should work across the whole line of i.MX RT micros, such as the Teensy, and on other I2S DACs and amplifiers.
One thing I am excited about is that it can mix together at least 12(!) 22kHz wave files from the CIRCUITPY drive at the same time. If you can fit your samples in the 2MB of the CIRCUITPY drive, this looks like it’ll be a great board for some sample mixing.
The performance improvements I made for the i.MX RT (Metro M7 1011) will be in the next CircuitPython 8.1 beta. Based on the benchmarks, it’s a 2-5x speedup. Now, I’m looking into optimizing our flash accesses to make the worst case where we need data from flash faster. Simply raising the speed to flash from 60MHz to 133MHz seems to be another 0.5x speedup or so. There are a couple other things we could do too.
I’m also working to add support for additional iMX RT chips like the 1050 and 1040. They have more RAM and are a bit faster than the 1011.
This week I did a bit of bug fixing as well. With my 7-color epaper changes I broke tricolor epaper. So, I fixed that yesterday. I also fixed an issue with displaying the CircuitPython terminal because I made the Blinka bitmap data read-only but some code was trying to write to it.
This week I had two guides go live: the Metro M7 1011 with AirLift and the MIDI Controlled Robot Lyre with CircuitPython. The Metro M7 guide has all of the details you need to get started with the new Metro M7 board. This is the first dev board in the shop that uses the i.MX 1011.
The robot lyre was a long-term project that I’d been slowly making progress on for the past few weeks. It uses a Feather RP2040 running CircuitPython to control 16 servo motors with MIDI. Each servo is mounted directly above a string on the lyre so that it can be plucked when a corresponding MIDI note is received. The hardest part of this project was the CAD design, with some parts needing adjustments of less than a millimeter to find the optimal design. I learned a lot though and am looking forward to more robot instrument projects.
PyCon US 2023 will be April 19-27, 2023, again in Salt Lake City, Utah USA – PyCon US 2023.
The next MicroPython Meetup in Melbourne will be on April 26th – Meetup.
EuroPython 2023 will be July 17-23, 2023, in Prague, Czech Republic and Remote – EuroPython 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.4 and its unstable release is 8.1.0-beta.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20230327 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.0a6.
3,454 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.
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.