View this email in your browser. Warning: Flashing Imagery
Welcome to the latest Python on Microcontrollers newsletter! A major milestone in Python compatibility with over 400 microcontroller and single board computers (SBCs, via the Blinka compatibility layer) able to run Python. And there is so much you can do when CircuitPython is on a board: There currently are 438 libraries adding capabilities and drivers for all kinds of hardware. Do check out some of the projects that are using CircuitPython, MicroPython, and Python on SBCs – 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:
There are now over 400 CircuitPython compatible microcontroller boards
There are now over 400 CircuitPython compatible microcontroller boards with a large addition this past week. They include boards from many manufacturers – these are boards from the community, companies that are not Adafruit, and entire new businesses / makers using and shipping boards with CircuitPython. Supported chips include: Espressif, Microchip SAMD, Nordic, NXP i.MX RT, RP2040, ST, and SiLabs! – Adafruit Blog and CircuitPython.org.
The growth of CircuitPython compatible boards since 2017. It’s interesting that it’s been less than a year since 300, about two boards per week, which is fabulous growth.
Hackaday Supercon 2023 is on!
Hackaday has announced that the Hackaday Supercon is on for 2023, and will be taking place November 3 – 5 in Pasadena, California, USA. They’d like to hear your proposals for talks and workshops! The Call for Speakers and Call for Workshops forms are online now, and you have until July 18th to sign up – Adafruit Blog and Hackaday.
FreakWAN: a LoRa-based open WAN network
FreakWAN is an effort to create a LoRa-based open WAN network, completely independent from Internet and the cellular phones networks. It is coded in MicroPython with a SX1276 LoRa chip driver. It is possible to send encrypted messages that will reach only other users with a matching symmetric key. FreakWAN also implements its own very small, lossless compressed 1 bit images, and as a proof of concept it can send small media types over LoRa – GitHub via Twitter and Y Combinator.
Using MicroPython to get started with AWS IoT Core
You can use MicroPython to get started with AWS IoT Core with a recent guide by Amazon. Prototype your project to quickly test a full IoT solution. MicroPython makes it easy to connect a device to AWS IoT Core and route messages to other AWS services – Amazon.
Using an RP2040 to Open a Tesla Car Charging Port
Tesla’s charging port signal has been known for years. “There are several projects about how to retransmit it, how to sample it for HackRF or other SDR’s and how to retransmit it.” This implementation uses a Tiny2040 and MicroPython – GitHub.
Interfacing with Classic PC Joysticks
Adafruit picked up a Gravis Advanced PC analog joystick to verify a design for an I2C adapter board. After some confusion about the way buttons work – turns out you DON’T want the knobs on the side centered because that disconnects the switches from the DE-15 – they have success! Since the X and Y positions are changed by the joystick, moving the wiper on two potentiometers and not by a voltage divider, one has to do a tiny bit of math to figure out the actual resistance. So far this board works very nicely and will let some of those old joysticks live again in modern projects – YouTube.
We never had a PC when we were younger, so we sorta missed out on having a PC joystick – but this Gravis Advanced design was rugged enough to survive 30 years. There’s a datecode of 1991 on the PCB. PC joysticks are fairly simple: there’s three mechanical buttons but actually you can only map them to 2 possible pins – the mapping on the Gravis is done with rotary switches, which confused us at first, but turns out they have contacts that switch around which pads go from the onboard PCB to the standard PC DE15 connector. Note they aren’t connected up as a resistor divider – that’s because there were no ADC’s on PCs at the time – instead the resistance was fed into an oscillator like the 555 and then the pulse width was measured! – YouTube and Wikipedia.
The Adafruit PC Game Port to I2C board will be out soon in the Adafruit shop for all the retro gaming goodness.
BIPES – An Educational Block Framework for Python on Microcontrollers
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 PR Reviews, and Library Doc Fixes.
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 LCD Character Displays – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
The CircuitPython Show
The CircuitPython Show is an independent podcast hosted by Paul Cutler, focusing on the people doing awesome things with CircuitPython. Each episode features Paul in conversation with a guest for a short interview – CircuitPythonShow.
The show is off this week. The latest episode was released May 8th and features Ben Shockley. Next week, CircuitPython core developer Dan Halbert joins the show – Show List.
Project of the Week: Feather RP2040 DVI & OBS Weather Station Overlay
An Adafruit Feather RP2040 DVI to OBS Overlay example. Weather radar background with added data sources is pulled from local I2C temperature/humidity/pressure sensors and WipperSnapper from Adafruit IO. As seen on Adafruit Show & Tell 5/11/2023 – GitHub and YouTube via Mastodon.
News from around the web!
Add some Pybricks, MicroPython and a bit of Debian Linux (there’s still a kernel driver for the RCX!) and you can sort all your LEGO bricks – Twitter.
Robot makers: Do NOT sleep on MQTT. Like Frank’s Red Hot, “I put that #%$&@ in everything”. I’ve found it especially useful as a lightweight publish/subscribe model when ROS is too much overhead. I’ve even got it streaming real-time video & audio on RoBud – Twitter, GitHub (video), GitHub (audio).
Room status distribution system using MQTT, a CO2 sensor, and a temperature/humidity/barometric pressure sensor (Japanese) – Elchika.
A new CircuitPython MIDI synth using the upcoming
synthio library. With the Note API, one can now stack multiple detuned oscillators per note, to make really fat sounds. The entire program running on the Adafruit QT Py RP2040 is less than 100 lines of code – Mastodon, YouTube and GitHub.
Taking Pictures with Raspberry Pi and Redis – Simon Prockett, GitHub and YouTube.
Assistive Technology Projects from Boston College Physical Computing summarized in an < 3 min video. CircuitPython, Adafruit Circuit Playground Bluefruit, and Raspberry Pi Pico W boards were used throughout – YouTube via Twitter.
Measuring Latency with Adafruit QT Py: A CircuitPython Approach – Go-EUC.
The unofficial Raspberry Pi Pico Discord server has almost 1,500 members – Twitter.
DIY solar-powered plant watering monitor using Raspberry Pi Pico and MicroPython – YouTube via Twitter.
A build update on a STEM Robot using MicroPython – betterprogramming.pub.
PDM audio playback on an ESP32-S3 with MicroPython – Twitter.
How to Install CircuitPython on Raspberry Pi Pico with Thonny – YouTube.
With MicroPython, a bit of 3D printing, and a couple micro servos, Raspberry Babbage is moving – Twitter.
With CircuitPython on over 400 boards by dozens of manufacturers, your editor checked the number of Arduino boards officially supporting MicroPython. On their site, they list 5 at present. Note: MicroPython does run on a great many boards from other manufacturers also, including some CircuitPython compatible boards. No Arduino board officially supports CircuitPython, but six are listed on circuitpython.org. MicroPython, CircuitPython and their respective communities are looking to get Python on all the devices that will support it, the more the merrier – Arduino.
Issue 122 of Keyboard Builders’ Digest – kbd.news.
A Raspberry Pi Pico RISC-V emulator runs Linux – Tom’s Hardware, YouTube and GitHub.
PyDev of the Week: Thomas Fan on Mouse vs Python
CircuitPython Weekly Meeting for May 15, 2023 (notes) on YouTube
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? What’s the Best Language for Microcontrollers: MicroPython, CircuitPython, Arduino, or C?.
The Adafruit Prop-Maker Feather is going to be great for making props and toys that have audio, motion and LEDs. They have a quick demo that shows off LED animations on NeoPixels, motion sensing with the LIS3DH accelerometer, servo output control to a micro servo, and audio playback via a 3W I2S amplifier – Twitter.
Lolin S3 Mini, a tiny $5 ESP32-S3 board in a Wemos D1 Mini form factor – 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 are 17 new boards!
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!
Adafruit Feather RP2040 ThinkInk from Liz Clark
Adafruit PiCowbell CAN Bus for Pico from Liz Clark
Adafruit CAN Bus FeatherWing from Liz Clark
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 438!
Here’s this week’s new CircuitPython libraries:
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Statistics
Total Library Stats
- 85953 PyPI downloads over 311 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 7020
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 6133
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 1983
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1801
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1122
- Adafruit CircuitPython PCA9685 (adafruit-circuitpython-pca9685): 1003
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 794
- Adafruit CircuitPython ServoKit (adafruit-circuitpython-servokit): 792
- Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 758
- Adafruit CircuitPython Pixelbuf (adafruit-circuitpython-pixelbuf): 744
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in!
I was away from work for a week, and am now back, fixing more things in preparation for the CircuitPython 8.1.0 release.
This week, I finished up the code for the Canary Night Light project. The main functionality is that it will either shine blue or red, depending on the time range that you configure. Most folks should be doing red at night and blue in the morning, but if you do shift work and/or need to wake up at vastly different times, you can configure it so it works for you as well. It also includes a feature to notify you when your internet is down by blinking red. As you might not want this happening in certain situations, you can easily disable this feature at the beginning of the code. This is intended for a collab guide with Noe. Noe designed an amazing 3D printed canary especially for this project! The guide is coming soon.
Other than that, I’m up to a miscellaneous list of guide updates. Making sure the misc is getting done too!
This past week I added a bunch of boards to circuitpython.org. There were about 12 new CircuitPython boards added putting us at over 400 and about 19 new Blinka boards putting us at 120 boards.
I’ve been working on reviewing PRs submitted by PyCon sprinters. Going back through ones that people have followed up on after initial round of feedback. I also submitted two small fixes in the core: one an argument validation bug that could cause a hard fault if wrong types were passed to
Polygon, and one to add some additional Python built-in methods to the
displayio.Group stubs so that mypy and other code analysis tools will know its capabilities.
My work was on
synthio again this week. In the next pull request, I generalized Note ‘vibrato’ so the same code could do triple duty as a pitch bend or frequency sweep as well, enabled stereo output, with the Note
panning property controlling whether it appears on the left channel, right channel, or both, and implemented ‘ring modulation’ which is useful for creating richer, more dynamic sounds.
This week I’ve continued working on Circuit Pyrate, a CircuitPython version of Bus Pirate. (We’ll likely rename it before releasing the code because Circuit Pyrate and CircuitPython are very similar.) I’ve also created a CircuitPython version of the
prompt_toolkit library for managing the command history.
I’ve also been working on an e-paper weather display using the Pirate Weather API. Pirate Weather implements the Dark Sky API and the JSON responses are ~30k or so. I couldn’t parse it all into memory on the Pico W so I created a CircuitPython version of the
json_stream library. This allows you to work with the returned object just like the
json module with the huge exception that you must access data in file order. The library gets the data from the stream as you ask for it and can’t go backwards. This makes it use less total memory but restricts how you get the data.
I published two new product guides this week. The first was for the Feather RP2040 ThinkInk. This Feather lets you plug in an eInk display directly to a connector on the back of the board. I also included a page on using it with the u2if firmware that lets you use desktop Python libraries with RP2040-based boards.
The second guide was for the PiCowbell CAN Bus. It lets you use a Raspberry Pi Pico or Pico W to connect to CAN bus networks for automotive or robotics projects.
The next MicroPython Meetup in Melbourne will be on May 24th – Meetup. From the April 26th meeting – Notes and Video.
EuroPython 2023 will be July 17-23, 2023, in Prague, Czech Republic and Remote – EuroPython 2023.
The KiCad Conference (KiCon) is the largest gathering of hardware users and developers using KiCad. Following the success of the first KiCon in 2019 in Chicago, this is the second annual KiCon, and the first one in Europe. If you are interested in KiCad, as a user, developer, or contributor, this is the place to be. It will be held at the Palexco Conference Center, in A Coruña, Spain, from Sept 9th through the 10th, 2023 – KiCon 2023.
PyCon UK will be returning to Cardiff City Hall from Friday 22nd September to Monday 25th September 2023 – PyCon UK.
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.5 and its unstable release is 8.1.0-beta.2. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20230515 is the latest CircuitPython library bundle.
v1.20.0 is the latest MicroPython release. Documentation for it is here.
3.11.3 is the latest Python release. The latest pre-release version is 3.12.0a7.
3,533 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.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 37,301 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.
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.