Daily tips and tricks from the experts at Adafruit!
View this email in your browser

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!

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!

Ladyada downloading a project bundle

To use the Project Bundle:

Above any embedded code in a guide in the Adafruit Learn System, you’ll find a Project Zip link.

Project bundle link

Click the link to download the Project Bundle zip.

Project bundle zip and folder

Open the Project Bundle zip to find the example code, all necessary libraries, and, if available, any images, sounds, etc.

Project bundle contents

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

Hackster Cafe 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

Deep Dive with Scott

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!

CircuitPython animations

You can make smooth graphics animations using displayio and the Adafruit_Displayio_Layout widget “easing” functions – Twitter.

8 rotary encoders on Pico

Eight rotary encoders with switches wired up to Pico with no extra hardware, supported by CircuitPython – Twitter.

Pico videoconference controller

Building a Raspberry Pi Pico videoconference controller running CircuitPython – Electromaker.

CircuitPython Schedule

CircuitPython_Schedule allows the programmer to use a functional syntax to run jobs at custom time intervals – GitHub.io and PyPI.

Sock-friendly kick
Kick internals

A sock-friendly, CircuitPython-powered Pico-based kick keyboard – Twitter.

Pico HID

Build a prank project with HID device using Raspberry Pi Pico and CircuitPython – Element14.

CircuitPython in one video

CircuitPython in one video – YouTube.

W5500 ethernet and Pico

How to add W5500 ethernet to a Raspberry Pi Pico using CircuitPython – Hackster.

Adafruit FunHouse

Adafruit’s FunHouse is a home shaped automator – Make Use Of.

Pico Guitar Hero controller

Raspberry Pi Pico Guitar Hero controller is ready to rock – Tom’s Hardware.

Pico Phone

Pico Phone runs CircuitPython – Hackster.

Pico beret

How to make a Raspberry Pi Pico LED Beret – Tom’s Hardware.

Cornhole with robot

Cheat at cornhole with a bazillion dollar robot – Hackaday.

Stream deck keypad

Raspberry Pi Pico-powered stream deck keypad – Tom’s Hardware.

Cat zoom

Cat zoom demo with the Neo Trinkey running CircuitPython – Twitter.

Cytron Maker Pi Pico

Cytron Maker Pi Pico works with CircuitPython – Tom’s Hardware.

WiFi and LCD pHAT

WiFi + LCD pHAT running CircuitPython – Twitter.

Eurorack module PCBs

This Eurorack module uses PWM to generate CV, programmed with CircuitPython – Twitter.

Fob Watch

A fob watch with a NeoPixel ring, real-time clock and running CircuitPython – Twitter.

Vintage phone MIDI controller

A Vintage Phone as a USB MIDI Controller, with CircuitPython on a Raspberry Pi Pico – Twitter.

DIY bot

Coming soon: a DIY bot running CircuitPython – Twitter.

Pico running CircuitPython

Raspberry Pi Pico running the much-friendlier CircuitPython – Twitter.

Feather S2

ESP32-S2 and CircuitPython come together on FeatherS2 – Twitter.

March Python projects

March 2021 programming projects including CircuitPython – Eric’s Binary World.

Pico running CircuitPython

Programming the Raspberry Pi Pico using CircuitPython in Thonny – Twitter.

Pico stream deck

Raspberry Pi Pico stream deck using Pimoroni RGB keypad – piamble.wordpress.

99 circles demo

99 circles demo with Adafruit Metro M4, Gameduino 3X Dazzler and CircuitPython – Twitter.

ScoutMakes Bluetooth Fun

ScoutMakes Bluetooth Fun: open source, CircuitPython-compatible, Bluetooth-enabled STEM electronics kits – Crowd Supply.

Planet project

Science project using Feather RP2040 and two servos, running CircuitPython – Twitter.

ATMega0 Relay Shield

Testing the ATMega0 Relay Shield – Twitter.

Jurigged

Jurigged lets you update your code while it runs – GitHub.

FunHouse Home Assistant light control

A first project with FunHouse: a Home Assistant light control – GitHub.

Graphics routines

Graphics routines for Raspberry Pi Pico Screens using MicroPython – Raspberry Pi.

Manic Miner Remake

Remake of Manic Miner’s collapsing platforms in this PyGameZero example – Raspberry Pi.

CircuitPython-powered wings

Completing a cosplay with CircuitPython-powered wings – Twitter.

First look at Adafruit Neo Trinkey

Monday Microcontroller: A first look at Neo Trinkey – YouTube via bigl.es.

MicroPython Blink

Intro to Raspberry Pi Pico and MicroPython Part 1: Blink – YouTube.

Raspberry Pi Zero in iPod classic case

Raspberry Pi Zero W turns iPod Classic into Spotify music player – GitHub via Raspberry Pi.

