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). Over 8,800 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 latest 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. Let’s get started!
The Adafruit Learn System Project Bundle
New in the Adafruit Learn System: Project Bundles! Gone are the days of digging through the Adafruit CircuitPython Library Bundle to find the libraries you need. You can now easily download the code, libraries, and any images, sounds and so on, in one zip file.
Ladyada discusses it on last weekend’s Desk of Ladyada live stream!
To use the Project Bundle:
Above any embedded code in a guide in the Adafruit Learn System, you’ll find a Project Zip link.
Click the link 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!
Check it out in a guide in the Adafruit Learn System!
This feature is still new, so there may be changes to how it works in the near future. For example, we intend to make the link more obvious.
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.
Hackster Café Featuring Thea Flowers
CircuitPythonista Thea Flowers is interviewed in this episode of Hackster Café. Thea creates brilliant synth modules and accessories, some of which can be programmed using CircuitPython! Check out the full interview on YouTube.
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams his work on BLE file transfer.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.
News from around the web!
You can make smooth graphics animations using displayio and the Adafruit_Displayio_Layout widget “easing” functions – Twitter.
Eight rotary encoders with switches wired up to Pico with no extra hardware, supported by CircuitPython – Twitter.
Building a Raspberry Pi Pico videoconference controller running CircuitPython – Electromaker.
A sock-friendly, CircuitPython-powered Pico-based kick keyboard – Twitter.
Build a prank project with HID device using Raspberry Pi Pico and CircuitPython – Element14.
CircuitPython in one video – YouTube.
How to add W5500 ethernet to a Raspberry Pi Pico using CircuitPython – Hackster.
Adafruit’s FunHouse is a home shaped automator – Make Use Of.
Raspberry Pi Pico Guitar Hero controller is ready to rock – Tom’s Hardware.
Pico Phone runs CircuitPython – Hackster.
How to make a Raspberry Pi Pico LED Beret – Tom’s Hardware.
Cheat at cornhole with a bazillion dollar robot – Hackaday.
Raspberry Pi Pico-powered stream deck keypad – Tom’s Hardware.
Cat zoom demo with the Neo Trinkey running CircuitPython – Twitter.
Cytron Maker Pi Pico works with CircuitPython – Tom’s Hardware.
WiFi + LCD pHAT running CircuitPython – Twitter.
This Eurorack module uses PWM to generate CV, programmed with CircuitPython – Twitter.
A fob watch with a NeoPixel ring, real-time clock and running CircuitPython – Twitter.
A Vintage Phone as a USB MIDI Controller, with CircuitPython on a Raspberry Pi Pico – Twitter.
Coming soon: a DIY bot running CircuitPython – Twitter.
Raspberry Pi Pico running the much-friendlier CircuitPython – Twitter.
ESP32-S2 and CircuitPython come together on FeatherS2 – Twitter.
March 2021 programming projects including CircuitPython – Eric’s Binary World.
Programming the Raspberry Pi Pico using CircuitPython in Thonny – Twitter.
Raspberry Pi Pico stream deck using Pimoroni RGB keypad – piamble.wordpress.
99 circles demo with Adafruit Metro M4, Gameduino 3X Dazzler and CircuitPython – Twitter.
ScoutMakes Bluetooth Fun: open source, CircuitPython-compatible, Bluetooth-enabled STEM electronics kits – Crowd Supply.
Science project using Feather RP2040 and two servos, running CircuitPython – Twitter.
Testing the ATMega0 Relay Shield – Twitter.
Jurigged lets you update your code while it runs – GitHub.
A first project with FunHouse: a Home Assistant light control – GitHub.
Graphics routines for Raspberry Pi Pico Screens using MicroPython – Raspberry Pi.
Remake of Manic Miner’s collapsing platforms in this PyGameZero example – Raspberry Pi.
Completing a cosplay with CircuitPython-powered wings – Twitter.
Intro to Raspberry Pi Pico and MicroPython Part 1: Blink – YouTube.
A Python 3 cheat sheet – Twitter.
A list of Python books in English that are free to read or download – GitHub.
CALM #30, including some history of MicroPython and CircuitPython – YouTube.
The k-Nearest Neighbors (kNN) Algorithm in Python – Real Python.
Python vs Java: Object Oriented Programming – Real Python.
A review of the Pimoroni Pico Explorer Base – Blogdot.
A “simple” bot with laser beams and lots of stuff running Python on a Pi Zero W – Hackster.
No Python Interpreter? This simple RAT installs its own copy – sans.edu.
Create a remote gesture controller using MQTT and Tactigon Skin – Hackster.
Create a Bluetooth repeater using BleuIO and Python – Hackster.
How to interface an OLED with a Raspberry Pi Pico and display large fonts – YouTube.
6 ways Python can automate tedious processes for the modern marketer – Demandgen.
ESP32/MicroPython server + Raspberry Pi/Python client, transmit image via WiFi TCP socket – Hello Raspberry Pi.
Raspberry Pi Pico first project – smist08.wordpress.com.
Another Adafruit QT Py with Raspberry Pi’s RP2040 chip – Hackster.
Code your own Twitch chat controls for robots, or just about anything else – Hackaday.
A price tracker written in Python – Hackster.
The adorable Neo Trinkey redefines USB flash – Hackster.
Adafruit Feather RP2040 First Impressions – smist08.wordpress.com.
Python Will Soon Support Switch Statements – Hackaday.
Edge AI – What is it and What can it do for Edge IoT? – Seeed Studio.
ZenCad is a library for parametric 3D modeling – GitHub.io.
Python library for configuring a wide range of IP cameras that use the NETsurveillance ActiveX plugin XMeye SDK – GitHub.
A programming environment for Lua for the Raspberry Pi Pico microcontroller – GitHub.
An open source cookbook written using Python – Opensource.cooking.
Python behind the scenes #10: how Python dictionaries work – Ten Thousand Meters.
PyDev of the Week: Will McGugan on Mouse vs Python
There are many Trinkeys in the works – and every Trinkey will have its own friend. This is the Neo Trinkey friend! – Adafruit.
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 we had 13 new boards added!
- Feather ESP32-S2
- Feather ESP32-S2 with TFT
- ItsyBitsy RP2040
- QT Py RP2040
- CP Sapling M0 with SPI Flash
- MicroMod nRF52840 Processor
- Pro Micro – RP2040
- StackRduino M0+ PRO
- Rotary Trinkey – SAMD21
- Thing Plus – RP2040
- STM32F411CE Black Pill with Flash
- FunHouse – WiFi Home Automation Development Board
- Neo Trinkey – SAMD21
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 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 310!
Here’s this week’s new CircuitPython libraries:
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 made the final, stable, release of 6.2.0 on Monday, April 7. There was only one bug we felt we needed to fix between rc.0 and stable, so we didn’t bother with a second release candidate. Thanks to all the people who help to make 6.2.0: we had many new contributors, and an incredible number of fixes and additions through the betas.
Late last week I had an idea about having an interrupt throw an exception. It turned out to be a bad idea in general, but it provoked a lot of good discussion on discord and GitHub about how to handle interrupts in safe and simple ways. Please contribute to our GitHub issue Interrupts: what are your use cases? with your uses for interrupts.
I’m now working on dynamic USB descriptors as I mentioned last week. It’s just in time: I’m seeing at least two queries a day about whether it’s possible to enable or disable various USB devices.
With the stable release of version 6.2, it’s a good time to look back at what we’ve done since 6.1. Here are some of the highlights from my own work:
- I helped us to adopt a source code formatter, “uncrustify”, so the source is tidier and more consistent. The value of consistent source style can’t be overestimated, though it’s not always apparent until you work on code that others have written
- I did a nice range of clean-ups and bug-fixes, such as one that lets ulab directly manipulate the contents of an RGB Matrix display (I still need to do a demo that takes advantage of this)
- I started to add more ways to get data between ulab arrays and displayio Bitmaps
- I improved the RP2040 (“Pico”) builds with new features & bugfixes in many areas such as urandom, rtc, and rp2pio.
There’s a lot of good stuff in 6.2.0, and it’s amazing to think it’s just our progress since January. For you, it’s a great time to check it out and let us know how updating you own projects goes. For me, it’s time to knuckle down and get started on what will become CircuitPython version 7!
Another successful newsletter went out this week! Thank you to everyone who has been contributing.
I’ve started working on the guide for the new Neo Trinkey. It’ll have everything you need to get started with your new board. Keep an eye out for that coming soon.
I’ve also continued work on the template quest. Specifically, I’ve been working on the pages applicable to the Neo Trinkey since that guide is going up soon. As this board is pretty simple, it’ll only include information on NeoPixels and capacitive touch, so those are the pages I’ve been focusing on. Working on getting some templates live soon so I can share them!
This past week I’ve been getting started with alarms and sleep on the RP2040, digging into the documentation and doing some basic tests and implementation. The RP is a little different from other chips in that it doesn’t lose any data when it goes into deep sleep – this is a handy feature for conventional C programs, but it doesn’t jive that well with Circuitpython’s API, which expects a full reset after a deep sleep. So I’m spending a little extra time making sure that this won’t break everything horribly when implemented.
Outside my RP spinup I wrapped up some final deep-sleep related issues for the STM32 and put through the first finished draft of the power PR, along with an unrelated issue across all ports where light sleep was misreporting its wakeup cause depending on how you tried to fetch that information.
We had a community contributor add the AudioPWMIO module to the STM32 port this past week, which I had the chance to review and test. It’s a nice feature, and I’m hoping we’ll see more audio implementations come in over time, as they’ll benefit a lot from the extra resources on the F405 Feather.
This week I wrote the new FunHouse library. Like several other libraries, this one is based on PortalBase which is the shared library that acts as a base library for Portal style devices. I added a couple of examples to the library as well so folks can start using it right away. I always find it fun to experiment and make design decisions so that it is both easy to use and maintainable. If you would like to check out the new library, you can find it in the GitHub FunHouse Repo.
I also updated circuitpython.org with a number of missing boards. I found there was a particular library that was confusing the backend and instead of the missing boards appearing as “Unknown”, they didn’t show up at all and so nobody was aware that it was an issue until enough missing ones accumulated that people were questioning why certain boards weren’t there.
This week I’ve completed my initial BLE file transfer protocol implementation. I’ve written up the protocol and created a pull request to get feedback on it. Trevor has gotten it going and will be trying to integrate it into the iOS side of things. In addition to replying to feedback, I’ll be fixing the example to work with larger file transfers.
I’m also prepping to present at the Open Hardware Summit about interface design. I’ll be giving a quick and (hopefully) concise talk with tips about designing interfaces. Interfaces encompass mechanical, electrical and software design.
The online GeoPython conference is focused on Python and Geo, its toolkits and applications. April 22-23, 2021 – https://2021.geopython.net/.
PyCon US, the annual official annual Python gathering, has been announced to be held online May 12-15, 2021. Sprints will be held May 16-18, 2021. More information and signups at https://us.pycon.org/2021/
EuroPython, the largest conference for the Python programming language in Europe, has been announced to be held online July 26 – August 1, 2021. More information at https://ep2021.europython.eu/
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.
20210410 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
TEALS Volunteer – Microsoft Philanthropies TEALS Program – Adafruit Jobs Board.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 28568 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.