ICYMI (In case you missed it) – Yesterday’s Python on Microcontrollers Newsletter from AdafruitDaily.com went out.
If you missed it, subscribe now! – You’ll get one fab newsletter each Tuesday (before this post the next day). Over 7,791 subscribers worldwide!
The next newsletter goes out in a week and being subscribed the best way to keep up with all things Python for hardware. No spam, no selling lists, leave any time. Now the news:
Hi everyone! It’s 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, subscribe here. Let’s get started!
CircuitPython 5.4.x Sneak Peeks & Beta 0!
Scott Shawcroft has streamed some of the latest work on CircuitPython intended for the next release. 5.4.0 Beta 0 was released on Monday.
A demonstration of lower power usage by shutting down the microcontroller during sleep – YouTube.
Scott livestreams with users and gets the CircuitPython REPL working on the ESP32-S2 microcontroller – YouTube.
Teensy 4.1 Microcontroller Board Released
pjrc.com has opened up sales for the new Teensy 4.1 development board.
It features improvements over the Teensy 4.0 board to include additional pins, a micro SD slot, and a 10/100 Mbit Ethernet 6 pin interface. Teensy 4.1 also includes a USB host port broken out to a five-pin through-hole header on the inside of the PCB, as was done on the 3.5/3.6 versions – pjrc.com and Hackaday.
As the board is similar to the Teensy 4.0, which has a current port of CircuitPython. CircuitPython 5.4.0 Beta 0 is available for Teensy 4.1 now!
Microsoft Heart Python
Microsoft Developer presents a series of 44 free YouTube videos entitled Python for Beginners – YouTube.
Probably the largest hurdle when learning any new programming language is simply knowing where to get started. This is why we, Chris and Susan, decided to create this series about Python for Beginners! Even though we won’t cover everything there is to know about Python in the course, we want to make sure we give you the foundation on programming in Python, starting from common everyday code and scenarios. At the end of the course, you’ll be able to go and learn on your own, for example with docs, tutorials, or books.
Microsoft has started a Discord server specifically aimed at Python. The server follows the Microsoft Open Source Code of Conduct.
microsoft-python can be joined via https://aka.ms/python-discord.
RGB Matrix Support Extended to the STM32F4 Feather
CircuitPython received a native library to drive RGB matrices last month using the SAMD51 and nRF52840 microcontrollers. This week, Ladyada tests out support in the library for the ST Microelectronics STM32F405 chip available in CircuitPython 5.3.0 – Twitter and Blog.
CircuitPython Support Added to the Atom Editor
CircuitPython language support in Atom! Support for serial outputs, Python REPL, and plotting of data. The plug-in contains the code from the fsync-on-save package to ensure data is flushed to the device immediately after saving, therefore preventing loss or corruption of data when working with CircuitPython devices.
The plug-in should be compatible with Windows & Linux as the serial port library should be cross-platform.
The maintainer is open to any form of feedback in the form of GitHub Issues or ping joseph#1337 in the #circuitpython channel of the Adafruit Discord Server – GitHub.
Python Language Support in Microsoft MakeCode
Beta Testing – MakeCode 2020 for micro:bit The latest beta update includes Python language support:
cyberDUCK – a self-contained computer that edits and runs CircuitPython
cyberDUCK is billed as a self-contained computer that can edit and run Python files, with USB keyboard input and a display. And it’s shaped like a disaster-recovery duck – Twitter, Hackaday.io, and YouTube.
- USB Keyboard input
- Display for showing output
- A text editor for creating and editing Python code
- A “REPL”-like command line for entering Python commands (to edit a file, run a file, etc.)
The project deliberately takes bits and pieces from others to make it work.
- Use a co-processor to take input from a USB keyboard (Arduino-based USB Host for SAMD with software modified from code by gdsports)
- Transmit keyboard input to main processor using UART
- Use a “REPL-interceptor” to allow text input from UART to control the command execution of python input from the keyboard
- Adapt a text editor MicroPython-editor (pye) from robert-hh to run on a CircuitPython Board with attached display. This will edit files by taking input from UART and output to the attached display. File storage is using on-board non-volatile memory or a memory card
Adafruit Industries continues to run with 100% of employees being paid and continuing to work. Most are working remotely, with some working in the Manhattan, New York factory as an essential service and business under NYC Executive Order 202.6 Capabilities. Adafruit was deemed an essential service to distribute/make some PPE (Personal Protection Equipment) such as face shields, and manufacturer electronics for essential life-saving/preserving equipment and development which is needed in New York and beyond. –Blog
Photos from the Adafruit factory for last week – Adafruit Blog.
AdaBox Status: Adafruit notes that, as of Monday May 11th, the upcoming AdaBox subscription is 100% full. Thanks to the community for support during this time. Adafruit encourages folks to check adabox.com, as there will be some openings before shipment, and to sign up to be notified when there are more openings.
Adafruit Hardware Being Certified Open Source
Adafruit has always been an open source hardware company, predating the Open Source Hardware Association (OSHWA) certification process. We have begun submitting all of our hardware to OSHWA for certification as Open Source. This week 102 new boards were certified including:
News from around the web!
Build a serverless Martian weather display with CircuitPython and AWS Lambda – AWS.
CircuitPython_NeoSprite – a library for updating NeoPixel arrays from sprite files such as .BMP – GitHub.
The vectorio library builds on an Feather M4 Express and draws concrete shapes are composed into a VectorShape, which is put into a displayio Group for display – GitHub PR.
An AHRS (Attitude and Heading Reference System) library for CircuitPython – GitHub.
A number of streamed video tutorials on CircuitPython are available. A selection from YouTube:
- Random Numbers & Timers with CircuitPython & Arduino
- Using Servos with Arduino & CircuitPython
- Analog In, Mapping & PWM using CircuitPython & Arduino
A large mint tin LED clock. It features battery backup and a real time clock module with automatic daylight saving adjustments. It uses a rotary encoder for setting time, date, brightness, and enabling/disabling the ticking sound, all in CircuitPython – Twitter.
A sneak peek of the enclosure base for a project, a restoration of an heirloom cuckoo clock incorporating original antique whistles and gong, activated by servos and a solenoid. It uses an Adafruit Crickit controlled by PyBadge and CircuitPython with a custom Stemma Host FeatherWing – Twitter.
The clock uses the Cedar Grove Studios Clock_Builder library, a collection of modules and libraries for building standalone RTC clocks – GitHub.
A smart thermostat with a Raspberry Pi and another version using CircuitPython on an Adafruit Circuit Playground Express – GitHub.
A quarantine day counter with an Adafruit PyPortal – Twitter.
Blink an LED when a satellite is passing by, using a Wemis D1 mini and MicroPython – GitHub.
An example of CircuitPython that allows a NINA B302 to communicate with an HTTP WORLDTIME server via a WiFi coprocessor based on NINA W102 in 802.11 mode – Blog (Portugeuse).
Installing MicroPython on inexpensive STM32F4xx boards tutorial – GitHub.
TM1637 quad 7-segment LED display MicroPython example using a Tpyboard – Learn MicroPython.
An eye opening comparison of using .join() vs. “+” to join strings in Python – Towards Data Science.
The Real Python podcast talks to Lukasz Langa about AsyncIO + Music, Origins of Black, and Managing Python Releases – RealPython.
PyDev of the Week – Jan Giacomelli on Mouse vs Python
CircuitPython Weekly Meeting for May 11th, 2020 on YouTube.
#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? Springer just made 400+ textbooks free to download.
Made with the Mu Python Editor
Why Mu? Mu tries to make it as easy as possible to get started with programming but aims to help you graduate to “real” development tools soon after. Everything in Mu is the “real thing” but presented in as simple and obvious way possible. It’s like the toddling stage in learning to walk: you’re finding your feet and once you’re confident, you should move on and explore! Put simply, Mu aims to foster autonomy. Try out Mu today! – codewith.mu
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.
No new boards were added to CircuitPython.org this week but work on new board support continues.
Looking for adding 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!
Updated Guides – Now With More Python!
You can use CircuitPython libraries on Raspberry Pi! We’re updating all of our CircuitPython guides to show how to wire up sensors to your Raspberry Pi, and load the necessary CircuitPython libraries to get going using them with Python. We’ll be including the updates here so you can easily keep track of which sensors are ready to go. Check it out!
Keep checking back for more updated guides!
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 drivers, download the Adafruit CircuitPython Library 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! 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. Feel free to contact Kattni (@kattni) with any questions.
You can check out this list of all the CircuitPython libraries and drivers available.
The current number of CircuitPython libraries is 227!
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 an eye out 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!
The name of the game this week is filters! I’ve been working on the Arduino library for what I’m now calling the “LIS331” family of high to extremely high g accelerometers. Vibrations are everywhere, and since accelerometers are really good at measuring them, to be able to find the data or signal you’re interested in from among all those measurements. It can be useful to be able to say “I definitely don’t care about all of that”. If you’ve got a needle in a haystack, a good first step to find the needle is saying “well, I know the needle isn’t in this half,” and then proceeding to feed that half to the cows.
This is where filters come in. Just like a coffee filter that keeps the big grounds of coffee out of your cup, a filter for a sensor like an accelerometer can separate one big pile of stuff into two or more piles of stuff based on some criteria. In the case of a coffee filter, the criteria is “is this piece of stuff small enough that I don’t mind having it in my coffee cup?” When talking about measurements from sensors, there’s a lot of different criteria you could use to filter the data, but a common one and one that is built into the LIS331 and many other sensors is filtering based on the frequency of the signal or how fast the signal is changing. Frequency is commonly measured in Hertz or cycles per second.
Here is a graph of the output from the H3LIS331DL while I’m using a tool to create high frequency vibration that causes the acceleration felt by the sensor to change rapidly:
In the area surrounded by the red box, you can see that the graph is pretty jagged and “peaky” because it’s displaying as much as it can of the different acceleration values regardless of frequency. Note the line marked “25” which I’ve added to this and the next plot as a reference point because the Arduino plotter automatically re-scales the graph.
Now check out this graph of the same vibrations with the built in low pass filter removing all of the signal changing faster than 37 times a second or 37 Hertz:
Compared to the previous plot, you can see that the graphs look much cleaner because the high peaks and valleys for each graph have been subdued. This is the 37Hz Low Pass Filter doing its job of only passing along data that is cycling slower than 37Hz.
These sensors also have support for a high pass filter, which I’m also working on, though I’ll have to come up with a better testing method to verify the output.
I’m finishing up the Adafruit BLE Services library. It provides BLE services that work with the Bluefruit Playground app. I have CircuitPython programs that communicate with the app, in the same way that the Arduino UF2’s we supply do.
The app is not the only way to use the Adafruit Services library. You’ll be able to use the library as a BLE central as well, to get sensor data or control NeoPixels or DotStars.
The library required some changes to the PacketBuffer class core CircuitPython BLE support. I finally finished those changes earlier this week after some false starts.
Getting CircuitPython download data automatically again, now that we’ve switched from GitHub artifacts to Amazon S3 storage for release downloads. Implementing _bleio using the bleak library on host computers. Trying to communicate with a BLE-capable fever thermometer.
I helped with the setup of Weblate, to make it easier for the community to contribute translations of CircuitPython. Please help us out by adding or improving translations.
I started a new project this week to create a version of adafruit_sdcard which is written in C instead of in Python. We hope that this new version will have higher performance and leave more memory free for your Python code and objects. Initial results for a single file on a single card show that reading a large file 4096 bytes at a time became about 40% faster. However, additional testing on multiple SD cards and CircuitPython boards is indicated.
While working on the code, I was inserting and removing the SD card repeatedly. I think mechanical stress was probably the reason this card broke in two, but software bugs are not entirely ruled out ??
This week I finished up the CircuitPython library GitHub issue sweep. Between following up with original authors and putting in a few PRs of my own, I managed to close at least 50 issues. As well, I went back through and made sure to label every issue I could, and reply to those I could not. The list available on the Contributing page on circuitpython.org is sortable by issue label, and now that information is far more useful, as each issue is now labeled. If you’re interested in contributing to CircuitPython, check it out, it’s a great place to start. Good First Issues are available for those who are new or looking for something simple. Otherwise you can look into bug fixes, enhancement requests or documentation updates if you’re interested in something a bit more involved. Check it out and feel free to ping us with any questions!
This week I’ve been handling mostly bugfixes and reviews, along with some new additions. I added a basic port of the OpenMV, a camera development board hosting the powerful STM32 H743 SoC – a somewhat anemic addition, given that Circuitpython does not support cameras (yet!), but it’s also the first third party H7 board supported by the port. Other additions this week included DisplayIO support on the H7 and F7 series, and some initial revisions to the i.MX port to support uni-directional SPI. This week, I’ll be following up the i.MX work to flesh out the QoL features in Microcontroller, including pin claiming, peripheral reservation, and the like.
On my personal time, I spent a somewhat regrettable amount of effort yesterday getting unicode Japanese support on an e-paper featherwing. My ambition is to eventually have a lightweight smart flashcards system (inspired by Anki) on CircuitPython to study math and languages without a backlight. It’s sadly not very impressive yet – the display takes a whopping 40 seconds to update just a handful of glyphs – but asking around it seems there may be some accessible ways to speed it up. Hosting the font on an SD card rather than internal flash will also allow more fleshed out character support.
This past week I focused mostly on adding the I2C protocol to the Adafruit_CircuitPython_BitbangIO library. This was fairly difficult because it seemed any existing examples implementing this were written just slightly differently or largely incomplete. One of the sources that I found most helpful was looking at how CircuitPython had implemented it and using that as a base worked pretty well. I also checked the output when running hardware I2C with my logic analyzer and compared that to the output and I was able to get some good data when I tested with the BME280.
After that, I started working on adding support for the GreatFET one to Blinka. This was inspired by a tweet that I saw by Michael Ossmann where he mentioned that you could run a GreatFET One with Python and the fact that I had received one from Kate Tempkin at the Hackaday SuperCon this past year. I already have it being detected and it seems like it will be pretty straightforward to add.
This week I’ve been working on CircuitPython for the ESP32-S2. It’s all hacked together but I’ve managed to get the REPL working. On my stream last week, I added pin definitions and talked about the linker errors I was hitting. This week, I fixed the linker errors and fixed a few issues at startup with FreeRTOS and TinyUSB. The REPL is now working!!!
The next steps are to get the flash working for the CIRCUITPY drive and then polish it up and merge it. Tune into my live streams, Fridays at 2pm Pacific, for the latest info.
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.
PyCon2020 Online has launched! Head over to https://us.pycon.org/2020/online/ to access new content weekly. Pythonistas come together every year to learn, network & discuss great ideas in person at PyCon. That can’t happen this year, but everyone can get together virtually! – Announcement.
Items of note:
- How to build an intelligent “indoor garden” with microcontrollers, CircuitPython, and IoT – YouTube.
- 9 Years of PyLadies: Lessons Learned and What Comes Next – YouTube.
The USA Science & Engineering Festival is to offer their popular X-STEM conference in a virtual format! X-STEM All Access is an engaging, entertaining, educational, and interactive online STEM experience for kids. Through a series of daily livestream events, students will hear from an exclusive group of visionaries who aim to empower and inspire kids about careers in science, technology, engineering, and mathematics.
X-STEM All Access presentations will be geared toward a middle and high school level audience (grades 6 to 12), but kids and adults of all ages are welcome to join. Educators are encouraged to include X-STEM All Access into their distance learning curriculum.
There will be daily presentations on May 13, 14, 15, 18, and 19th, 2020 from 1-2 pm US EDT.
There is no cost to attend. Register on their website – usasciencefestival.org.
May 23, 2020: Virtually Maker Faire, featuring Makers and projects primarily responding to COVID-19. Virtually Maker Faire provides an opportunity for makers to connect, share their projects and talk about what they do and how they do it. It will take place completely online, through video sessions over a 24-hour period and as a curated collection of maker exhibits. The goal is to help makers present their work to a broader public; to gain understanding, support and increasing participation – Makerfaire.
The HydPy May Meetup will feature Ayan Pahwa speaking about Programming Microcontrollers using CircuitPython. It is scheduled for May 29, 2020 from 17:00 – 18:00 (GMT+5:30) – meetup.
EuroPython 2020 this year will be an online conference from July 23-26. They are planning the following structure:
- 2 conference days with keynotes, talks, lightning talks, poster session (Thursday and Friday)
- 2 sprint days with multiple sprint teams (Saturday and Sunday)
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.
20200508 is the latest CircuitPython library bundle.
jobs.adafruit.com – Find a dream job, find great candidates!
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.
The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 18,737 humans, thank you! Join today! https://adafru.it/discord
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.
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.
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.