View this email in your browser. Warning: Flashing Imagery
Welcome to the latest Python on Microcontrollers newsletter! This week, Beagle has a new single board Linux computer aimed at AI. Two new versions of CircuitPython were released. And actors have been hacking in and around PyPI to inject corrupted libraries into programs. That and much more, including many projects using Python on Raspberry Pi this week. – 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:
BeagleBoard.Org Delivers the BeagleY-AI
The new BeagleY-AI provides 4 TOPS of Edge AI acceleration in a Raspberry-Pi like form factor. It has a Quad-core 64-bit Arm®Cortex®-A53 CPU subsystem at 1.4GHz, 4GB RAM, gigabit Ethernet and a PCIe Gen 3 lane along with Bluetooth and WiFi and more – BeagleBoard.org.
CircuitPython 9.0.2 and 9.1.0-beta.0 Released
CircuitPython 9.0.2 is the latest bugfix release of CircuitPython, and is a new stable release. It fixes using HTTPServer on Pico W and turns off displayio
renaming warnings (9.0.1) and fixes an Adafruit SHT4x Trinkey pin error (9.0.2). Thanks to the community for testing version 9 thoroughly – Adafruit Blog and release page.
CircuitPython 9.1.0-beta.0, a beta for CircuitPython 9.1.0, is the new unstable release. This release has known bugs that will be addressed before 9.1.0 final – Adafruit Blog and release page
Notable changes since 9.0.0
Audio
- RP2040
I2SOut
supports BLCK and LRCLK in either order.
Built-in modules
- Enhance
collections.deque
functionality.
- Add
keypad_demux.DemuxKeyMatrix
: use multiplexer for one side of a keypad matrix.
- Add integration-based debouncing to keypad.
Internal
- Espressif: update to ESP-IDF v5.2.1.
A New Adafruit Discord Milestone: 39,000 Members
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 39,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 – Adafruit Blog.
ecoEDA: Recycling E-Waste During Electronics Design in KiCad
ecoEDA is a Python-based tool that integrates with KiCad. It is designed to provide suggestions of recycled components whenever you add a new symbol to your schematic – GitHub.
170,000 Users Caught in Fake PyPI Hack
More than 170,000 users are said to have been affected by an attack using fake Python infrastructure. The Top.gg GitHub organization – a top resource for Discord bot makers – as well as other developers were targeted, and it all hinged on various supply chain attack techniques to distribute malware-infected Python PyPI packages. That malware stole data from people’s browsers, Discord app, crypto wallets, and files that matched certain keywords. There were multiple prongs to this remarkably complicated attack: clones of popular Python packages such as Colorama, a typosquatted domain for Python packages, and code obfuscation – The Register.
PyPI shut down creation of new users and projects for ten hours due to security concerns for typosquatting package names – Ars Technica.
Adafruit IO in 2024 Survey Last Chance
Inspired by Scott’s blog post, CircuitPython 2024, the Adafruit IO developers and designers are requesting feedback (from you!) to help guide development of Adafruit IO in 2024. Wrapping soon, please respond – Adafruit Blog.
“If you’re a current Adafruit Free IO user, an Adafruit IO Plus (paid) user, or have previously used Adafruit IO in the last year, we want to hear from you!”
See CircuitPython Lead Developer Scott Shawcroft at PyCascades 2024
PyCascades 2024 is back in Seattle, Washington, USA and online, April 5-8th at the University of Washington, Kane Hall. CircuitPython lead developer Scott Shawcroft will be presenting the talk “Cutting the USB cord: wirelessly programming CircuitPython” on April 7th at 2 pm PST – PyCascades.
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 work on PyCascades prep.
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: Which Chip is Running – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
CircuitPython Weekly Meeting
CircuitPython Weekly Meeting for March 25, 2024 (notes) on YouTube.
Project of the Week: A Mini Observatory
A 3D printed, mini motorized observatory with Raspberry Pi and camera programmed in Python and CircuitPython – Raspberry Pi News via The MagPi and Instructables.
Popular Last Week
What was the most popular, most clicked link, in last week’s newsletter? My Raspberry Pi 5 is a delight, and I’m excited about all its future uses.
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.
Using GitHub Codespaces for CircuitPython development – Adafruit Playground.
Automating PIP & CircuitPython-Stubs updates for Windows Users – Adafruit Playground.
News From Around the Web
A hat mounted camera using a Raspberry Pi Zero 2 W, Camera Module 3 and Python – Tom’s Hardware and GitHub.
Berkeley SoftFloat 3e is a free, high-quality C software implementation of binary floating-point that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat is completely faithful to the IEEE Standard, while at the same time being relatively fast – John Hauser, GitHub and Fork.
Laurens Valk upgraded a childhood LEGO train to use Pybricks MicroPython and make it stop at train stations. No rail loops required – Mastodon.
A one handed chording keyboard running CircuitPython on a Raspberry Pi Pico. The case and keys are 3D printed – Instructables.
Did you know, on an RP2040, you can use DMA with PIO from within MicroPython? – GitHub via X.
A modular macro keyboard system, Ocreeb MK2, uses a Xiao RP2040 running CircuitPython – Instructables and GitHub.
How to connect a BH1750 to a Raspberry Pi Pico/Pico W with MicroPython – hackster.io and YouTube.
An SMS-controlled remote heating controller with Raspberry Pi and Python – Hackaday.
A Raspberry Pi spins a precision movement stage for beautiful up-close microchip videos – Tom’s Hardware and YouTube.
A Raspberry Pi Zero 2 and Python powered mecanum-wheeled robot – HackSpace Magazine.
Making a Raspberry Pi-based software defined radio cyberdeck – HackSpace Magazine.
ESP32 Guide 2024 – choosing and using an ESP32 board – YouTube.
How to install Android 14 on your Raspberry Pi – SlashGear.
Reading and writing WAV files in Python – Real Python.
Why choose async/await over threads in Rust? – notgull.
New
unPhone is an all-in-one LoRa, WiFi and Bluetooth dev device with touchscreen, expandable with two FeatherWing slots and LiPo battery, uses an ESP32-S3, programmable in C++ or CircuitPython – Pimoroni.
The Espressif ESP32-C5 microcontroller was announced in June 2022 as the first dual-band WiFi 6 IoT chip from the company. It’s been quiet since then, but things are about to change as the ESP32-C5 beta board’s documentation has very recently been released – CNX Software.
Walter packs 5G, WiFi, Bluetooth, and GNSS into a certified board as short as a AA battery – hackster.io.
The Arduino Nano Matter board specifications and price have been announced – 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 were two new boards 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
CircuitPython Elgato WiFi Light Controller from Liz Clark
Vintage Computer to HDMI with Feather DVI & CircuitPython from Jeff Epler
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 480!
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
- 151767 PyPI downloads over 325 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 9556
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 9166
- Adafruit CircuitPython ConnectionManager (adafruit-circuitpython-connectionmanager): 8116
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 2191
- Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1463
- Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1395
- Adafruit CircuitPython PCA9685 (adafruit-circuitpython-pca9685): 1223
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1138
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1133
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1097
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in:
Dan
I made bugfix releases CircuitPython 9.0.1 and 9.0.2 in quick succession this last week, and also released CircuitPython 9.1.0 Beta 0, which has some new features and has updated the version of ESP-IDF it uses, courtesy of Scott.
I’m continuing to fix bugs in 9.0.x and 9.x.x. The day I wrote this, I found out AnalogIn
is not working properly in 9.x.x. This turns out to be a compilation issue of some kind: when compiled with gcc 10, the code works fine, but not when compiled with gcc 13. It may be a statement reordering problem. I have a hackish fix but will be trying to understand this problem in more detail.
Melissa
This past week was spent mostly working on GitHub issues. Some of these issues were requests for new features like adding PWM support to the Jetson Nano. Most of these were bug fixes like updating the CircuitPython installer to run on Windows computers and fixing some of the Arduino repos that were no longer passing CI (Continuous Integration) due to compilation warnings.
Tim
I’ve been updating Learn guide code and pages for new displayio
API, although we’ve decided to change how the warnings are working so I am going back through to revert the changes I made to guide pages and we will hold off until further down the line when the backwards compatibility is removed entirely.
I’ve started building out a basic Tic Tac Toe game that will get integrated into a conference badge for PyCon. Lastly, I’ve managed to get working some example code that loads an RSA key pair and uses adafruit_httpserver
to receive a message encrypted in the front end with the public key and then uses adafruit_rsa
library to decrypt it in the backend and show the plain text to the user.
Jeff
I had a chance to do a project for myself using CircuitPython this week. It’ll probably emerge as a Learn guide in the next month or two, but I’ll spoiler it here: I made a video converter for an old Xerox 820 (8-bit CP/M computer) to HDMI using the Adafruit Feather RP2040 DVI. This is a very niche display (it is 560×240 pixels at 59Hz) but the technique might apply to other monochrome computers of the era.
In the course of doing this, I put in a Pull Request to add a 640×240 video mode to picodvi
. This is a very non-square resolution, but such modes were common in old computers; for instance, CGA featured a 640×200 mode that this would allow in a letterboxed fashion.
For those who may be immediately interested, I’ve published a version of the code as a GitHub gist.
Scott
This week I wrapped up the update to ESP-IDF 5.2. It’ll be released in CircuitPython 9.1. I’m continuing work on USB host FeatherWing support in CircuitPython after Thach added deinit
functionality to TinyUSB. Thanks Thach!
Liz
This week I worked on a project to control Elgato key lights with CircuitPython. The Elgato lights use an app that accepts HTTP requests to control turning them on and off, brightness and color temperature. I used a Feather ESP32-S3 Reverse TFT to connect to WiFi and send the requests with the onboard buttons. I also added in a rotary encoder to dial in color temperature and brightness. This was really fun to work on and I might expand the project further if I have time by trying to use MDNS to automatically find the lights on the network.
Upcoming Events
The next MicroPython Meetup in Melbourne will be on April 24th – Meetup. You can see recordings of previous meetings on YouTube.
The 2024 Open Hardware Summit will be taking place May 3 & 4, 2024 at Concordia University and lespacemaker in Montreal, Canada – oshwa.org.
PyCon US 2024 launches May 15-23, 2024 in Pittsburgh, Pennsylvania US – PyCon US.
Open Sauce, the Maker extravaganza, is returning to San Francisco, California June 15-16 – Open Sauce.
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 9.0.2 and its unstable release is 9.1.0-beta.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20240326 is the latest Adafruit CircuitPython library bundle.
20240326 is the latest CircuitPython Community library bundle.
v1.22.2 is the latest MicroPython release. Documentation for it is here.
3.12.2 is the latest Python release. The latest pre-release version is 3.13.0a5.
3,861 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, Instagram), 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.