View this email in your browser. Warning: Flashing Imagery
Welcome to the latest Python on Microcontrollers newsletter! At long last, CircuitPython 8 emerges from testing into release. Many long hours have gone into this release and the community deserves so much credit for making it happen – thank you. Resources to help you find the right boards continue to be in the news. Some really neat content from the web this week also. If you have something to share, please send it in to firstname.lastname@example.org. – 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.0 is Released!
CircuitPython 8.0.0, the latest major revision of CircuitPython, is now available and is the latest stable release – GitHub.
NOTE: Since 8.0.0-beta.6, the file for specifying startup values for WiFi, etc., is now called settings.toml instead of .env, and uses slightly different syntax. Use double quotes instead of single quotes. Further documentation is here.
WARNING: The flash partitioning for 2MB and 4MB flash ESP32 and ESP32-C3 boards has changed since 8.0.0-beta.2. When you load 8.0.0-beta.3 or later over beta.2 (or vice versa), on these boards, CIRCUITPY will be erased and reformatted.
WARNING: The flash partitioning for the Raspberry Pi Pico W has changed since 8.0.0-beta.1. When you load 8.0.0-beta.2 or later over beta.1 (or vice versa), on the Pico W, CIRCUITPY will be erased and reformatted.
Notable changes to 8.0.0 since 7.3.0
- Add WiFi workflow with browser-based device discovery, filesystem browsing, upload, download, file editing, serial/REPL connection (available on Espressif and Pi Pico W).
- Add a one-line status bar, which displays connection status, last exception, and version on a terminal window title or on the top line of an attached display. Mu 1.2.0 and Thonny 4.0.x and later are able to suppress status bar information in the REPL output.
settings.toml file in CIRCUITPY provides environment variable values. Some value names are read by CircuitPython to specify WiFi connection parameters, BLE name, and other startup values. But you can also use
settings.toml to specify your own parameters for your programs. Values from
settings.toml can be retrieved using
os.getenv(). More details here.
- WiFi functionality implemented on the Raspberry Pi Pico W.
- Revised Espressif camera support, now available on ESP32, ESP32-S2, and ESP32-S3.
- Bulk analog input:
analogbufio (available only on RP2040 for now).
- Pin state can be preserved during deep sleep (available only on Espressif for now).
- Allow setting USB VID, PID, manufacturer, and product ids at runtime.
collections.deque on most builds.
AnalogIn values are full range from 0 to 65535, instead of having zeros on low-order bits.
- In-place firmware update (
dualbank) capability may be disabled at runtime in favor of a larger CIRCUITPY drive. This is the default.
espulp module, for running programs on the ULP co-processor in Espressif chips.
memorymap module for general though limited access to various memory regions.
- A serial “break” on the USB or UART REPL serial connection will cause a
KeyboardInterrupt, like ctrl-C. The advantage over ctrl-C is that the break interrupts even if the input buffer is full.
hidden property to
- Add native
_pixelmap.PixelMap support, for speed.
- Chained exceptions are now implemented.
memorymap to allow access to raw memory locations (currently only on Espressif).
Video: Innovation Coffee – David Groom presents Make:’s Annual Guide to Boards
On this week’s episode of the Innovation Coffee videocast, David Groom from Make: presents discusses the recently released Annual Guide to Boards (the hottest topic in last week’s newsletter) – YouTube.
ESP32 Buyer’s Guide: Different Chips, Firmware, Sensors
The ESP32 Buyer’s Guide describes the different chips, firmware, capabilities, sensors etc. of this popular microcontroller line – eitherway.io.
Python 3.11 Ported to Many New (Old) Operating Systems using WebAssembly to C
Python 3.11 has been ported to many new (old) operating systems using w2c2, the WebAssembly to C compiler, including but not limited to: Mac OS 9 and Mac OS X Server 1.0 on PowerPC, OPENSTEP 4.2 and NeXSTEP 3.3 on Sparc – Twitter and GitHub.
News from the Python Software Foundation
Python 3.12.0 alpha 4 released – python.org.
The PSF is hiring a Security Developer-in-Residence! – python.org.
Exploring JSON Files interactively
A tool for exploring JSON APIs interactively. It’s also good for pasting in a Mastodon profile link and see the data that is generated – Mastodon, tool on the web: json.blinry.org and source code.
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 IS31FL3741 Testing and Core displayio Argument Validation.
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 Iterate Up and Down – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
Project of the Week: EBike/EScooter modular DIY electronics using VESC and CircuitPython
Over the years, Jorge Pinto owned a few different EBikes / EScooters from different brands, and found limitations with all of them, mainly on the software. Knowing that in general, all EBikes and EScooters are equal, Jorge decided to replace the original motor controller electronics and display, from different EBikes/EScooter vendors, with a modular DIY version and running custom software.
The resulting module uses the popular VESC for the motor controller and an ESP32 board running CircuitPython. It is programmed wirelessly with a phone or a PC (just editing Python text files) – OpenSourceEBike.github.io, YouTube, GitHub.
News from around the web!
Mark Komas has the start of native animated GIF support for CircuitPython. Still work to do – Twitter.
Making a DIY Mouse Jiggler with Raspberry Pi Pico and CircuitPython – Tom’s Hardware and Adafruit Blog.
Find My Cat, the GPS Tracker for Pets. Uses a Raspberry Pi and MicroPython – Instructables and .
A CircuitPython driver/library (with examples) for the new Person Sensor by Useful Sensors – GitHub via Twitter. This is in addition to the manufacturer’s CircuitPython examples.
A Pi Pico power meter with MicroPython – hackaday.io.
Version 2.0 of Liz’ Octoprint project. Now the 3 buttons on the side can send messages to Octoprint from CircuitPython via Adafruit IO – Mastodon.
bbServer – a Mini DIY Minecraft Server with an OLED display and NeoPixels, programmed in CircuitPython – Hackaday.io.
Connecting a BME280 to a Raspberry Pi Pico to get temperature, pressure, and humidity using CircuitPython – hackaday.io.
A new version of my PicoTouch capsense MIDI controller PCB for the Raspberry Pi Pico! Now it’s black and comes pre-assembled with all the SMD resistors! Comes with an easy-to-edit CircuitPython program if you want to customize it. Maybe for you it’s a macropad instead of a MIDI controller? I really like having a super-thin (6mm!) controller to stick in my bag – Mastodon and Tindie.
Making a HID Keyboard Device with a Wii Classic controller, Raspberry Pi Pico, and CircuitPython – hackster.io.
A digital watch display in MicroPython – Instructables and YouTube.
Fake Parallel Printer tool: a hardware dongle with a DB-25 connector that plugs into the parallel printer port available on nearly all computers and equipment in the eighties and nineties – GitHub.
Automate Mastodon interactions with Python – opensource.com.
Macstodon is a basic Mastodon client for Classic Mac OS written in Python – GitHub.
Carbonyl is a Chromium based browser built to run in a terminal. It supports pretty much all Web APIs including WebGL, WebGPU, audio and video playback, animations, etc. – GitHub.
How I added C-style for-loops to Python (or alternatively: How I made the most cursed Python package of all time) – sadh.life.
Class Vs. Instance Variables in Python 3 – howchoo.
PyDev of the Week: Thomas Passin on Mouse vs Python
CircuitPython Weekly Meeting for February 6th (notes) on YouTube
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? Digi-Key and Make: Announce New Boards Guide and Companion Augmented Reality App.
The ESP32-C6 is here! We already knew about the RISC-V and the WiFi6 parts, but we were pleasantly surprised to see Zigbee and Thread, along with Matter support! – ElectroMaker via Twitter.
Adafruit is carrying C6 development modules (for advanced use) – Adafruit.
Wukong2040, a multifunctional breakout board designed for Raspberry Pi Pico, programmable in CircuitPython – Twitter and ELecfreaks.
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 ten 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!
See N Say Brain Transplant from John Park
Holiday Tree with Feather RP2040 Scorpio from Noe and Pedro
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 403!
Here’s this week’s new CircuitPython libraries:
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Stats
- Total Library Stats
- 182931 PyPI downloads over 306 libraries
- Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 31559
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 30814
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 1633
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1593
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1116
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1105
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1101
- Adafruit CircuitPython MCP230xx (adafruit-circuitpython-mcp230xx): 1068
- Adafruit CircuitPython HT16K33 (adafruit-circuitpython-ht16k33): 1057
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1054
What’s the team up to this week?
What is the CircuitPython team up to this week? Let’s check in!
I released CircuitPython 8.0.0-rc.1 on January 29 and rc.2 on February 1. There will probably be an rc.3, with very minor changes, and then if that shows no showstopper issues, we should be able to release CircuitPython 8.0.0 final very soon (it was released February 6th – Ed.)!
I have also been working on non-CircuitPython issues. I diagnosed a rare power-down sequencing issue on a few boards. I am also looking at SAMD21 UF2 bootloader problems: the BOOTPROT (bootloader protection) fuses are not being set on some boards, and the bootloader should really be doing brownout protection.
Wrapped up the EYESPI guide updates with Liz. Now we’re onto the guide for the Adafruit Reverse TFT Feather ESP32-S2. This will be a big one, though it is very similar to the Adafruit ESP32-S2 TFT Feather guide. There are two basic differences: the battery monitor is a different chip, and (obviously) the display is on the bottom. If you picked up one of these microcontrollers, keep an eye out for this guide!
After that, I finished up a Pull Request to add some initial code for the CircuitPython Installer in order to test CORS issues that I’ve been experiencing. Working with another team member, we were able to fix the CORS issues in a central place for the CircuitPython firmware and I’m just about finished fixing it with the bootloaders as well.
I also added a number of new boards to circuitpython.org that were added as part of the new CircuitPython Release Candidates.
I’ve been working on the IS31FL3741 driver this week. I submitted a PR for the library to allow it to work with the LED_Animation library for the RGB Matrix device. I’m also digging in to an issue in the core module driver implementation that caused it to have issues on builds newer than 7.3.3. I’m bisecting thru the commits between the known good and bad versions to find the relevant change then I’ll try to submit a fix for it.
I had a couple of small PRs to CircuitPython this week. First, I added the missing D0/D1/D2 buttons to the Feather ESP32-S2 Reverse TFT. Second, I pulled in an update of ulab to fix several crashing bugs.
Most of my time over the last week was spent in the Arduino environment, working on adding a VT100-style terminal to Pico-DVI. This isn’t released, as it needs some polish. (OK, a lot of polish). One interesting possibility would be to load one RP2040 with the terminal sketch and connect to it with a second board using busio.UART to create a text terminal on a nice 800×480 display.
Last week I submitted a PR for Bangle.js 2 support and 7-color e-paper support. Its been a fight to get the CI happy though because it adds secure DFU support for the Bangle.js 2.
In the meantime, I’ve been scratching an itch to create a low-cost logic analyzer. In fact, the Scorpio can be configured for input. I’ve gotten it working with the sigrok-pico project. So, its been a matter of connecting the hardware and software pieces. Follow along with the pysigrok project.
I’m in the middle of a few projects right now. My main focus has been on an OctoPrint status viewer. Recently my partner setup OctoPrint for our printer and my first thought was could we do a CircuitPython project with it? Using Adafruit IO as an MQTT broker with the MQTT plugin, I was able to get a TFT Feather ESP32-S2 showing the current status of the printer (operational, connecting, offline, etc) and if a print was running, I displayed the progress for the print using the progress bar library.
It was suggested that I try to send MQTT messages to OctoPrint from the Feather too, which I was able to do through Adafruit IO and the OctoPrint MQTT Subscribe plugin. I’ve also switched to the new reverse mount TFT Feather ESP32-S2, which has three input buttons. Now if the printer is idle, I can send cooldown, heat up and reboot messages and, if a print is active, I can send pause, resume or cancel messages. This will be fully documented in a Learn Guide soon.
PyConFR 2023 is from February 16 to 19, 2023 in Bordeaux France – pycon.fr.
The next MicroPython Meetup in Melbourne will be on February 22nd – Meetup.
Unlock the Power of MicroPython on an Arduino: Join a Live Webinar March 9, 2023 – Elector.
PyCon US 2023 will be April 19-17, 2023, again in Salt Lake City, Utah USA – PyCon US 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.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20230206 is the latest CircuitPython library bundle.
v1.19.1 is the latest MicroPython release. Documentation for it is here.
3.11.1 is the latest Python release. The latest pre-release version is 3.12.0a4.
3,386 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.
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
Junior Bookkeeper – Adafruit Industries LLC – Adafruit Jobs Board.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 36,664 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.
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.