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 terrific newsletter each Tuesday (before this post). Over 7,970 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.
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!
Python Leads the IEEE Top Programming Languages for 2020
It’s been a turbulent year since the last time IEEE Spectrum broke out the digital measuring tools to probe the relative popularity of programming languages. Yet one thing remains constant: the dominance of Python.
Our default ranking is weighted toward the interests of an IEEE member, and looking at the top entries, we see that Python has held onto its comfortable lead, with Java and C once again coming in second and third place, respectively. Arduino has seen a big jump, rising from 11th place to seventh.
One interpretation of Python’s high ranking is that its metrics are inflated by its increasing use as a teaching language: Students are simply asking and searching for the answers to the same elementary questions over and over. But Python is frequently used professionally and in high-profile realms, such as machine learning, thanks to its enormous collection of high quality, specialized libraries – IEEE.
ALICE the Robot
ALICE is a Kinect controlled FPV mini-mech powered by CircuitPython on an Adafruit Feather microcontroller. The skeleton is 3D printed on a MP Mini Delta printer – Twitter.
CircuitPython Deep Dive Stream with Scott Shawcroft
This week, Scott streams his work on ESP32-S2 hardware. He gives a recap of the computer setup changes and then validates pin selections on the Saola Feather adapter.
You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.
CircuitPython Day is 9-9-2020
Adafruit has chosen September 9, 2020 (9/9/2020) as the snakiest day of this year for CircuitPython Day! Much more to come on events and happenings to include a CircuitPython team livestream, collaboration with hardware and software folks, and highlighting all things Python and Python on Hardware. More information will be forthcoming. Ideas? Send them via email to email@example.com.
Adafruit is shipping orders!
Production is up and now is the best time to get the Adafruit items you’ve been waiting for.
The Adafruit Discord Server Surpasses 23,000 Users!
The Adafruit Discord community, where we do all our CircuitPython development in the open, surpassed 23,000 members Sunday, thank you! Adafruit believes Discord offers a unique way for CircuitPython folks to connect. Join today at https://adafru.it/discord.
News from around the web!
A workshop clock (with a pandemic-inspired what-is-today display), ready for its debut. No internet required and ready for the zombie apocalypse. Inspired by John Park’s Metro Minimalist Clock project. Programmed in CircuitPython – Twitter.
Maker Melissa previews her YouTube views and subscribers scrolling matrix display, powered by CircuitPython, with detail planned for release next week – Twitter.
Another Pomordoro-like timer device with Adafruit Feather components – Twitter.
First time using CircuitPython and it’s awesome!
Lighting up a Lego Birch Books set with CircuitPython – Blog.
All the talks from last week’s PyOhio online conference are available in one playlist – YouTube.
10 Standout GitHub Profile READMEs (a new feature quietly launched a few weeks ago) – dev.to.
Mastering Python’s Built-in time Module – Real Python.
How To Use the pathlib Module to Manipulate Filesystem Paths in Python 3 – Digital Ocean.
Setting Up Python for Machine Learning on Windows – Real Python.
Dealing with legacy code – Women Who Code.
How does % work with decimals, for instance why is 10 % 2.2 not equal to 1.2 – learnpython subreddit.
The Learning Python Roadmap (below) – Twitter.
PyDev of the week: Carlton Gibson on Mouse vs Python
New Boards Supported by CircuitPython
The number of supported microcontrollers and Single Board Computers (SBC) grows every month. This section outlines which boards have been included in CircuitPython or added to CircuitPython.org.
There were no new boards added this week but some are in process.
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!
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!
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 263!
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!
The AS7341 is done, at least for now; The CircuitPython library has been released and is available in the bundle and via pip, and the Arduino library should be added to the library manager soon. It has been an interesting sensor to work on, and I’m interested to see what people do with it.
One thing I’ve been pondering lately is the value of documentation. When a device is poorly documented or there are large pieces of documentation just missing, it’s not unlike losing your keys: You know you what you’re looking for, but you just can’t find it. Good documentation on the other hand removes the friction that comes when just trying to find the thing you know you need to know. Stellar documentation (see Texas Instruments and Analog Devices) goes a step further and calls your attention to information that you didn’t know you needed.
Bad documentation is like a bad community: it’s just not enjoyable to work with, and makes one turn to more pleasant alternatives.
I’m continuing a re-implementation of CircuitPython _bleio that supports the HCI (Host Controller Interface) Bluetooth adapter protocol. HCI is a serial protocol available on ESP32, used on our AirLift boards. I’m now working on the ATT (attribute) protocol, which exchanges information about what kind of data is available from a peer device, and sends the data back and forth. Sadly, this protocol is not implemented directly in the high-level HCI protocol, so I must provide it. I’m converting the ArduinoBLE library ATT code from C++ to C and using its basic structure.
Recently I dabbled in the Libraries side of CircuitPython. You can now fine tune the frequency of the crystal into DS3231 to make it keep even more accurate time. These chips were quite accurate to begin with, gaining or losing just a few seconds per month at most, but it’s good to know that with care and the right test equipment you can improve them to be accurate to within just a few seconds per year.
This week, I published the PMSA300I air quality sensor breakout guide. The PMSA300I is similar to the PM2.5, but instead of UART, it uses I2C! This breakout comes with STEMMA QT connectors, so it’s super simple to get started, with no soldering necessary. The guide covers all the details about the sensor, including pinouts and resource downloads. There are wiring diagrams and usage examples for both Arduino and CircuitPython. The CircuitPython section uses the fancy new Adafruit CircuitPython PM25 library, which makes getting particle data super simple. If you’re looking to get started with your PMSA300I, check out this guide.
I also updated the PM2.5 guide to use the fancy new PM25 library – both sensors use the same code, with a simple change in set up.
I’ve been helping @fede2 with translating Adafruit Learn guides. This week, in preparation for translating the Circuit Playground Express guide, Àlvaro published Makecode para la Circuit Playground Express, and he’s currently working on the CircuitPython Made Easy on CPX and Bluefruit guide which is linked to from the CPX guide. Àlvaro has been putting so much work into translations – it’s amazing to see and we really appreciate it!
Finally, I’ve been doing plenty in Fritzing land. I put together wiring diagrams for a couple of guides, and have been creating Fritzing objects for some new and it’s-not-out-yet-don’t-ask products. If you want a sneak peek at upcoming products, check out the Adafruit Fritzing library for recent additions!
This week, I worked on the implementation of PMWOut on the ESP32-S2, enabling PWM frequency and duty cycle modulation for LEDs and servo motors. It’s been a breath of fresh air working with the ESP32, after coming from STM32 and NXP. Both of the latter companies have powerful chips, the also have very technical and sometimes convoluted documentation – Espressif clearly puts a lot of care into their API docs and examples to make them readable, and it shows. It’s always nice to see hardware producers take extra steps to make high quality documentation and raise the standard for the rest of the industry.
I also worked on reviews for the STM32 F1 implementation, and the upcoming STM32 SDIO module, alongside preliminary work for the rest of ESP32-S2 PulseIO. The ESP’s interface has been inspiring me to think of ways to use it in my own projects – though it’s regrettable that the Bluetooth was cut to make room for native USB. I’m impatient for the day that we finally get our 500MHz Wifi/Bluetooth FS USB chip for under a dollar… but my fantasies for capable computing will have to wait.
This past week, I started out by looking at the Arduino ImageReader library because a user had pointed out that they were not able to get the example working on an M0 processor. It appears the result was due to an incomplete implementation on my part. So I dove in and started working on converting a similar class written for TFT displays to work on the eInk displays. As I went along, there were various states of success as it got closer to completion. Eventually, I got it drawing correctly and it’s now integrated into the Arduino library.
After I finished the eInk displays, I moved over to writing a library that makes use of the RGB Matrix and Metro M4 Airlift Lite to provide a library to make using the Matrix with the internet as easy as the PyPortal library makes using the PyPortal. I decided to part from the way that PyPortal works and provide more of a library of functions which initializes the function rather a monolithic library that does one thing very well. I have decided to call the library MatrixPortal and am continuing to add functionality. Be sure to keep an eye out for it.
Last week I had a variety of tweaks to CircuitPython out for PR including switching to PyStack, adding
memorymonitor, removing the existing network APIs and adding
bytearray. They’ve been merged and we’re due for another release.
Yesterday, I continued work on the ESP32SPI and Requests libraries to optimize them for memory use. I was testing an unreleased PyPortal project to see if it can work. Memory use does look better but is still a challenge.
The end of this week I’m switching gears a little bit to add networking support to the ESP32-S2 and also verifying some hardware design assumptions.
PyCon AU has announced they are holding PyConline AU, an online event, from 4–6 September 2020 – pycon.org.au.
PyGotham is a New York City based, eclectic, Py-centric conference covering many topics. PyGotham TV taking place October 2-3, 2020 with a single track of talks presented online – Event Website and Call for Proposals.
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
Data Science using Python is a consortium of 970 Meetup groups with over 700K members. There are meetings being held worldwide, see their main page for details – Meetup.
PyData is a consortium of 175 groups with about 170K members, and provides a forum for the international community of users and developers of data analysis tools to share ideas and learn from each other – Meetup.
PyLadies has 28 groups with over 28K members. Find out what’s happening in PyLadies Meetup groups around the world and start meeting up with the ones near you – Meetup.
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.
20200727 is the latest CircuitPython 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.
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.
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. You may also tag your information on Twitter with #CircuitPython.