View this email in your browser.
Welcome to the latest Python on Microcontrollers newsletter! EuroPython starts this week and there are a couple talks you should check out. I’m Paul Cutler, host of The CircuitPython Show and, along with Kattni, your guest editor for this issue. Next week’s issue will be our last, so keep sending us your cool projects! – 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:
EuroPython starts today, July 17
EuroPython 2023 starts today, July 17. Monday and Tuesday feature workshops, Wednesday through Friday includes conference talks, and Saturday and Sunday feature sprints.
Notable things to check out include the WASM Summit on July 18th and the talk Async Robots by Radomir Dopieralski on July 19th. – EuroPython 2023.
πCalc Kickstarter
The πCalc is a fully featured programmable Python calculator powered by a rp2040 with a color touchscreen, sound output, and microphone.
The πCalc includes an interactive MicroPython mode which allows you to solve complex mathematical tasks and programming in Python without any delay. You can also control hardware components including the I/O ports, RGB LEDs, and the integrated speaker for sound output.
The πCalc is compatible with MicroPython or CircuitPython – Kickstarter.
Pico Powered Roboat
The Roboat is powered by a Raspberry Pi Pico W, a battery pack, a mini electric fan motor and three repurposed plastic contact lens solution bottles. A water bottle lid keeps the electric motor safely dry as it powers the fan. – Raspberry Pi.
Picopad
The Picopad is an open source gaming console kit. It includes all the components necessary to build a hand held gaming device powered by a Raspberry Pi Pico or Pico W.
It features a 2-inch IPS 240×320 display, MicroSD slot, eight buttons, and a lithium-ion battery.
The Picopad supports programming in C and MicroPython. – Picopad.
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 testing and reviewing library pull requests.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.
CircuitPython Parsec
John Park’s CircuitPython Parsec this week is on tap detection using a Circuit Playground. – Adafruit Blog and YouTube.
Catch all the episodes in the YouTube playlist.
Project of the Week
Olav Martin Kvern modified a Squier Telecaster guitar using a Pimoroni Servo 2040, digital servos, and CircuitPython to create a guitar picking robot.
He shares his design goals, tools, and how he overcame power challenges to show how he plays with the guitar robot. – Make.
News from around the web!
Debra Ansell has created an illuminated tote bag for an upcoming article in Make Magazine. – Mastodon.
todbot has created a new prototype board to use with CircuitPython’s new synthio
module. – Mastodon.
Scott Monaghan demonstrates his CircuitPython powered robot’s body tracking movement in a short video. – Mastodon.
In his latest video, Kevin McAleer covers how to draw graphics in MicroPython with PicoGraphics. – YouTube.
Joshua Bech shows the first watchyface made with the experimental version of CircuitPython for Watchy. – Twitter.
Python People is a new podcast from Brian Okken about the people who make the Python community awesome. In his first episode, he interviews his Python Bytes co-host, Michael Kennedy. – Python People.
Learn how to procedurally name files in CircuitPython in the latest video from Paul’s Projects. – YouTube.
JEPT is a tool for viewing azimuth and elevation of selected spacecraft from NASA JPL data based on the entered QTH location. – GitHub.
Twitter user @yongxiangxu251 created an RP2040 board with a look similar to a micro:bit. – Twitter.
Codon is a high performance Python implementation that compiles to native machine code without any runtime overhead. Codon supports native multithreading and can see speedups over Python on the order of 10 – 100x on a single thread. – GitHub.
LuaDec is a Lua decompiler for Lua 5.1 with experimental support for Lua 5.2 and 5.3. – GitHub.
Machine-code function in uLisp can be written with help of an ARM assembler written in Lisp. – GitHub. Overview on uLisp and Ulisp Forum.
PyDev of the Week: Micaela Reyes on Mouse vs Python
CircuitPython Weekly Meeting for July 10, 2023 (notes) on YouTube
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? CircuitPython 8.2.0 Released.
Coming Soon
The Adafruit Matrix Portal S3 is an updated version that replaces the SAMD chip with an Espressif ESP32-S3. The new Matrix Portal can do almost everything the original can. The new S3 has a parallel output drive peripheral allowing it to control the matrix without bitbanging; has two cores allowing one to be dedicated to WiFi or matrix control while the other runs your code; and lots of memory: 8MB of Flash means plenty of space for code, files, GIFs, and more. 2MB of PSRAM means you can read lots of data and still have plenty of RAM for the matrix display buffers. Sign up to be notified when it comes in stock! – 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, there was one new board 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!
Adabot Toy Robot Friend from the Ruiz Brothers
Adafruit Swirly Aluminum Mounting Grid from Kattni
Adafruit STEMMA Audio Amp from Kattni
Adafruit I2C Quad Rotary Encoder Breakout from Liz Clark
Updated Learn Guides!
Adafruit QT Py ESP32 Pico from Kattni
CircuitPython Essentials from Kattni
Adafruit ESP32 Feather V2 from Kattni
Adafruit QT Py ESP32-S3 from Liz Clark
Adafruit Proximity Trinkey from Kattni
Adafruit 2.13” Monochrome E-Ink Bonnet for Raspberry Pi from Kattni
MQTT in CircuitPython from Brent Rubell
CircuitPython Libraries on Linux and Raspberry Pi from M. LeBlanc-Williams
CircuitPython Libraries!
The CircuitPython library numbers are continually increasing, while existing ones continue to be updated. Here we provide library numbers and updates!
To get the latest Adafruit libraries, download the Adafruit CircuitPython Library Bundle. To get the latest community contributed libraries, download the CircuitPython Community Bundle.
If you’d like to contribute to the CircuitPython project on the Python side of things, the libraries are a great place to start. Check out the CircuitPython.org Contributing page. If you’re interested in reviewing, check out Open Pull Requests. If you’d like to contribute code or documentation, check out Open Issues. We have a guide on contributing to CircuitPython with Git and GitHub, and you can find us in the #help-with-circuitpython and #circuitpython-dev 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 446!
New Libraries!
Here’s this week’s new CircuitPython libraries:
Updated Libraries!
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Stats
- Total Library Stats
- 151103 PyPI downloads over 311 libraries
- Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 6706
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 6044
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 1987
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1451
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1320
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1264
- Adafruit CircuitPython ESP32SPI (adafruit-circuitpython-esp32spi): 1263
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1214
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1191
- Adafruit CircuitPython BLE (adafruit-circuitpython-ble): 1105
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in!
Dan
I spent most of my time on the MicroPython merge this week. We are merging changes relevant to CircuitPython from MicroPython v1.19.1, and then when that is done, we will merge v1.20, and v1.21 if it is released soon.
Deciding what code to merge can be difficult, because it is not obvious whether a code difference reflects new MicroPython code that should just replace the current code in CircuitPython, or whether the differences reflect changes made in CircuitPython that should not be overridden. The origin of a piece of code can be tracked down, but it is tedious. I am thinking about marking our changes by adding “this was done for CircuitPython”-style comments. Then the origin of the code will clearer, and will be preserved and readily apparent when doing a future merge.
Kattni
I helped Paul to publish this newsletter! Paul took primary on content this week. Next week is our final issue.
As well, I’ve been going through guide feedback. On each guide in the Adafruit Learn System, there is a “Feedback? Corrections?” link at the bottom of the left sidebar that allows you to submit feedback on the guide. These are aggregated for us, so we can go through and update the guides as needed. It’s been a bit since I went through mine, so there were quite a few. I’m making excellent progress, and expect to finish it up next week.
Melissa
This past week I’ve been working on getting the TSC2046 touch screen controller working with the Raspberry Pi so that it can be used in place of a mouse. Adafruit’s previous go-to resistive touchscreen chip, the STMPE610 and it’s replacement the STMPE811 are no longer being produced or obtainable. This was to find a suitable replacement so the PiTFTs can be redesigned with chips that are available.
Tim
This week I wrote an Outlined Label class that can be used with upcoming changes within bitmaptools in the core to provide an easy way to make text with colored stroke outlines. I’ve also been working on changing over the ESP32SPI library and examples to use settings.toml instead of secrets.py and looking around at other library example and learn guide code to find other instances that can be changed over.
Jeff
I’ve been pitching in to help Scott with some of the USB Host project.
In particular, I’ve started adding support for non-US-QWERTY keyboards. With my current work in progress code, keyboards are still limited to ASCII, but alternate layouts can be used. I tested with a French AZERTY keyboard layout, which moves some characters around (such as swapping Q and A), places punctuation in unusual spots ({} are on top row keys with the Alt-Gr modifier) and also requires the shift key to enter numerals 0-9!
This was made much easier by the keyboard layout bundle from @Neradoc!
Scott
This week I’ve been primarily working on USB host. I’ve determined the two bigger issues to solve before moving on. The first is implementing sharing control of a device between TinyUSB class driver code and CircuitPython-level user code. pyusb has an API for detaching and attaching devices so we’ll need to implement it fully.
The other issue is how to handle re-initializing the host port in code.py. With displays we have you call displayio.release_displays()
. Since USB host doesn’t have any settings, we’ll silently return the same successful port a second time. The only trick with this is that changing pins of the port will require a reset.
Liz
This past week I published a guide for the new Quad Rotary Encoder Breakout. This is a seesaw-based board that lets you use four rotary encoders over I2C. Currently, I’m working on a project that will use four of these boards for a total of 16 encoders.
I also wrote code for the very cute Adabot Toy Robot Friend project. If you’ve ever wanted an adorable Adabot desk companion, definitely check out that guide for an excellent 3D model of Adabot.
Finally, I also updated the QT Py ESP32-S3 guide for the new PSRAM version of the board. This involved some minor copy edits and creating UF2 and binary factory reset files.
Upcoming events!
The next MicroPython Meetup in Melbourne will be on July 26th – Meetup. From the June 28th meeting – Notes.
PyCon AU will be held August 18th – 22nd in Adelaide, Australia. The conference schedule was recently published and notable talks include You can’t do that in MicroPython by Matt Trentini and 10 Years of MicroPython by Damien George. – PyCon AU.
PyCon UK will be returning to Cardiff City Hall from Friday 22nd September to Monday 25th September 2023 – PyCon UK.
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.
The Pyjamas Conference, the 24-hour online Python conference, will be returning for a fifth year. The Call for Papers will begin on September 2nd. – Twitter.
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.
Latest releases
CircuitPython’s stable release is 8.2.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20230711 is the latest Adafruit CircuitPython library bundle.
20230710 is the latest CircuitPython Community library bundle.
v1.20.0 is the latest MicroPython release. Documentation for it is here.
3.11.4 is the latest Python release. The latest pre-release version is 3.12.0b4.
3,594 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.
37,539 thanks!
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 37,539 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.
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 the Adafruit Discord or post to the forum if you have questions.