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,825 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. On with the show:
It’s here! The latest Python for Microcontrollers newsletter is 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. What’s new this week:
Fifty Single Board Computers are now Blinka Compatible
Blinka is the software which provides Python on Single Board Computers (SBCs, like Raspberry Pi), which run Linux, the ability to use CircuitPython libraries. It brings all the drivers and ease of use in CircuitPython to the powerful Linux SBC world.
This week, Blinka now runs on 50 Single Board Computers! Write once, run on the boards of your choice.
See all the boards which run Blinka on CircuitPython.org.
Python Developers Survey 2019 Results Released Yesterday
In the fall of 2019, the Python Software Foundation and JetBrains together conducted the official third annual Python Developers Survey. Much like the previous surveys in 2017 and 2018, they set out to identify the latest trends and gather insight into what the world of Python development looks like in 2019. The insights from 24,000 Python developers from more than 150 different countries have helped get a picture of the Python community.
Some interesting results:
Full results – JetBrains.
CircuitPython 5.4.0 Beta 0 Released
The recently released CircuitPython 5.4.0 Beta 0 is the first beta release of CircuitPython 5.4.0. This release adds basic lower power support when in
time.sleep(). The lower power work changed time keeping and may have introduced bugs. You are advised to use 5.3.0 if you need a stable version of CircuitPython.
New features and improvements since 5.3.0
- Add sleep support while
time.sleep()on ports except CXD56 and LiteX.
- ujson.load can now use mp_stream objects like busio.UART.
- rgbmatrix now supported on STM32F4.
- aesio added for C level AES.
- displayio enabled on STM32H7 boards.
- One directional SPI now supported on IMX RT.
- Added empty Swedish translations. (Try the new Weblate site to add and improve translations)
_pixelbuf.colorwheelcolor order fixed.
- PacketBuffer reliability improved.
packet_sizeis deprecated in favor of
outpoing_packet_lengthadded so calling code can split input appropriately.
- ulab updated. Removed from espruino_pico and espruino_wifi due to space.
- os and pulseio enabled on STM32F7.
- Pinout of Teknikio Bluebird updated for newer revision
- Itaca uChip now has .bin files as well as .uf2.
- STATUS2 is no longer read for SPI Flashes with single status bytes.
- Documentation fixes
The full commit log – GitHub.
New boards since 5.3.0
- Teensy 4.1
- Makerdairy Pitaya Go
- Nordic PCA10100
- OpenMV H7
- STM32F746 Nucleo
- STM32F746 Discovery
Adafruit Services for CircuitPython: Use BLE to Talk to Sensors, NeoPixels, and More
There’s a new Bluetooth BLE library for CircuitPython,
adafruit_ble_adafruit, which defines a bunch of Adafruit BLE Services for talking to sensors, controlling NeoPixels and DotStars, and playing tones.
Here’s the current list of services, so you can get an idea of what’s available:
- Addressable Pixel Service (NeoPixels and DotStars)
- Barometric Pressure Service
- Button Service (on-board buttons and switches)
- Color Sensor Service
- Gesture Service (for gesture sensors like the APDS9960, which is on the CLUE and Bluefruit Feather Sense boards)
- Gyroscope Service
- Humidity Service
- Light Sensor Service
- Magnetometer Service
- Microphone Service
- Proximity Service (e.g., APDS9960 again)
- Quaternion Service
- Temperature Service
- Tone Service (play tones)
Learn about CircuitPython, Device Simulator Express, and PyBadge
Python in MakeCode Videos
Microsoft has an entire video channel dedicated to the use of their MakeCode block language. Recently some MakeCode environments, notably MakeCode for Minecraft and MakeCode for micro:bit, have added Python as an additional programming method. With their educational streams, Microsoft has been introducing Python in MakeCode. Here are several streams on Python in MakeCode from the last week:
- MakeCode Python for Minecraft
- MakeCode Python for micro:bit
- MakeCode Python for Minecraft
- MakeCode Python for micro:bit
Oh, and a late breaking article: Microsoft: we were wrong about open source – The Verge.
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.
Since opening this capability last week, we’ve received hundreds of contributions, including a finished Swedish translation. If you write another language, visit https://hosted.weblate.org/engage/circuitpython/, sign in, and start translating. You can create a new account just for Weblate, or sign in using other sites like GitHub, Google, or Facebook. If you have any questions, visit the Adafruit Discord server in the #circuitpython channel, we’re happy to help.
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
Adafruit has started shipping regular (non-emergency) orders after priority orders are filled.
If you have been waiting to order, feel free to submit your order, noting that the fulfillment time may be longer than pre-COVID – Shop Adafruit.
Note: there may be a number of out of stock items as manufacturing has been disrupted. Adafruit suggests if an item is out of stock and needed, searching at resellers may yield stock. In the US, Digi-Key is suggested.
How Adafruit is meeting CDC and other guidelines on environmental safety, NYC status, and much more – Blog.
Adafruit Hardware is Being Certified as 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.
The application process for the roughly 390 Adafruit boards that were submitted was finished two weeks ago. Of the 390 submitted, 384 of them have been approved so far.
Open Source License Graphic Generator
The Open Source Hardware Association requires submissions to list the three licenses covering a submitted project: those for the hardware, software, and documentation. To list these, Jeffrey Yoo Warren wrote a program to generate an SVG graphic with the three licenses as entered by a user in a web page – Web Generator, Twitter, and GitHub.
IoT Makers Israel Stay @ Home Challenge
For the last three weeks, IoT Makers Israel has held the Stay @ Home Challenge to encourage people to create an hardware/electronics projects. Sponsored by Adafruit, participants were asked to make an interesting project that you want to do using an Adafruit Circuit Playground Express (board or simulated in software). The challenge just ended last Friday and the announced winners via Facebook: Karin Chechik, Dor Alt, and Amit Edvy.
News from around the web!
Adafruit Trinket M0 and CircuitPython from Gary Explains – YouTube.
Timon writes about the NXP MIMXRT1020-EVK i.MX 1020 evaluation board – Twitter.
What an absolute chonky unit those i.MX RTs in TQFP 144 variant are. Well, that was very easy, flashed @arturo182 TinyUF2 and then @Adafruit CircuitPython, which I didn’t even have to compile and could just download the UF2 from http://circuitpython.org. Best vendor dev board experience without even having touched the vendor tools.
How to Remote Control Your Raspberry Pi Camera from the Web – Tom’s Hardware.
A dual color bar graph with CircuitPython – Instructables.
NINA B302 (802.11) commanded by Alexa Voice Assistant using CircuitPython – Blogger (Portuguese).
The MicroPython-Editor is a small text editor written in Python running on PYBoard, WiPy1, the pycom.io modules like WipPy 2, Lopy, SiPy, FiPy, ESP8266 modules, Teensy 3.5/3.6 and the MaixPy, allowing to edit files locally. It is based on the editor widget of pfalcon. It’s been ported to PyBoard, WiPy1, ESP8266, Teensy, ESP32, the Pycom.io, MaixPy devices, and CircuitPython devices – GitHub.
Awesome MicroPython covers all things MicroPython in an awesome list – GitHub.
DHT11 data log into Google Sheets with MicroPython and ESP32 & ESP8266 – YouTube.
Installing MicroPython on an ESP8266 – YouTube.
Output MicroPython REPL to TFT LCD – Blog.
Under Discussion: The Performance of Python – Welcome to the Jungle.
Comparing BASIC on the Commodore 64 with Python on the Raspberry Pi – bigl.es.
PyDev of the Week: Qiusheng Wu on Mouse vs Python
A new Humble Bundle of Python books from No Starch Press – Humble Bundle.
This Python YouTube course is designed to take one from beginner to “pro” in the Python language – YouTube.
Real Python has created several Python quizzes as a fun way to test your Python skills – Real Python.
Coming Soon via CircuitPython Pull Requests
Adding bytearray.decode() for CPython compatibility – GitHub.
The vectorio library is intended to speed up drawing of shapes – GitHub.
Work continues on a modern SD card IO library – GitHub.
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 11 new boards added!
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!
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 230!
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 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!
I’m still on the filter game from last week. This week I added Arduino library support for the high pass filters in the LIS331 Accelerometers. That wrapped up the Arduino library for now so by the time you read this is should be released. As opposed to low-pass filters that narrow down the data to focus on slower and steady acceleration measurements like orientation detection, a high-pass filter will filter out static or slowly changing data, like the acceleration from gravity, to focus on dynamic acceleration signals coming from movement of the device being measured. This diagram from an LIS331 application note shows how a high-pass filter alters the data being output when compared to the raw signal
With the Arduino library taken care of and pointing the way, I then went on to write the CircuitPython library. In terms of core functionality, both libraries have the same feature set, however with the CircuitPython library we make use of things like data descriptors and properties to be more “Pythonic” in how the user interacts with the library. We also make the library a bit more high level to better match the expectations of Python and CircuitPython users.
And it’s available now! You can grab it in the latest bundle if you’re using a device running CircuitPython, or on PyPi if you’re using it on a Raspberry Pi or other Blinka supported computer. The guide for the upcoming LIS331 sensors will be available shortly, as I’m working on it now, and the sensors themselves should be available not long after that.
The Adafruit BLE Services library is done. It provides BLE services that work with the Bluefruit Playground app and the Web Bluetooth Dashboard. You’ll be also able to use the library to build custom clients and servers to send whatever sensor or control data you want. I’ve written CircuitPython programs for the Circuit Playground Bluefruit, the CLUE, and the Feather Bluefruit Sense that communicate with the app. Stay tuned for new Learn Guides about this library.
Along the way, I worked with Antonio, the app developer, to debug and fix some minor bugs on both sides of the code.
This week I’ll start looking at implementing _bleio using the bleak library on host computers.
Continuing my quest to make SD cards work better in CircuitPython, I’ve put my attention on the STM32F405 Feather. This board uses “SDIO” instead of “SPI” to connect to the SD card. Right now, I’m studying how the code needs to be restructured to allow both kinds of connection.
I also worked on fixing several bugs in the last beta release of CircuitPython. These bugs were related to audio and gamepad functionality, and the fixes should be in the next beta release after 5.4.0-beta.0.
Last week, I finished up the first major sweep of the CircuitPython library GitHub issues. I intend to do another quick sweep this coming week or next to close out any that did not receive further activity where a response was requested. The plan moving forward is to do a full sweep every so often so we can do a better job keeping up with everything. It’s ok for issues to remain open for lengthy periods, but we want to ensure that’s happening for a reason and not simply because they’ve been missed.
Since then, I’ve been working on the Adafruit CircuitPython LED Animation library. We initially implemented a few simple animations. Over the holiday season, my partner and I had a decorated tree that included over 300 NeoPixel LEDs and it displayed a number of different and improved animations. We started a PR for it, however, we were using pixebuf, a feature of CircuitPython that moves RGB LED math into the core which makes it incredibly fast and efficient. Unfortunately, pixelbuf was not yet implemented and without it, the newer animations were slow and almost unusable, so the PR sat. Recently, the work necessary to implement pixelbuf was completed, so it was finally time to revisit the LED Animation updates. I dusted off the tree code and have been working on implementing the rest of the features. I’m getting close to having the PR ready – it’s mostly feature-complete, but it still needs some cleanup – and then I’ll be starting on a guide to using the library!
This week I’ve been working on some cleanup within the i.MX port – this has included implementing the pin-claiming system, which prevents peripherals from conflicting with each other, and allowing the various BusIO peripherals to work in one-directional setups. I’ll be continuing that work this week, and will hopefully get into the guts of the timers soon to get PulseIO working more completely. I’ve chatted with Arturo about getting one of the new i.MX Feather boards sent over for testing here in the States, and I’m looking forward to putting it through the paces once it arrives.
In STM32 land, I fixed an unpleasant but fortunately temporary bug that was causing the Feather F405 to hang on startup, and I’m looking at getting some work done on the RGB matrix done this week as well. I was hoping to demo a robotics-related CircuitPython project today, but unfortunately the power cable has been delayed for COVID related reasons… it’ll just have to wait until next week.
This past week, I’ve been working on adding support for the GreatFET One to Blinka. This board has more than just a lot of GPIOs. It supports Pulse Width Modulation, Analog Input and Output, I2C, SPI, and UART. I was able to write a wrapper for the GreatFET library so Blinka is able to use many of the libraries available. I’m hoping this helps anybody else who happens to also own a GreatFET and wants to get started with unlocking its potential.
With all of the new releases of CircuitPython coming out, there have been a bunch of new boards with support added. I went through and added and resized images for each one and linked those to each of the boards.
By the end of last week, I got CircuitPython on ESP32S2 doing basic blinky, the stream is on YouTube.
The start of this week I got sucked into finishing our documentation switch from restructured text to inline Python stubs. This will enable editors to do better auto-complete for native CircuitPython APIs. The second half of this week will focus on getting the ESP32S2 initial work ready for merge.
PyCon2020 Online Continues this week! Head over to https://us.pycon.org/2020/online/ to access all the content. 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 and Latest Mailing.
What’s happening this week:
- New Talks and Tutorials
- Sponsor Workshops
- Python Case Study
- New Job Postings
There will be recordings added through next week, so be sure to check the Online and Virtual Expo Hall often. You can also subscribe to the YouTube channel to receive notifications as the remaining videos are published.
May 23, 2020: 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.
20200518 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 19,437 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 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. Note this upcoming week it will be May 19th due to the US Memorial Day holiday on May 18th.
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.