Xenia, the other Linux mascot

The story of Xenia, the other Linux mascot – Xenia-Linux-site.glitch and YouTube via Adafruit Blog.

Python 3 cheat sheet

A Python 3 cheat sheet – Twitter.

Free Python books

A list of Python books in English that are free to read or download – GitHub.

Calm episode 30

CALM #30, including some history of MicroPython and CircuitPython – YouTube.

k-Nearest Neighbors algorithm

The k-Nearest Neighbors (kNN) Algorithm in Python – Real Python.

Python vs Java

Python vs Java: Object Oriented Programming – Real Python.

Pico Explorer Base

A review of the Pimoroni Pico Explorer Base – Blogdot.

Lidar Bot

A “simple” bot with laser beams and lots of stuff running Python on a Pi Zero W – Hackster.

Beginning of Python installer script

No Python Interpreter? This simple RAT installs its own copy – sans.edu.

Remote gesture controller

Create a remote gesture controller using MQTT and Tactigon Skin – Hackster.

Bluetooth repeater

Create a Bluetooth repeater using BleuIO and Python – Hackster.

How to interface OLED with Pico

How to interface an OLED with a Raspberry Pi Pico and display large fonts – YouTube.

Python automation

6 ways Python can automate tedious processes for the modern marketer – Demandgen.

ESP32 MicroPython server

ESP32/MicroPython server + Raspberry Pi/Python client, transmit image via WiFi TCP socket – Hello Raspberry Pi.

Large font example

A MicroPython library for the SSD1306 with examples – GitHub via Raspberry Pi Forums.

Pico wired up

Raspberry Pi Pico first project – smist08.wordpress.com.

QT Py RP2040

Another Adafruit QT Py with Raspberry Pi’s RP2040 chip – Hackster.

Twitch chat controls

Code your own Twitch chat controls for robots, or just about anything else – Hackaday.

Python price tracker

A price tracker written in Python – Hackster.

Neo Trinkey

The adorable Neo Trinkey redefines USB flash – Hackster.

Feather RP2040

Adafruit Feather RP2040 First Impressions – smist08.wordpress.com.

Python switch statements

Python Will Soon Support Switch Statements – Hackaday.

Edge AI

Edge AI – What is it and What can it do for Edge IoT? – Seeed Studio.

ZenCad

ZenCad is a library for parametric 3D modeling – GitHub.io.

Python configured camera image

Python library for configuring a wide range of IP cameras that use the NETsurveillance ActiveX plugin XMeye SDK – GitHub.

Running a Lua program on Pico

A programming environment for Lua for the Raspberry Pi Pico microcontroller – GitHub.

Open source cooking

An open source cookbook written using Python – Opensource.cooking.

Fermilab’s Muon g-2 experiment

Strengthening evidence of new physics using Python – YouTube via Adafruit Blog.

Python dictionaries

Python behind the scenes #10: how Python dictionaries work – Ten Thousand Meters.

Top five languages

Python #3 language as Objective-C drops off of Tiobe’s top 20 language listZD Net.

PyDev of the Week: Will McGugan on Mouse vs Python

CircuitPython Weekly Meeting for April 12th, 2021 on YouTube and notes

#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? How to use CircuitPython with GPIO pins on a PC.

Coming soon

Neo Trinkey Jellyfish

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!

Looking to add a new board to CircuitPython? It’s highly encouraged! Adafruit has four guides to help you do so:

New Learn Guides!

New Learn Guides

Zelda Guardian Robot Terrako Companion from Noe and Pedro

Analog Knobs on Raspberry Pi 400 with CYBERDECK Hat from John Park

Sailor Moon Star Locket from Liz Clark

CircuitPython Libraries!

CircuitPython Libraries

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 310!

New Libraries!

Here’s this week’s new CircuitPython libraries:

Updated 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!

Dan

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.

Jeff

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!

Kattni

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!

Lucian

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.

Melissa

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.

Scott

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.

Upcoming events!

GeoPython 2021

The online GeoPython conference is focused on Python and Geo, its toolkits and applications. April 22-23, 2021 – https://2021.geopython.net/.

PyCon US 2021

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 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/

PyOhio

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.

Latest releases

CircuitPython’s stable release is 6.2.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.

20210410 is the latest CircuitPython library bundle.

v1.14 is the latest MicroPython release. Documentation for it is here.

3.9.4 is the latest Python release. The latest pre-release version is 3.10.0a7.

2,381 Stars Like CircuitPython? Star it on GitHub!

Call for help – Translating CircuitPython is now easier than ever!

CircuitPython translation statistics on weblate

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

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.

28568 thanks!

28568 THANKS

Adafruit Discord

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

ICYMI

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

Contribute!

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.