View this email in your browser.
Welcome to the latest Python on Microcontrollers newsletter! There is a lot of news to get to this week!
We’re on Discord, Twitter, and for past newsletters – view them all here. If you’re reading this on the web, subscribe here.
Happy 8th Birthday MicroPython!
MicroPython turned 8 years old on April 29th. That day in 2013 was when Damien wrote the first line of code (in private, before anyone knew about it, before it was even called MicroPython). Now MicroPython is used on many different types of microcontrollers and single board computers (SBC) in both educational and commercial platforms. Version 1.15 was just released two weeks ago with some great new features.
Adafruit has stocked the official MicroPython PyBoards from Damien for a while. They have also made direct donations to MicroPython to support Damien’s work, as well as make and share contributions based on the CircuitPython core on MicroPython. Now, with GitHub Sponsors, Adafruit just provided a $5k sponsorship. The MicroPython goal is $5k a month in sponsors, so 1 full month is on Adafruit. If you use MicroPython, please consider sponsoring a monthly or one-time gift as well. Companies / orgs can now sponsor, so this was Adafruit sponsoring.
Microsoft has been a long-time supporter of the Python Software Foundation, starting in 2006. Today, Microsoft employs several core developers working part-time on CPython and the Python Steering Council, making significant contributions as PEP authors. Python creator Guido van Rossum has recently joined Microsoft as a Distinguished Engineer and is exploring performance improvements to CPython.
Aside from helping advance the Python tooling and ecosystem, Microsoft has shown strong involvement with the Python community and has been a long-time sponsor of PyCon US, including four years at the top tier Keystone level. Microsoft’s support for the community extends to sponsorships of regional and international Python events including in emerging regions.
This year, Microsoft is increasing their contributions to the PSF even further as a Visionary Sponsor. Microsoft’s sponsorship funds will be used to support the PSF with a focus on working with the Packaging Working Group on improving PyPI and the packaging ecosystem – PSF Blog and the Microsoft Blog.
Tom’s Hardware Reviews the Adafruit ItsyBitsy RP2040
Tom’s Hardware last week reviewed the Adafruit ItsyBitsy RP2040 – Tom’s Hardware
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams his work on additional merging of MicroPython into CircuitPython.
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!
Progress making a Black Panther smart display/alarm clock. Using an ?Adafruit? ESP32-S2 Metro to get a comic cover with the Marvel? APIs (every hour). Using MQTT to get weather, calendar, health, etc., coded in CircuitPython – Twitter.
A MIDI controller UI for pico8enc. Hitting the Raspberry Pi Pico’s limit trying to do 8 encoders AND NeoPixels in CircuitPython – Twitter and GitHub.
Trinkey Dance Party: fun pulsing colors for the Adafruit NeoTrinkey in CircuitPython – Twitter and GitHub.
A visual thermometer using Circuit Playground Express and CircuitPython – stephencross.com.
A Trinkey Theremin! In ladybug format with big wire antennae. Here to make all your synths go bwowoowww. Thx CircuitPython & Adafruit – Twitter.
A pool temperature display using Adafruit IO – hackaday.io and Hackaday.
New cyberdeck from Adafruit via Elmwood Elec to make my Minecraft world selector and start/stop server via buttons complete – Twitter.
Piunora is a compact carrier board for the Raspberry Pi Compute Module 4 (CM4). A Qwiic/Stemma-QT-compatible connector makes it quick and easy to use I²C sensors from Adafruit and others. The board is CircuitPython compatible using the Blinka compatibility layer – Crowd Supply and Twitter.
Using a MLX90640 thermal camera to produce a scaled image on a FeatherWing Keyboard in CircuitPython – Twitter and GitHub.
The ATMegaZero ESP32-S2 is an ESP32-S2 based board in a Raspberry Pi Zero form factor. The boards will ship with CircuitPython – GroupGets and Hackaday.
A Python script to make connecting to the CircuitPython REPL in the Mac Terminal quick and easy – andywarburton.co.uk.
CircuitPython_Schedule is a reduced version of the Python schedule library, which allows running jobs at custom time intervals – GitHub and Reddit.
Keybow 2040 is a dreamy 4×4 mechanical mini-keyboard, powered by a Raspberry Pi RP2040. It comes with CircuitPython pre-installed and works with the Keybow 2040 CircuitPython library – Pimoroni and Twitter.
Capacitive Touch and Low Force buttons interfaced with a Adafruit QT Py or SeeedStudio Xiao for assistive technology – Twitter.
Magic GIF Ball: random advice with GIFs instead of text – hackster.io, Element14 Community and YouTube.
Chocolad keyboard hacking to make it run CircuitPython – hackaday.io and Twitter.
Wireless MicroPython Programming With Thonny – Hackaday and Twitter.
A vacuum pick and place pump, driven by a Raspberry Pi Pico. It’s running the WS2812 Micropython demo using the PIO hardware of the RP2040 – Twitter.
An introduction to Raspberry Pi Pico and RP2040 with MicroPython, Part 3: PIO with Shawn Hymel – YouTube and Twitter.
Porting MicroPython to the Texas Instruments Tiva C architecture – Twitter.
Web server on the ESP32 chip with MicroPython (Spanish) – Programming With Ro.
Using the Raspberry Pi Pico with two VL53L0x sensors in MicroPython – YouTube and Twitter.
PyBasic: a BASIC interpreter written in Python – GitHub.
“Yayagram”, a machine that helps our beloved elders to keep communicating with their grandchildren. A Raspberry Pi, Python, and includes an Adafruit thermal printer – Twitter.
Build a Platform Game in Python With Arcade – Real Python.
Film simulations from scratch using Python – kevinmartinjose.com.
Hedy: A gradual programming language – hedycode.com and GitHub.
Elk: a tiny JS engine for embedded systems – GitHub.
Interfaces and Protocols – Deciphering Glyph.
“…when I actually finally put together this little circuit and put some data into memory that should show up as color and it showed up color, it was just one of those eureka moments and you’re just shaking inside. It was just unbelievable. Here we had it in just a couple of chips. I had color, and then I had graphics, and then I had hi-res, and then I had paddles and sound to put games into the machine.” – Steve Wozniak.
PyDev of the Week: Adam Johnson on Mouse vs Python
CircuitPython Weekly Meeting for May 3, 2021 (notes) on YouTube
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? PyCon 2021.
Did you know the RP2040 PIO peripherals can be configured for reading in camera/video data? That’s right, you can directly wire up OV7670/OV2640-like cameras to a RP2040/Pico and then read out image data into a RAM buffer (thankfully there’s a ton of RAM on the RP2040). Adafruit has just placed support into CircuitPython as well, so one can read a buffer and then pipe it back out over SPI to a TFT LCD display. This could be great for image recognition, tinyML, DIY cameras, IoT monitoring, etc! – GitHub and YouTube.
Jeff also gives an overview about these projects – YouTube.
Electronic Cats has posted a picture of a new RP2040 based LoRaWAN board in the Feather format called PicoWAN – Instagram.
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 new board added:
Looking to add a new board to CircuitPython? It’s highly encouraged! Adafruit has four guides to help you do so:
New Learn Guides!
Lemon Mechanical Keypad from Noe and Pedro
Funhouse Door Alert with Email Notification from John Park
Using the Adafruit FunHouse with Home Assistant from Melissa LeBlanc-Williams
Creating FunHouse Projects with CircuitPython from Melissa LeBlanc-Williams
Neo Trinkey Zoom Shortcuts from Liz Clark
Sound Reactive Sunflower Baby Crib Mobile with Bluetooth Control from Erin St. Blaine
FunHouse Motion Detecting Lights with LIFX Bulbs from John Park
The New CircuitPython Project Bundle
When you get to the CircuitPython code section of an Adafruit Learn Guide, sometimes things can get a bit complicated. You not only have the code you need to upload to your device, but you likely also need to add some libraries that the code requires to run. This involved downloading all the libraries, digging through to find the ones you need, and copying them to your device. That was only the beginning on some projects, as those that include images and/or sound files required further downloading and copying of files. But, not anymore!
Now, with Project Bundles, you can download all the necessary code, libraries and, if needed, asset files with one click! We automatically check which libraries are required for the project and bundle them up for you. No more digging through a huge list of libraries to find the ones you need, or fiddling with looking for other files or dependencies. Download the Project Bundle, copy the contents to your device, and your code will simply work. We wanted to make this the easiest way to get a project working, regardless of whether you’re a beginner or an expert. We’ll also be adding this feature to popular IDEs as an add-on. Try it out with any CircuitPython guide on the Adafruit Learning System. Just look for the ‘Download Project Bundle’ button on the code page.
To download and use a Project Bundle:
In the Learning System – above any embedded code in a guide in the Adafruit Learn System, you’ll find a Download Project Bundle button.
Click the button 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!
See the introductory video by Ladyada – YouTube.
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.
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 312!
Here’s this week’s new CircuitPython libraries:
This week, there are a huge amount of updated CircuitPython libraries:
What’s the team up to this week?
What is the team up to this week? Let’s check in!
I’m finishing up implementing dynamic USB descriptors. I am already generating the dynamic descriptors, and have CIRCUITPY, the REPL, and HID devices working. There are some tricky issues related storage management: the dynamic descriptors must be carried over from boot.py, after its virtual machine has finished running and the heap has been discarded. Because the descriptors are dynamic, their size is not known, and ideally I only want to use as much RAM as is necessary. So I’m using a few tricks to minimize RAM use, such as saving a buffer on the stack temporarily between VM runs.
I’ve been helping Scott out with the merge of MicroPython 1.12 into CircuitPython. MicroPython and CircuitPython share a great set of tests of all the core language functionality, which have caught problems accidentally introduced during the merge process. I’ll continue to help Scott as needed while there are more versions of MicroPython to merge and more tests to fix.
I also published my first CircuitPython library, adafruit_ov7670. Together with the imagecapture module in the development version of CircuitPython, this can be used to capture images from an OV7670 camera (on Grand Central M4 and RP2040-based boards) and display the data on a displayio LCD.
This week I published my final newsletter: welcome back Anne edition! Thanks to everyone for sticking through it with me. Anne will be getting back to it now.
Otherwise, my week contained a lot of miscellaneous. I reviewed a significant number of PRs with documentation updates. Thanks to Jose David M. for all of the improvements! Continued work on templates, including adding some new ones and organising the templates better on the backend (thanks to Sheehan for manually doing that for me). I added a few pages to the FunHouse guide. And finally, I started the ItsyBitsy RP2040 guide, which will be out soon, so keep an eye out for that if you’re interested.
This past week I’ve been wrapping up alarms and sleep on the RP2040, and working on merging in the NRF52, STM32, and ESP32-S2 updates to the alarm module. Mostly a lot of formatting and testing related busywork. My hope this week is to compare the power profiles of the Feathers for each of the 4 MCU types that support Alarm (ESP32-S2, nRF52840, STM32F405, and RP2040), so CircuitPython users have a reference for how much power they use during light and deep sleep across different ports.
This past week, I wrote a new guide on creating FunHouse projects. Like some similar guides I’ve written in the past, this guide covered the FunHouse specifics to look out for as well as going over the code examples included in the library. You can check out the guide here.
I also had a guide on using the FunHouse with Home Assistant that I had written a couple weeks ago get published. There was a little delay in the guide because it was waiting for some content in another guide that I had published earlier. You can check out that guide here.
This week I’ve been continuing the MicroPython merge. 1.11 is merged into main and 1.12 is nearly ready for review. I hope to get a good way through 1.13 by the end of this week. Hopefully, 1.14 and 1.15 will be easier too.
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 are at https://us.pycon.org/2021/
EuroPython, the largest conference for the Python programming language in Europe, will 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 – May 2, 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 or email CPnews(at)adafruit(dot)com.
CircuitPython’s stable release is 6.2.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20210430 is the latest CircuitPython library bundle.
v1.15 is the latest MicroPython release. Documentation for it is here.
3.9.5 is the latest Python release. The latest pre-release version is 3.10.0a7.
2,414 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
Experience Design Specialist – Exploration Commons at 50 East, Carroll County Public Library – Adafruit Jobs Board.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 28,887 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.
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
Codecademy “Learn Hardware Programming with CircuitPython”
Codecademy, an online interactive learning platform used by more than 45 million people, has teamed up with the leading manufacturer in STEAM electronics, Adafruit Industries, to create a coding course, “Learn Hardware Programming with CircuitPython”. The course is now available in the Codecademy catalog.
Python is a highly versatile, easy to learn programming language that a wide range of people, from visual effects artists in Hollywood to mission control at NASA, use to quickly solve problems. But you don’t need to be a rocket scientist to accomplish amazing things with it. This new course introduces programmers to Python by way of a microcontroller — CircuitPython — which is a Python-based programming language optimized for use on hardware.
CircuitPython’s hardware-ready design makes it easier than ever to program a variety of single-board computers, and this course gets you from no experience to working prototype faster than ever before. Codecademy’s interactive learning environment, combined with Adafruit’s highly rated Circuit Playground Express, present aspiring hardware hackers with a never-before-seen opportunity to learn hardware programming seamlessly online.
Whether for those who are new to programming, or for those who want to expand their skill set to include physical computing, this course will have students getting familiar with Python and creating incredible projects along the way. By the end, students will have built their own bike lights, drum machine, and even a moisture detector that can tell when it’s time to water a plant.
Visit Codecademy to access the Learn Hardware Programming with CircuitPython course and Adafruit to purchase a Circuit Playground Express.
Codecademy has helped more than 45 million people around the world upgrade their careers with technology skills. The company’s online interactive learning platform is widely recognized for providing an accessible, flexible, and engaging experience for beginners and experienced programmers alike. Codecademy has raised a total of $43 million from investors including Union Square Ventures, Kleiner Perkins, Index Ventures, Thrive Capital, Naspers, Yuri Milner and Richard Branson, most recently raising its $30 million Series C in July 2016.
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.
Thanks to Kattni Rembor for producing the last several newsletters! Excellent work! My eternal thanks!
Anne Barela, editor