View this email in your browser.
Hi everyone! Here is the latest Python for 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, you can subscribe here. Let’s get started!
CircuitPython 5.4.0 Beta 1 is out!
The second beta release of CircuitPython 5.4.0 is now available. This release adds basic lower power support when in time.sleep(). The lower power work changed time keeping and may have introduced bugs. Please use 5.3.0 if you need a stable version of CircuitPython – GitHub.
New features and improvements since 5.4.0 Beta 0:
- New port for the ESP32-S2. Thanks to @tannewt, @jerryneedell, @jepler
- New countio module to count pulses. Thanks to @LearnWeaver
- New watchdog module to control built in WatchDog. Only on nRF52840 currently. Thanks to @xobs
- New vectorio module for native displayio shapes. Thanks to @WarriorOfWire
- New pre-commit hooks. Thanks to @Flameeyes
- Native module docs are now Python stubs. Thanks to @dherrada, @sommersoft and @tannewt
- Add one directional UART support to iMX RT. Thanks to @hierophect
- Add negative step support to PixelBuf. Thanks to @dunkmann00
- Add support for anonymous BLE advertising. Thanks to @xobs
- Add support for REPL over debug UART. Only on STM32. Thanks to @k0d
- Add bytearray.decode() for improved CPython compatibility. Thanks to @theacodes
- Fix garbled audio playback when voice 0 is stopped. Thanks to @jepler
- Fix timekeeping on Spresence. Thanks to @kamtom480
- Fix exception when no bus is found to match other ports (and be compatible with find pin combo scripts.) Thanks to @arturo182
- Fix pulseio deinit issue on SAMD. Thanks to @DavePutz
- Fix USB race condition on SAMD. Thanks to @hathach
- Fix microcontroller.cpu.temperature crash on iMX RT. Thanks to @arturo182
- Fix gamepad and gamepadshift after lower power changes. Thanks to @jepler
- Increase max SPI speed on iMX RT. Thanks to @arturo182
- Allow setting RGBW pixels with RGB value. Thanks to @rhooper
- Update ulab. Thanks to @jepler and @v923z
- Clock configuration improvements on STM and iMX RT. Thanks to @hierophect
- Add support for GD25S512MD flash chip. Thanks to @bd34n
- New translations for Czech (cs) and Dutch (nl). Thanks to @DustinWatts, @vooralfred, @dronecz and @jepler.
- Improved German, French and Swedish translations. Thanks to @bergdahl, @aberwag, @dglaude, Thomas Friehoff, @PTS93, and @jepler.
CircuitPython Bluetooth BLE Library Support for Desktop Python
Ladyada has been trying out the NEW BLE CircuitPython library support for desktop (video). Having easy, cross-platform python support for wireless BLE has been a challenge for many years. Thanks to Dan Halbert’s great work on CircuitPython bleio and the Python bleak library, we now have many Adafruit CircuitPython BLE examples working on desktop Python! Finally: heart rate monitors, bike cadence sensors, thermometers, and more, can be connected to Python! – YouTube and the Adafruit Blog.
A CircuitPython-powered Bracelet
Geek Mom Projects presents a stunning new wearable: a NeoPixel bracelet powered by an Adafruit Gemma M0 using CircuitPython.
Still experimenting with blending LED colors in semi-translucent resin. Now trying the technique in wearables (of course). The cuff bracelet contains two side emitting LED strips facing opposite directions.
The electronics are cast in resin from a mold obtained on Amazon – Twitter.
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams a recap of his work on ESP32-S2 – YouTube.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.
Right after the above Friday stream, Nina Zakharenko streamed the Python Tea Community Chat with Scott. They talked about ElectionCal.us, a tool for sharing voting information and more! – Twitch.
Adafruit is shipping
If you have been waiting to order, read Adafruit’s announcement and FAQ and then Shop Adafruit.
Adafruit continues its history of championing action and equality. See their continuing post – Adafruit Blog.
The Python Software Foundation stated this month: “The time for silence is long past. The Python Software Foundation stands in solidarity with the Black community. #BlackLivesMatter”. The Python community has a long history of inclusion and support – Twitter.
The Adafruit Discord Server now has over 21,000 members!
The Adafruit Discord community, where we do all our CircuitPython development in the open, exceeded 21,000 users today! Thank you! Adafruit believes Discord offers a unique way for CircuitPython folks to connect. Join today at https://adafru.it/discord.
GitHub Changes Announced
Chrome developer Una Kravets asked GitHub to follow Google in its move to use the term “main” instead of “master” in GitHub last week. GitHub CEO Nat Friedman answered promptly on June 12th, revealing that the company was already working on the issue. GitHub lending its backing to this movement effectively ensures the term will be removed across millions of projects, and it effectively legitimizes the effort to clean up software terminology that started in the industry this month – Tweets and ZDnet.
News from around the web!
The CircuitPython plug-in for the Atom editor has been updated with some awesome new features! – Joseph Banks and Atom.
A repair of a damaged heirloom clock using the original acoustic whistles and chime. Sound components are activated by servos and a solenoid. It uses an Adafruit Cricket + PyBadge + RTC FeatherWing, and custom I2C host PCB from Oshpark. Coding with CircuitPython – YouTube and Twitter.
An upcoming Adafruit Learning System guide on using CircuitPython with large LED matrix displays for use as graphic signs – Twitter.
A rotating platform controlled with an ESP32 running MicroPython – GitHub and YouTube.
A version of a Tamagotchi using an Adafruit Metro M4 board with a connected LCD display. All logic and menu systems/text typing etc. are custom coded in CircuitPython – Twitter.
Testing of a robot using CircuitPython on an Adafruit Metro M0 Express in preparation for a workshop – YouTube and Twitter.
Win at Scrabble using a Raspberry Pi with a display and camera module, a Python tutorial – YouTube, GitHub and Twitter.
Print your own Adventure game with a thermal printer, a Raspberry Pi, arcade buttons, and CircuitPython – Twitter and Dev.
Using Subroutines in CircuitPython and Arduino – YouTube and Twitter.
A rover able to deliver supplies to COVID-19 patients while minimizing infection risk. It uses a Raspberry Pi Zero in conjunction with a balenaFin and a Pi Camera. The Pi runs a web server via the Python library Flask which serves a web page and allows for the rover to be remotely controlled, including use of the Adafruit PCA9685 library – Hackster.io.
A LoRaWAN Node using MicroPython – Hackster.io.
Home Assistant, the Python IoT Hub – LWN.net.
An ESP32 MicroPython Web Server providing sensor data via a webpage – How 2 Electronics.
Beautiful and Easy Plotting in Python — Pandas + Bokeh. A single line of code to create an interactive plot from Pandas dataframe to Bokeh – Towards Data Science.
Web Scraping in Python: Tools, Techniques, and Legality. Kimberly Fessel discusses her excellent tutorial created for PyCon 2020 online titled “It’s Officially Legal so Let’s Scrape the Web” – Real Python and Twitter.
An introduction to Numpy and Pandas course in Jupyter notebooks format – GitHub.
CircuitPython Weekly for June 15th, 2020 on YouTube.
PyDev of the Week: Kyle Stanley on Mouse vs Python.
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? Learn it Faster: The Entire Python Language in a Single Image.
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 6 new boards added!
Looking for adding a new board to CircuitPython? It’s highly encouraged! Adafruit has four guides to help you do so:
New Learn Guides!
Adafruit H3LIS331 and LIS331 High-g 3-Axis Accelerometers from Bryan Siepert
Adafruit 2.23” Monochrome OLED Bonnet from Melissa LeBlanc-Williams
Creating Your First Tilemap Game with CircuitPython from Tim C
ItsyBitsy Keybow Mechanical Keypad from John Park
PyPortal Guitar Tuner from Noe, Pedro, and 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 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 260!
Here’s this week’s new CircuitPython libraries:
Here’s this week’s updated CircuitPython libraries:
PyPI Download Stats!
We’ve written a special library called Adafruit Blinka that makes it possible to use CircuitPython Libraries on Raspberry Pi and other compatible single-board computers. Adafruit Blinka and all the CircuitPython libraries have been deployed to PyPI for super simple installation on Linux! Here are the top 10 CircuitPython libraries downloaded from PyPI in the last week, including the total downloads for those libraries:
Keep checking back for updated download stats coming soon!
What’s the team up to this week?
What is the team up to this week? Let’s check in!
I’ve finished the initial version of the Adafruit_Blinka_bleio library, which lets you use CircuitPython BLE code on host computers, like the rest of the Blinka library. The same programs that run on CircuitPython on our BLE-capable boards now run without change on Linux and Windows. I’m testing with a heart rate monitor, BBQ thermometer, a BLE light bulb, and other such devices.
There are still some stumbling blocks for MacOS, and there are some limitations in the current implementation of bleak, the underlying library I’m using, that prevent using Adafruit Services. We’re looking into overcoming these issues. Nevertheless, bleak has worked out quite well so far, and it is impressive how it supports such disparate platforms with a single clean API.
Work on high performance SD card interface continues on the Grand Central with SAMD51. This is how my improvised setup looks right now.
The overall structure of the code is in place, but it doesn’t work yet. The Grand Central board is trying to communicate with the card to retrieve the card ID, but nothing is received in return. Investigation continues, and the vital clue is sure to turn up soon.
I began this week by getting ahead on creating Fritzing objects for upcoming hardware so they’re ready for the guides as the hardware becomes ready to ship. I did ten in total, including two FeatherWings, which adds to the level of complication. I was also asked to update a guide to include a FeatherWing version of the LSM6DSOX + LIS3MDL precision 9 DoF IMU breakout, but it turns out the guide was never created in the first place. So, now I’m working on creating the guide.
I’ll be working on going through a list of CircuitPython supported boards that have duplicate VID/PID numbers, and determining whether it’s intentional or needs to be changed. We’ve added a check to verify duplicate VID/PIDs, so we won’t have to deal with it moving forward, but it means going through all the current boards with duplicates and making judgement calls. Details can be found in CircuitPython issue #2962.
This past week I rewrote the clock setup system for the STM32 port – a lot of the code was pretty old, and not especially flexible, so it was causing crashes and other issues when combined with the new low power code. The new system reduces all the clock settings (including both the primary clock controller, the RCC, and the low power real-time clock, the RTC) down to a set of defaults that a board can choose to overwrite. This gives board contributors a lot of flexibility over what clock settings they want in case they’d like to lower their power use, use specific peripherals that require certain frequencies, etc. It also resolves bugs with the low power code that were causing crashes with certain modules, and generally improves speed and power efficiency over most dev boards.
I also spent some time working on the i.MX port, solving some simple but tricky-to-track bugs on the Teensy 4.0 and 4.1, and got set up with the RGBMatrix code on STM32. My current project is cleaning up a number of older issues with the H7 and F7 series that never quite got cleaned up. Yesterday, I added tightly-coupled memory (TCM) support to the F7 series, and I’m currently wrapping up an issue with the calculation of I2C timing. With luck I’ll be out of the debugging weeds soon, to get back to RGBMatrix support and hopefully submit some projects of my own to the community bundle.
This past week I’ve been focusing on displayio once again. I have been going through each of the displays and making sure they all work as well as adding features such as basic backlight control and display rotation. This will be really useful for making use of the displays that are designed specifically for the Raspberry Pi and other boards with similar 40-pin connectors.
This past week I finished up busio.I2C on the ESP32-S2. Thanks to MarkOlsson for pointing out a problem with ACK/NAK that got a sensor working. Once that was done, I added pin validation and pull up checking. Next up is UART and SPI. I’ll also be doing a new beta release shortly.
FlaskCon is a community driven Flask event being held July 4th and 5th. It is intended for speakers and attendees all over the world to participate in technical and evangelical sessions related to Flask. Flask is a micro web framework written in Python – Event and Call for Papers.
EuroPython 2020 this year will be an online conference from July 23-26. The schedule is now available – Website.
Attending the conference days will require a ticket, participating in the sprint days will be free – EuroPython.
PyCon AU has announced they are holding PyConline AU, an online event, in August 2020 – pycon.org.au.
PyCon India 2020: the premier conference in India on using and developing the Python programming language. Held online October 3-5, 2020. A call for proposals is now open through August 14, 2020. – Website and 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.
CircuitPython’s stable release is 5.3.0 and its unstable release is 5.4.0-beta.1. New to CircuitPython? Start with our Welcome to CircuitPython Guide.
20200613 is the latest CircuitPython library bundle.
v1.12 is the latest MicroPython release. Documentation for it is here.
3.8.3 is the latest Python release. The latest pre-release version is 3.9.0b3.
1,746 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, Microcenter, Raspberry Pi and more.
ICYMI – In case you missed it
The wonderful world of Python on hardware! This is our first video-newsletter-podcast that we’ve started! The news comes from the Python community, Discord, Adafruit communities and more. It’s part of the weekly newsletter, then we have a segment on ASK an ENGINEER and this is the video slice from that! 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. Join our Discord or post to the forum for any further questions.