View this email in your browser. Warning: Flashing Imagery
Welcome to the latest Python on Microcontrollers newsletter! CircuitPython is so close to releasing version 8.1.0 with the latest release candidate 0 out now. There are many great projects this week with MicroPython, including a physical motorized Minecraft box made with LEGO. Linux site LWN reviews MicroPython v1.20 and so much more. Enjoy. – 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 Release Candidate 0 Is Out
CircuitPython 8.1.0-rc.0, a release candidate for 8.1.0, is now available. The team believes it is stable, and are making a release candidate for further testing before final release – Adafruit Blog and Release Notes.
Notable changes to 8.1.0 since 8.0.0
- Silicon Labs (SiLabs) MG24 microcontroller family port (
silabs), contributed by Silicon Labs.
- Add animated GIF support, including palette support:
safemode.py, for programmatic handling of safe mode.
- Add ESP-NOW support on Espressif.
synthio improvements and new features; API is still experimental and may change after 8.1.0.
picodvi on RP2040: DVI/HDMI framebuffer and
- CPU frequency is settable on RP2040.
- Add 7-color e-ink display support.
- Allow setting pystack size in
- Allow static IPv4 addresses for access points.
- Add dither support to
Making a Minecraft Block Real Using LEGO and PyBricks (MicroPython)
Brick Machines on YouTube created a 100% working LEGO® Shulker Box from Minecraft. It is fully functional and looks just like the one in the game. Not only can this shulker box store items, it has password protection too. It had the same animation as Minecraft and some extras. The best part of the video is the end…there is a big explosion you won’t want to miss!
The build uses PyBricks, which is MicroPython on LEGO programmable blocks – YouTube via Twitter.
Review of MicroPython v1.20
LWN.net, a Linux site, provides a thorough review of the latest MicroPython release – v1.20 – LWN.net.
For those looking for an easy way to program microcontrollers, MicroPython has much to offer. Together with alternatives like Adafruit’s MicroPython fork CircuitPython and the education-focused Snek, it shows that Python has a place in the embedded world. The closest competitor for microcontroller development, Arduino, requires at least some knowledge of C++, but Python is generally easier to pick up. Moreover, as the WebAssembly port and its use as a smaller and faster PyScript runtime shows, MicroPython seems to be well suited for other constrained environments as well.
From Solderless Breadboard to Soldered Circuit – Electronics with Becky Stern
Once you have a working solderless breadboard prototype of your project, you can make it smaller, more durable, and more permanent by translating your project to a solder-type breadboard. Becky walks through the process for mapping and building a soldered circuit – YouTube and tutorial – DigiKey.
Raspberry Pi Pico W Lessons for Absolute Beginners
Raspberry Pi Pico W Lessons for Absolute Beginners is a video series by Paul McWhorter exploring using the Raspberry Pi Pico W with MicroPython – 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
This week, Tim streamed work on an eInk display, a built-in SD card, and Websockets.
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 Enumerate – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
The CircuitPython Show
The CircuitPython Show is an independent podcast hosted by Paul Cutler, focusing on the people doing awesome things with CircuitPython. Each episode features Paul in conversation with a guest for a short interview – CircuitPythonShow.
The latest episode was released Monday, May 22nd. CircuitPython core developer Dan Halbert joins the show and he shares discovering CircuitPython, advice for new contributors, release management, and more – Show List.
Project of the Week: Reviving the Assistive Technology Quirkey and Microwriter Keypads
Quirkey is CircuitPython code for the Pi Pico version of the Quirkey keyboard, based heavily on the work done by Microwriter. The device emulates a USB HID US keyboard and requires no specific driver. It does however need the Adafruit HID CircuitPython libraries which can be downloaded from Adafruit’s HID example web page or from GitHub. It now includes a simple “typing tutor” application – GitHub via Mastodon.
The Microwriter and Quinkey were 6-key chord keyboards created in the 80’s for use by people with various physical limitations such as brittle bones. They developed a following among all types of users being simple, reliable, easy to use, and effectively allowed instant touch typing at speed.
News from around the web!
Google Bard API is a Python package that returns responses from Google Bard via an API – GitHub.
A custom 19” LED ring from 5x 72 degree pieces. It is running CircuitPython on an Adafruit Feather RP2040. This will eventually be an illuminated lazy susan turntable for displaying projects – Mastodon.
Here’s my Raspberry Pi Pico bot. Chassis is Tinkercad-designed, code is MicroPython via Thonny. It moves forward, backs up in a random direction when sensing an obstacle, goes forward again. Great coding for 6-8th+ grades. Parts are $34, minus chassis, which could be made otherwise – Twitter.
ANAVI Macro Pad 12 and Arrows are coming to Crowd Supply. Running KMK/CircuitPython firmware on Seeed XIAO RP2040 – Crowd Supply.
HackyPi, the Hacking tool you carry in your pocket, is now shipping to backers and can be purchased. It is like a Rubber Ducky with a display, based on an RP2040 running MicroPython, CircuitPython or Pico C++ SDK – Kickstarter.
I ported my Feather weather display to an Adafruit PicoDVI. It is now running on HDMI upscale from 320×240. Using CircuitPython, it was originally on a TFT FeatherWing in an enclosure, side by side comparison. A work in progress – Mastodon.
An RP2040 / Raspberry Pi Pico based robot running CircuitPython for the TABLEBot Challenge – Mastodon.
Making a traffic light with LEDs, a Raspberry Pi Pico and CircuitPython – Twitter.
A DIY circular sequencer made with Raspberry Pi Pico and CircuitPython – Reddit and GitHub.
A CircuitPython driver for the ILI9488 display chip – GitHub via Twitter.
“The next step for the ‘radio’ project: UART Serial communications between Arduino and pyboard to start/stop music. The most challenging bit was to get the music to stop as soon as possible instead of when the current song is done playing. MicroPython
uasyncio came to the rescue” – Twitter.
“Version 2 of the device for testing light tightness of vintage camera bellows. A Pimoroni Tiny2040 powered by Raspberry Pi 2040, a BH1745 light sensor, with MicroPython and a CR2032 button cell. It’s now 25mm x 28mm x 15mm, not as small as I wanted, but much better and secure construction. – Twitter.
Eva is a lego minifig with an M5Stack AtomS3 for a head. It plays animations and MP3 music using MicroPython – Twitter (Japanese).
PyDev of the Week: Benjamin Bennett Alexander on Mouse vs Python
CircuitPython Weekly Meeting for May 22, 2023 (notes) on YouTube
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? FreakWAN.
Adafruit recently sold out of their stock of Bus Pirates and when they booked a reorder, they found it’s currently unavailable with no ETA for re-stocking. It made them think about revisiting this design, perhaps using an RP2040 instead: with native USB, CircuitPython and PIO, it might be easier to add new protocols! Ladyada did a “Circuit Pyrate” draft many years ago but it was based on the SAMD21 and she quickly ran out of space – another thing the RP2040 would excel at – Adafruit Blog.
The Lilygo T-QT V1.1 or Pro has an ESP32-S3 processor, an LCD display, WiFi, and supports Arduino and MicroPython – 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 was one more 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 Feather RP2040 RFM95 from Kattni
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 437!
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Statistics
Total Library Stats
- 168961 PyPI downloads over 310 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 8382
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 7796
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 2464
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1748
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1501
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1466
- Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1400
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1386
- Adafruit CircuitPython ESP32SPI (adafruit-circuitpython-esp32spi): 1287
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1249
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in!
I released CircuitPython 8.1.0-rc.0, the initial release candidate for CircuitPython 8.1.0 final, on Tuesday, May 16. If all goes well we will release 8.1.0 final sometime during the week of this newsletter.
I’m fixing a long-standing bug with TouchAlarm on Espressif. To find it, I did a “bisect” between a known good version and a “bad” version with the bug. Between the good and the bad version there are many changes. You can divide the consecutive list of changes in half, and test the version in the middle, between the two halves. That version will work or not. Now you have a new good or bad version. You divide the new list in half, and try again. Each time you eliminate half the changes. Eventually you get down to a single change, which should be the change that caused the bug. Bisecting lets you pinpoint where things went wrong. In my case, there were initially hundreds of changes, but it only took about eight steps to pinpoint the errant change.
This week I’ve been working on the code and guide for my Canary Nightlight collab project with 3D printing wizard Noe. Have you always wanted a blue canary for the outlet by the light switch, especially one who watches over you? We have you covered. I made some final changes to the code that make it more customisable, readable, and clear. I’m really happy with out how turned out. That guide should go live next week!
This past week, I worked on a number of things including some GitHub Pull Requests for Adafruit_Python_PlatformDetect and Raspberry-Pi-Installer-Scripts. Some of these were to address issues that had been waiting while I had wrapped up other projects.
I also spent some time trying to fix Pulse Audio error messages on the Raspberry Pi for a collaboration project that I am trying to wrap up. While I wasn’t able to completely eliminate the errors altogether, I was able to reduce them. I was also fixing some issues with the Speech Recognition library crashing with some weird errors that I was finally able to get past just by looking at the included code, which shows the value of including basic working examples with libraries.
This week in synthesizers, I replaced the original API for vibrato & tremolo with a much more generic one based on low-frequency oscillators and arithmetic blocks. This also enabled pitch bend to be applied to the ring waveform of a note, in addition to applying to the primary waveform.
Creating networks of these blocks lets you create lively, always-varying sounds in effectively limitless ways.
This work, which is in an open pull request, does make incompatible changes to the synthio API.
I also implemented FIR filtering in the Synthesizer, making it possible to apply low/high/notch/band filters to the generated audio. This takes a lot of computation so it’s best done on a Metro M7 or an overclocked RP2040. This may change, as I have received the suggestion to investigate IIR filtering as an alternative.
Just a reminder, as we’re approaching the release of 8.1.0: everything about the synthio API is considered experimental, so it may change incompatibly as it develops, even if it’s otherwise in a “stable” release.
This past week has largely been working on a debug probe (mostly SWD) library and porting the higher level flashing functions from Adafruit_DAP on top of it. This will make it possible to flash the UF2 bootloader to a SAMD21, SAMD51 or nRF52 from any CircuitPython board. This can revive boards that have had their bootloader corrupted for some reason. Right now it bitbangs the protocol which makes it slow but also means it’ll work on any CircuitPython board that has enough RAM to run the code.
This week I published two new product guides. The first was for the RP2040 CAN Bus Feather. This Feather has an MCP25625 CAN controller onboard, which is an MCP2515 with a built-in transceiver. The second guide was for the PiCowbell with DVI Output. This board lets you add DVI output to your Pico or Pico W. For this guide I ported Phil B.’s excellent 16bit_hello Arduino code to CircuitPython. It was a fun exercise to port that code since I had to use garbage collection and pop() to clean-up the displayio group to keep enough memory in play for the examples to continuously loop.
The next MicroPython Meetup in Melbourne will be on May 24th – Meetup. From the April 26th meeting – Notes and Video.
EuroPython 2023 will be July 17-23, 2023, in Prague, Czech Republic and Remote – EuroPython 2023.
PyCon UK will be returning to Cardiff City Hall from Friday 22nd September to Monday 25th September 2023 – PyCon UK.
Hackaday has announced that the Hackaday Supercon is on for 2023, and will be taking place November 3 – 5 in Pasadena, California, USA. They’d like to hear your proposals for talks and workshops! The Call for Speakers and Call for Workshops forms are online now, and you have until July 18th to sign up – Adafruit Blog and Hackaday.
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.5 and its unstable release is 8.1.0-RC.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20230522 is the latest CircuitPython library bundle.
v1.20.0 is the latest MicroPython release. Documentation for it is here.
3.11.3 is the latest Python release. The latest pre-release version is 3.12.0a7.
3,538 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.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 37,349 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.
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.