View this email in your browser.
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!
Piper Make Brings Block Programming to CircuitPython
Piper Learning released a new product, Piper Make, which is a browser-based coding platform for the Raspberry Pi Pico. It has a block-programming interface based on Google Blockly. The underlying code is CircuitPython!
You can access the interface, which is similar to MakeCode, at https://make.playpiper.com/.
Under the hood, there is a CircuitPython helper library Piper has created – GitHub.
More details – Tom’s Hardware, Make and YouTube.
The Adafruit Discord Server Surpasses 28,000 Members
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 28,000 humans, thank you! Adafruit believes Discord offers a unique way for CircuitPython folks to connect. Join today at https://adafru.it/discord.
Here are some software releases of note for this week:
New version of CircuitPython Bundle Manager released including dependency detection – GitHub.
The Raspberry Pi team is posting examples of using PIO to make common interfaces on the Raspberry Pi Pico – GitHub
The Mu Editor team is testing 1.1.0-beta.2 – First Public Beta – GitHub.
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams his work on Flash and Clocks.
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!
Demonstrating a round LCD as a gauge, controlled by a potentiometer knob – GitHub.
A round LCD on a Raspberry Pi Pico with a circular spinning Hello World while pinkpurple circle clouds float by – Twitter.
Keybow 2040 CircuitPython is a CircuitPython library for the RP2040-powered Keybow 2040 from Pimoroni, a 16-key mini mechanical keyboard with RGB backlit keys – GitHub.
Trying Raspberry Pi Pico with I2C devices using CircuitPython – Raspberry Connect.
Humble Bundle books – Learn You More Code with No Starch Press, $487 of books, pay $1 or more, DRM-free – Humble Bundle.
CircuitPython for Gameduino (and other EVE GPU-based hardware) has reached another development milestone – tinyletter.com.
Programming Electronics – Controlling an LED using CircuitPython using Adafruit Metro M4 – YouTube.
A Feather RP2040 HeadMouse assistive technology device from ATMakers – YouTube.
A CircuitPython MIDI Controller using a Pimoroni keypad and the Raspberry Pi Pico – Twitter.
WWVB clock project progress, all the way from radio signal to LED display – Twitter.
A new TG-Gui widget using CircuitPython and displayio on TG-Watch – Twitter.
Robots running MicroPython – Instagram.
First time using MicroPython with Thonny and the syntax-highlighted REPL –RaspberryPi.org via Twitter.
3D-printed LED triangle running MicroPython on a WeMos D1 Mini – Twitter.
MicroPython bitmap tool explained as a video – YouTube via Twitter.
CircuitPython and MicroPython for the MeowBit (Russian) – Habr.com.
MIDI arpeggiator CircuitPython code for the Pimoroni Keybow 2040 – Twitter.
CircuitPython MIDI code controlling a Yamaha MODX8 – Twitter.
3D-printed lamp running CircuitPython on a QT Py using capacitive touch – Twitter.
The differences between MakeCode Python and MicroPython APIs – microbit.org.
Weather station redo with Raspberry Pi Pico and LoRa radio running MicroPython – Twitter.
Tiny 3D-printed bots running MicroPython on the Pimoroni Tiny2040 – Twitter.
A Jupyter kernel to interact with a MicroPython ESP8266 or ESP32 over its serial REPL – GitHub via Twitter.
Comparative: Arduino IDE vs. MicroPython for the ESP32 – 330ohms.com via Twitter.
Picosoft Turns the Raspberry Pi Pico Into an Interactive MicroPython Computer, the ORANGE-Python – Hackster.io via Twitter.
Sensing the environment with MicroPython, the Raspberry Pi Pico and a DHT22 – Twitter.
Using MicroPython on Raspberry Pi Pico to make a retro video game clone – YouTube.
3/13/21 Stream from CircuitPythonista FoamyGuy (Tim) covers work on a Touch Deck project. – YouTube.
Using the BerryIMUv3 on a Raspberry Pi Pico with MicroPython – ozzmaker.com.
Creating Mandelbrot images on a Raspberry Pi Pico with MicroPython – YouTube.
A Python package that generates hardware pinout diagrams as SVG images – GitHub via Twitter.
Real Python Podcast Episode 51: Navigating Options for Deploying Your Python Application – Real Python.
A guide to Python IDEs and Code Editors – Real Python via Twitter.
Bresenham’s Circle Drawing Algorithm – funloop.org.
PyDev of the Week: Žan Anderle from Mouse vs Python
CircuitPython Weekly Meeting for March 15th, 2021 on YouTube and notes
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? The Adafruit Feather RP2040 Board.
Tom’s Hardware – Adafruit Feather RP2040 Review: A More-Refined Raspberry Pi Pico – Tom’s Hardware.
@geekinchief – Twitter:
The Adafruit Feather RP2040 is the best RP2040 board you can get, offering 8MB of storage, strong battery support, 4 ADCs and a huge ecosystem of add-on boards. Get it . . . if you can find one in stock.
Adafruit’s Cyberdeck Bonnet Brings Add-On Hardware to Your Raspberry Pi 400 — at a Jaunty Angle. Supporting all small-form factor Bonnet, micro-HAT, and pHAT accessories, the add-on board also includes STEMMA ports – hackster.io.
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 no new boards added but several are in development.
Looking to add a new board to CircuitPython? It’s highly encouraged! Adafruit has four guides to help you do so:
New Learn Guides!
Shadow Box Internet Clock with NeoPixel Visualization from Erin St. Blaine
Quickstart IoT – Raspberry Pi Pico RP2040 with WiFi from Brent Rubell
Introducing Adafruit Feather RP2040 from Kattni
CircuitPython Display_Text Library from Tim C
Raspberry Pi Pico and LED Arcade Button MIDI Controller from Noe and Pedro
Retroreflective Green-screen Light Ring QT Py Controller from John Park
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 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 305!
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!
After systematically commenting out code and then re-enabling it bit by bit, I was able to figure out an apparent solution to the problematic interaction between WiFi and I2C on the ESP32-S2. It’s still not clear to me exactly why this solution works, and I’m awaiting some feedback from the ESP32-S2 developers, but testing seems to confirm the fix.
We got some good feedback on the default addition of the second USB serial channel in CircuitPython. It does cause some confusion because now there are two serial devices, and in some cases it’s not obvious which one is the REPL. Because of this, we are going to turn the feature off by default for 6.2.0 but still make it available for custom builds. In 7.0.0 we will make it possible to enable and disable it in
boot.py, and then advertise it more widely. The problem of detecting which serial port is which still exists, and I am working on a small Python library which will run on host computers and allow the ports to be distinguished.
It’s Feather RP2040 time. I have been doing various things in this port, such as enabling MP3 playback (only works for very low bitrate MP3s, try mono and 32kbit/s; you can it up to about 20 minutes of audio on the Feather’s built-in flash at this compression ratio though!), fixing problems with how CircuitPython initialized the built in real-time clock, and documented how to install the debugging header on the Adafruit Feather RP2040 on the Learn system.
This week I updated the AMG8833 thermal camera guide for the STEMMA QT revision of the board. The guide now includes updated images, pinouts and wiring diagrams. You can pick one up in the Adafruit shop and check out the guide to get started.
I also published the Feather RP2040 guide, which includes everything you need to get started using your new Feather. The Pinouts page is especially detailed to keep up with the pins on the RP2040 having so many different functions. They are listed by pin name, with details about each pin, and by function (e.g. I2C, SPI, etc), so you can easily figure out what you’re looking for by pin name or by function.
We continued the Pylint update by finishing up the PRs on the libraries skipped by the initial patch. We found that Pylint was failing significantly on libraries with
tests directories. So, we set up a separate pre-commit hook to handle running Pylint on test files, similar to how we run it on example code. There’s still a bit left to do on this project, but we’re nearing the end.
Finally, thanks to Dylan for updating our Adabot script to only report a library as needing a release when the code, documentation, or packaging changes. This will reduce unnecessary work for everyone when using the Adabot check to keep up with releases, as changes to the CI (continuous integration) do not require a release.
This past week I’ve been digging into low power performance on the STM32, extracting the RTC module out from the port functions so that it can be used to wake from low power modes. Since entering the lowest possible power state of “Standby” for deep sleep disrupts both USB and external debuggers like the JLink, I’ve been using a logic analyzer to visualize the timing of the interrupts as they occur, so I can better debug problems with staying in deep sleep mode.
I’ve also been considering requests for altering the clock settings of CircuitPython on boot, so that projects can use overclocking or underclocking to do things like boosting performance or lowering electrical noise. This has some complications about how it would affect peripherals across different ports, but could be a powerful feature.
This past week I started with looking into a guide I had written for running Google Assistant as we were getting reports of it not running. It turns out that I didn’t specify that users should be running the lite version and the ones having issues were running the desktop version. I updated the guide with this information.
I worked on some memory issues that users were experiencing with the MatrixPortal due to some libraries getting new features and some areas that could have used some optimization. After updating it, I had some scripts that were crashing run in a much more stable manner.
I worked on updating the RPLIDAR driver to work with some of the newer units shipping with updated firmware. Unfortunately, this was proving to be extra challenging because they Slamtec did not provide the newer firmware on their website for updating older units. So it relied on following available documentation, making sure it didn’t break the older firmware, and having users with newer firmware test it for me.
I also started working on a guide for the 2.13” eInk displays. This included writing a new driver for the SSD1680 chip which the updated feather from last year also uses. Be sure to watch new guides and keep an eye out for it.
This week I’ve been focused on improving flash chip support in CircuitPython for the RP2040 specifically. I’ve rewritten the flash init code from assembly into C to make it easier to maintain. I also hacked a Feather RP2040 to use a SOIC socket to allow me to swap different flash chips without needing to solder them down. I also soldered in wires so I can capture the SPI traffic to analyze it. This is very very helpful when debugging flash init code and other bugs.
My hope is to get a PR out by this time next week to optimize for different flash chips with the RP2040.
The 2021 Open Hardware summit will be held online, Friday April 9, 2021. The summit will be livestreamed, but ticket holders will have access to additional interactive portions of the summit like meet-and-greets, workshops, and sponsor booths. Find details, including ticket and sponsorship information at 2021.oshwa.org – OSHWA.
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/
Call for proposals for PyOhio 2021 runs from March 15 – April 19, 2021 with the free event on July 31, 2021- PyOhio.org via Twitter.
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.
CircuitPython’s stable release is 6.1.0 and its unstable release is 6.2.0-beta.3. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20210314 is the latest CircuitPython library bundle.
v1.14 is the latest MicroPython release. Documentation for it is here.
3.9.2 is the latest Python release. The latest pre-release version is 3.10.0a6.
2,339 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.
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.
This video podcast is on iTunes, YouTube, IGTV (Instagram TV), and XML.
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.
Join our Discord or post to the forum for any further questions.