If you missed this week’s Python on Microcontrollers Newsletter, here is the ICYMI (in case you missed it) version.
To never miss another issue, subscribe now! – You’ll get one terrific newsletter each Tuesday (which is out before this post). 10,561 subscribers worldwide.
The next newsletter goes out in a week and subscribing is the best way to keep up with all things Python for hardware. No spam, no selling lists, leave any time.
Welcome to the latest Python on Microcontrollers newsletter! With the start of August, conferences and back-to-school are in full swing. There are a number of events of interest to Python on hardware folks. Do check out what other folks are making, perhaps it dovetails with your own projects. Finally, the agenda for CircuitPython Day 2023 is firming up nicely, see the details below. – Ed.
Damien George, MicroPython Lead, on the Embedded.fm Podcast
Damien George spoke with embedded.fm about developing with and for MicroPython while Elecia White tries not to spill all the secrets about her client.
To start at the beginning, you probably will want to check out micropython.org. Before listening to the show, you might read the Wikipedia MicroPython entry because they kind of start in the middle in the show.
You can find the code on GitHub.
The New CircuitPython_IcePython Library Programs FPGAs
Usually to program an iCE40 FPGA from Lattice Semiconductor you need an FTDI chip or some other tool like OpenOCD and a device capable of communicating over SPI. This has changed now with IcePython, a driver library for CircuitPython which allows programming any iCE40 FPGA with a simple command.
Simply instantiate the IcePython class with a SPI object, a pin for chip select, a pin for FPGA reset, and a filename. Calling
program_fpga() then programs the FPGA with the bin file provided – GitHub.
MicroPython – Discontinuation of the In-house Library Prefix
- In v1.21 (which will be released soon), all built-in modules have been renamed to match their CPython name – os, sys, json, etc. The only exception is uctypes which is completely different to CPython’s ctypes so it will keep its uctypes name. Additionally uasyncio and urequests have been renamed to asyncio and requests.
- There is a lot of existing code out there that use the u-prefix, e.g. import uos or import urequests so this will continue to work (for both C and Python modules). But please prefer to use just the non-u-prefixed name from now on.
CircuitPython Day 2023
CircuitPython Day 2023 is August 18th and a slate of events is being developed to celebrate the “Snakiest Day of the Year” – Adafruit Blog.
- Paul Cutler will be hosting a panel about CircuitPython’s new synthio.
- Tim (@foamyguy) will be hosting a CircuitPython code jam.
- Melissa (@MakerMelissa) will be hosting a project livestream.
- Jeff, Dan, and Kattni will be having a CircuitPython chat.
Stay tuned to the Adafruit Blog for updates on details, specific events, and their timing! Working with CircuitPython? Tag your projects #CircuitPythonDay2023 on social media and Adafruit will look to highlight them. Do you have events you’d like folks to attend or have projects in the works? Email your thoughts to circuitpythonday(at)adafruit(dot)com.
CircuitPython – A Swiss Army Knife
“I used CircuitPython as a custom board testing framework for a fairly big multi-FPGA board (24 ASICs, 3 FPGAs, and a SAMD21 microcontroller used for overall control) used in a scientific experiment. It worked great – made board-level testing and adjustments easy, and then once things were obviously working we implemented a control packet framework, replaced the CircuitPython core with a simple Arduino framework firmware, and just… copied a ton of the CircuitPython code to Python and kept working.
I love using Python for investigative-type testing of a board, or stuff you only need to do once, like board initialization. As someone who works with FPGAs frequently, it reminds me of using soft microcontrollers in an FPGA – when the control flow/logic is complicated and speed is unimportant, readability and speed of development is key.”
Maker Faire Bay Area Announced for October 13-15 & October 20-22, 2023
Maker Faire has announced that Maker Faire Bay Area will be held October 13-15 & October 20-22, 2023 – Eventbright.
Experience the ultimate showcase of creativity, innovation, and endless possibilities at Maker Faire! Immerse yourself in a world where robots come alive, art defies boundaries, drones soar through the sky, and groundbreaking technology shapes the future.
Espressif Developer Conference – DevCon23
The supplier of popular ESP32 and ESP8266 microcontrollers, Espressif, announces their yearly Developers Conference. During the two-day online event, there will be nearly 30 talks created by Espressif technical experts and their partners, covering a wide range of topics including Thread, the low-power features of ESP32-C6 and WiFi 6, ESP-Mesh-Lite + ESP RainMaker Cloud solution, ESP-IDF, RUST, SquareLine Studio, AWS IoT, and more. September 12-13, 10:00-19:00 CEST – devcon.espressif.com.
PCB Manufacturing – Don’t Just Worry About Components
It’s not only semiconductors — it’s also Printed Circuit Boards (PCBs). The US and Europe aim to keep their lead against China on semiconductors. But they also need to stay ahead with Printed Circuit Boards – CEPA.
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
Last Friday, Scott streamed more work on USB Host.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.
Catch all the episodes in the YouTube playlist.
Project of the Week: TinkerMill’s Electronic Access System
TinkerMill is a makerspace local to SparkFun which houses TinkerAccess, an electronic access control system. Every member is issued a unique RFID key fob that they then use throughout the facility to open doors to certain areas. TinkerAccess limits access to certain various equipment until members have been properly trained on their use, as well as giving all members door access system to the building itself.
The hardware is based on a Raspberry Pi with a custom designed daughtercard containing an RFID reader. The main code is written in Python. There is also a Raspberry Pi based server that hosts the SQLite database and web server interface for controlling individual user access to specific equipment or doors – SparkFun, YouTube and GitHub (MIT License).
News from around the web!
The next addition to CircuitPython WiiChuck library (community bundle) will be the Wii Drums from “Guitar Hero World Tour”. Making sounds (or talking MIDI to do sounds) is the ultimate goal. Drums, cymbals and pedal are all supported – Twitter/X and GitHub.
This year’s BornHacks badge will focus on NFC, sporting an NXP PN7150 on the reader badge and an NTAG I2C Plus on the tag badge. There is also a Raspberry Pi RP2040 for USB interface and application control. Programmed in CircuitPython – Adafruit Blog and GitHub.
A simple power meter using a W5100S-EVB-PICO to measure voltage, current, and power with a MAX471 module. It displays on Adafruit IO via CircuitPython – hackster.io.
A Radar application using an ultrasonic sensor and a servo motor displayed on the ThingSpeak IoT platform via CircuitPython – hackster.io.
Robo Pico review – a Raspberry Pi Pico W-based motor & sensor control board tested with BocoBot robotic kit and CircuitPython – CNX Software.
A handheld Linux terminal which features an ortholinear keyboard and a custom character set generated in Python – hackster.io.
A custom macro pad using CircuitPython – HatenaBlog.
Emergency Mouse: a project born out of necessity using a Xiao RP2040 and CircuitPython – hackster.io.
Use a W5100S-EVB-Pico and Arducam to deliver images to a webapp and identify work patterns through object recognition with AI with Thonny and CircuitPython – hackster.io.
Using a W5100S-EVB-PICO with a RUS04 sensor to log via Adafruit IO in Circuitpython – hackster.io.
A control surveillance robot using a Raspberry Pi Pico, LabVIEW and MicroPython – hackster.io.
Using Llama 2 AI and Python to answer questions about local documents – SWHarden.
Now there are MicroPython bindings for emlearn.org. This makes it possible to have the familiarity and convenience of Python while deploying efficient Machine Learning onto microcontroller devices – GitHub.
PyDev of the Week: Dr. Becky Smith on Mouse vs Python
The Unexpected Maker NanoS3 supported by CircuitPython and MicroPython – esp32s3.
Geniatech XPI-3566-ZERO is a Rockchip RK3566 powered single board computer (SBC) that provides an alternative to the Raspberry Pi Zero 2W with a more powerful quad-core 1.8 GHz Arm Cortex-A55 processor, support for 4Kp60 video playback and output, WiFi 5 and Bluetooth 5.0, a built-in eMMC flash and more – 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 were no new boards added but some are in development.
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:
- How to Add a New Board to CircuitPython
- How to add a New Board to the circuitpython.org website
- Adding a Single Board Computer to PlatformDetect for Blinka
- Adding a Single Board Computer to Blinka
New Learn Guides!
The CircuitPython library numbers are continually increasing, while existing ones continue to be updated. Here we provide library numbers and updates!
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 445!
Here’s this week’s updated CircuitPython libraries:
Library PyPI Weekly Download Stats
Total Library Stats
- 106195 PyPI downloads over 311 libraries
Top 10 Libraries by PyPI Downloads
- Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 7042
- Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 6659
- Adafruit CircuitPython Register (adafruit-circuitpython-register): 1741
- Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1687
- Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1201
- Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1175
- Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1151
- Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1028
- Adafruit CircuitPython ServoKit (adafruit-circuitpython-servokit): 943
- Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 856
What’s the CircuitPython team up to this week?
What is the team up to this week? Let’s check in!
I released CircuitPython 8.2.2 last week. The only change was replacing an expired SSL certificate that prevented access to Adafruit IO.
The certificate also had to be updated in the NINA-FW firmware, which is used for AirLift WiFi co-processors. However, we had trouble uploading the updated version on AirLift boards like the MatrixPortal M4 or PyPortal. I debugged the problem, and thought that the process was interesting enough that I wrote it up as a blog post: “Why Doesn’t this Upload? A Debugging Tale”.
This week I published the ADXL343 + ADT7410 Sensor FeatherWing guide. This one’s a shorty because we have guides for both sensors already. If you’re interested in the board details, check out the guide. If you’re interested in code, check out the breakout guides linked within.
This past week was a little shorter for me because I was out sick. I worked on the code for an upcoming learn guide that uses the MatrixPortal S3 to display a scrolling message board. I am impressed with the improved performance over the older MatrixPortal M4.
I’ve been continuing to follow up on older PRs and move along or wrap up any that I can. I also made a sweep through all of the library ‘good first issues’ to remove the label from any that have too much scope or complexity for other reasons. Lastly I did some testing for XSS vulnerability within the HTTPServer library and submitted a PR to scrub POST’d data with the default usage in order to harden against it.
I’ve continued working on the prototype camera board, fixing up the animated GIF recorder, ‘onionskin’ still motion mode, image special effects, QR code scanner, and more.
I also did several other PRs in CircuitPython core, including fixes to the documentation build process to fix errors and keep up to date with changes at ReadTheDocs.
This week I’m continuing to debug USB host. I got a mass storage (MSC) demo working from the iMX RT but it failed on the RP2040. I’ve been trying to figure out why. Thach tried it and it worked just fine. So, it might have something to do with my particular setup. I’ve moved back to the higher level MSC support. I suspect that my usb drive isn’t working due to a descriptor request in the middle of the MSC inquiry. I streamed this work last week.
This week I worked on the guide for the new TSC2046 breakout. It is a SPI touch screen controller. For now there is only an Arduino library available, but a CircuitPython library should be available soon. When it is ready, I will update the guide to include it.
I also began working on a re-imagining of the MX MIDI guitar project. This was one of my first collaborations with Noe and it was a huge build with a lot of really fun features. However, it went live the week that most of the US went into lockdown for COVID-19 in March 2020, so it was hard to appreciate it once it was complete with everything going on. This new version will use
synthio, some seesaw breakouts and a few other surprises we’re hoping will work out.
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.
The next MicroPython Meetup in Melbourne will be on August 23rd – Meetup.
The supplier of popular ESP32 and ESP8266 microcontrollers, Espressif, announces their yearly Developers COnference. During the two-day online event, there will be nearly 30 talks created by Espressif technical experts and its partners, covering a wide range of topics, including Thread, the low-power features of ESP32-C6 and Wi-Fi 6, ESP-Mesh-Lite + ESP RainMaker Cloud solution, ESP-IDF, RUST, SquareLine Studio, AWS IoT, and more. September 12-13, 10:00-19:00 CEST – devcon.espressif.com.
PyCon UK will be returning to Cardiff City Hall from Friday 22nd September to Monday 25th September 2023 – PyCon UK.
Maker Faire Bay Area will be October 13-15 & October 20-22, 2023 – Eventbright.
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.
20230802 is the latest Adafruit CircuitPython library bundle.
20230724 is the latest CircuitPython Community library bundle.
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,676 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.