If you missed Tuesday’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 (before this post). 9,138 subscribers worldwide!
The next newsletter goes out in a week and being subscribed the best way to keep up with all things Python for hardware. No spam, no selling lists, leave any time.
Welcome to the Python on Microcontrollers newsletter, brought you by the community! We’re on Discord, Twitter, and for past newsletters – view them all here. If you’re reading this on the web, subscribe here. Lots to see this issue:
Bullseye – the new version of Raspberry Pi OS – is out!
Raspberry Pi OS was updated Monday with a number of changes and upgrades – Raspberry Pi.
- Updated to the latest Debian ‘bullseye’ release (the last Debian update was 2 years ago)
- The desktop components and applications are now using version 3 of the GTK+ user interface toolkit
- This version uses a new window manager, called mutter, instead of the openbox window manager used in previous releases
- An integrated notification system
- Update notifications
- File manager view option simplification
- The KMS (kernel modesetting) driver is now the standard video driver
- A new camera driver
- Most applications have been upgraded to the latest version; in particular the Chromium web browser is now at version 92, and has been optimized to use the Raspberry Pi hardware to accelerate video playback.
See more – Raspberry Pi.
A guide on updating from Buster to Bullseye – Tom’s Hardware.
Raspberry Pi Zero 2 W: What does the silicon contain?
The Raspberry Pi Foundation released a new Pi Zero 2 W recently and electronupdate performed a teardown/reverse engineering of the board components, including the RP340 CPU/GPU/Ram chip stack and the radio section – electronupdate.
CircuitPython Course: Connecting a Robot Cat to the Internet
In a new LinkedIn Learning course, Charlyn Gonda shows you how to use CircuitPython — a version of Python specifically for microcontrollers — to program a robot cat that reacts to events while connected to the internet. Charlyn shows how to code for common hardware devices like LEDs and servos, and explains a common messaging protocol for IoT projects called message queue telemetry transport, or MQTT. If you’re looking for an internet cat video that actually teaches you something useful, join Charlyn as she shows how to program this robot cat.
Main Course Page – LinkedIn.
The course is $34.99 after the intro chapters. But, Charlyn notes “I found a way to share it for free! If anyone with a linked in account clicks the link inside this post, they’ll be able to access it for 24 hours from the time that they click the link”.
Meet the Maker: Liz Clark from BlitzCityDIY
SMARS Meet the Maker (and CircuitPythonista): Liz Clark from BlitzCityDIY – YouTube.
ZDnet Top Programming Languages
Python added 2.3m developers to its community in the past 12 months. “That’s a 25% growth rate, one of the highest across all the large programming language communities of more than 7M users,” the report noted.
“Bare metal” CircuitPython on a Raspberry Pi, HDMI, and e-ink
Scott is working on a port of CircuitPython that runs on “bare metal” on the Raspberry Pi (i.e. runs on the Pi without the Linux operating system). So of course Ladyada wanted to see what works with HDMI since the REPL is available… and she happens to have an e-ink HDMI display. It’s AWESOME.
One of the plans is to make a little computer with a keyboard that is just CircuitPython. Write code, make art … with HDMI, have the output go to a little portable projector… kids could make cool kaleidoscopes, or make a Haiku computer that shows the last one made when the power is off since this one is e-ink – Adafruit Blog and YouTube.
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams his work on Pi Zero 2 W + CircuitPython.
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:
Catch all the episodes in the YouTube playlist.
News from around the web!
CircuitPython native displayio working on the Adafruit LED glasses using the IS31FL3741 chipset – Twitter.
Armachat is a “doomsday” wireless messenger with LoRa radio reception. The latest versions are based on the Picomputer form factor, based on Raspberry Pi Pico RP2040 and LoRa RFM95 radio module. It uses a CircuitPython user interface – Twitter and Adafruit Blog.
Doctoral candidate Max Holliday writes on Twitter about using CircuitPython on satellites:
I love CircuitPython – enough to even run my on-orbit PyCubed satellites with it – and now that my deep sleep code for D/E51 boards is in the main branch, the possibilities are endless! Now all your Adafruit M4 projects can last forever sipping 0.5mA – Twitter and Adafruit Blog.
Among Physical Computing challenges today will be “create a CircuitPython pseudo Theremin” using an Arduino RP2040 + proximity input from an Adafruit STEMMA-QT APDS9960 and a potentiometer – Twitter.
The UDOO KEY is a fully programmable Raspberry Pi RP2040 + ESP32 microcontroller with Wi-Fi, Bluetooth and Bluetooth Low Energy. It also gives you access to an AI platform, Clea, with pre-trained AI models. Both microcontrollers can be programmed using different environments, such as TinyML, TensorFlow Lite, MicroPython, C/C++, and more – Kickstarter.
A little blue screen on a Raspberry Pi Pico, controlled from a ZX Spectrum. It works from BASIC, but not from machine code, so I think I have a timing issue, but I’m not sure. I’m using PIO for speed when handling the data lines, but MicroPython for the display drawing – Twitter.
A Raspberry Pi Zero talking to an Arduino using SPI in Python, and running Arduino Tools at the same time – Twitter.
A high performance GPU cooler for the NVIDIA Tesla K80 with Raspberry Pi Pico and MicroPython- esologic.
Easy to use than Arduino – Getting Started with MicroPython on ESP32 – YouTube.
Realtek ports MicroPython to the Ameba RTL8722 IoT board – Adafruit Blog.
32 lines of LEGO EV3 MicroPython code gave me this (a collision avoidance robot). I am loving it! – Twitter.
MicroPython: Effective Serial Data Processing – Dev.
An Intel 8080 Assembly Suite in Python – Paolo Amoroso.
An oral history of Bank Python – the strange world of Python, as used by big investment banks – Cal Paterson.
Also see The Code That Controls Your Money, how COBOL controls the financial life of the world.
Spleeter is the Deezer source separation library with pre-trained models written in Python and uses Tensorflow. It makes it easy to train source separation model (assuming you have a dataset of isolated sources), and provides already trained state of the art model for performing various flavors of separation – GitHub.
A new education-focused RISC-V simulator: qtrvsim. It lets you visualize what is happening in single stage and pipelined CPUs running RISC-V code. And there is also a webassembly port, so it runs in the browser! – Twitter and web simulator.
Debugging a microcontroller from a browser – Golioth.
A blog post on why it’s important to contribute to good documentation – Network to Code.
PyDev of the Week: Sarah Gibson on Mouse vs Python
4x LED Arcade rev B (ATtiny8x7 version) – Adafruit Blog.
The brains of the CutiePi Raspberry Pi CM4-based tablet. Looks like there are extra unused interfaces too! I’m working on a preview of this new RPi tablet for next week. It’s the best Pi-based tablet I’ve used—but it’s still no iPad! – 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 two new boards added!
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!
CircuitPython Project Bundle
When you get to the CircuitPython code section of an Adafruit Learn Guide, sometimes things can get a bit complicated. You not only have the code you need to upload to your device, but you likely also need to add some libraries that the code requires to run. This involved downloading all the libraries, digging through to find the ones you need, and copying them to your device. That was only the beginning on some projects, as those that include images and/or sound files required further downloading and copying of files. But, not anymore!
Now, with Project Bundles, you can download all the necessary code, libraries and, if needed, asset files with one click! We automatically check which libraries are required for the project and bundle them up for you. No more digging through a huge list of libraries to find the ones you need, or fiddling with looking for other files or dependencies. Download the Project Bundle, copy the contents to your device, and your code will simply work. We wanted to make this the easiest way to get a project working, regardless of whether you’re a beginner or an expert. We’ll also be adding this feature to popular IDEs as an add-on. Try it out with any Circuit Python guide on the Adafruit Learning System. Just look for the ‘Download Project Bundle’ button on the code page.
To download and use a Project Bundle:
In the Learning System – above any embedded code in a guide in the Adafruit Learn System, you’ll find a Download Project Bundle button.
Click the button to download the Project Bundle zip.
Open the Project Bundle zip to find the example code, all necessary libraries, and, if available, any images, sounds, etc.
Simply copy all the files over to your CIRCUITPY drive, and you’re ready to go!
If you run into any problems or bugs, or would like to submit feedback, please file an issue on the Adafruit Learning System Guides GitHub repo.
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!
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 channel 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 340!
Here’s this week’s updated CircuitPython libraries:
What’s the team up to this week?
What is the team up to this week? Let’s check in!
I’ve gotten the MicroPython version of
asyncio to work with CircuitPython, with only a few changes to the asyncio Python code, and a few changes in core CircuitPython. Our implementation of
await is slightly different. I wrote a couple of small test programs: one blinks two LEDs at different speeds independently, and the other controls two servos in coordination in a simple way. I’ll look at handling pin-change interrupts via asyncio next.
It is easy to make mistakes when writing even simple asyncio code, such as omitting an
await. I’m looking at further wrappers to make it easier. I’ve found a simple implementation of task groups, and will explore using that.
In your CIRCUITPY drive, the file
boot_out.txt holds information about the board and CircuitPython version. Thanks to my pull request (recently merged, to appear in CircuitPython 7.1), this file will now include the text written by the board’s
boot.py initialization code (up to 512 bytes), and only be rewritten when it changes, both of which were long intended but never quite worked that way.
This week has been spent finishing up the overhaul of the Welcome to CircuitPython! guide, which included a big update to the Welcome to the Community! guide as well. The overhaul is nearly done. The updated guide creates a much smoother experience for those getting started with CircuitPython. Keep an eye out for the finished update!
A new contributor reported an issue with Pylint differences locally and remotely, and it was determined that they were running a different version of Pylint than our checks are running, but it got me thinking that we had an issue with the way our checks are running on the example code, and decided we might as well update Pylint if we’re going to patch the CI setup anyway. So here we are. Dylan ran a patch to fix the example code CI, and updated Pylint, and went through all of the failing libraries to fix issues related to new Pylint checks.
I also ended up down a rabbit hole with fixing some documentation issues on one library that led to realizing that Read The Docs (where our docs are hosted) was running an ancient version of Sphinx (what we use to build our docs) and we were running the latest version locally. So a couple of hours were lost to figuring out what was going on, why, and how to fix it, but the fix is also included in the patch mentioned above. Current projects are running the latest on Read the Docs, but old ones were not. So that’s been fixed as well.
This past week I have been fixing up the CircuitPython code editor so it is working much better on mobile devices. This includes a number of bug fixes such as the compensating for the viewport height being calculated differently on mobile devices and desktop browsers, improving the color scheme, a busy indicator when communicating over Bluetooth, improved reconnection and a number of minor bug fixes and improvements. The code is available now on https://code.circuitpython.com, but it does require the absolute newest build of CircuitPython to work.
This week I’ve been absorbed into SD card support for CircuitPython. It’s taken me a couple days to confirm that I’m outputting to the wires to the SD card. Now that I’ve done that, I’ve been working to support the initialization of the card. It’s a common algorithm and I’ve been hoping to have a shared code base for it. Thanks to everyone on Twitter who has pointed me to different implementations. Hopefully soon we’ll have a TinyUSB-like library for managing SD and EMMC cards.
RISC-V Summit brings the community together to show the power open collaboration can have on the processor industry. The audience spans across industries, organizations, workloads, and geographies to learn about the technology advancements in the RISC-V ecosystem and visibility of RISC-V successes. The event is December 6 – 8, in-person in San Francisco or virtually from anywhere in the world – Linux Foundation via Twitter.
PyCon US 2022 planning is underway. The team is planning to host the event in person with an online component. April 27, 2022 – May 5, 2022. Head over to the PyCon US 2022 website for details about the conference and more information about the sponsorship program – PyCon Blog.
Send Your Events In
As for other events, with the COVID pandemic, most in-person events are postponed or cancelled. If you know of virtual events or events that may occur in the future, please let us know on Discord or on Twitter with hashtag #CircuitPython.
20211104 is the latest CircuitPython library bundle.
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 – 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
Events Manager – Hack Club – Adafruit Jobs Board.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 31,631 humans, thank you! Adafruit believes Discord offers a unique way for CircuitPython folks to connect. Join today at https://adafru.it/discord.
ICYMI – In case you missed it
The wonderful world of Python on hardware! This is our Python video-newsletter-podcast! The news comes from the Python community, Discord, Adafruit communities and more and is reviewed on ASK an ENGINEER Wednesdays. The complete Python on Hardware weekly videocast playlist is here.
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.
And lastly, we are working up a one-spot destination for all things podcast-able here – podcasts.adafruit.com
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.