Daily tips and tricks from the experts at Adafruit!
View this email in your browser

View this email in your browser. Warning: Flashing Imagery

Welcome to the latest Python on Microcontrollers newsletter! I am surprised and pleased with the amount of news and activity in the Python on Hardware community this past week. Improvements in the Python ecosphere keep getting better while community involvement grows. Please check out this issue, I hope you enjoy it – Ed.

We’re on Discord, Twitter, and for past newsletters – view them all here. If you’re reading this on the web, subscribe here. Here’s the news this week:

MicroPython Support for the Raspberry Pi Pico W is Progressing

MicroPython Support for the Raspberry Pi Pico W

Peter Harper of Raspberry Pi is adding Bluetooth support for the Raspberry Pi Pico W in MicroPython, and has a pull request in progress. Phil Howard at Pimoroni has created experimental builds of Peter’s work in his own repo.

Phil notes ‘Bluetooth works, you’ll want Adafruit’s “Bluefruit Connect” and the MicroPython “ble_simple_peripheral.py” and “ble_advertising.py” from here’ if you experimentally want to kick the tires – Twitter and GitHub, although apparently they’re waiting for a stability fix from Infineon – Twitter.

And here is an article that discusses the situation – skanta-blog.de (German).

CircuitPython 8.0.4 Released

CircuitPython 8.0.4 Released

CircuitPython 8.0.4 is the latest bugfix revision of CircuitPython and is a new stable release. – Adafruit Blog and GitHub Release Notes.

Changes since 8.0.3

FIXES AND ENHANCEMENTS

  • Fix printing of “soft reboot” message

PORT AND BOARD-SPECIFIC CHANGES

Espressif

  • Prevent recursive calls during websocket background processing
  • Set socket to non-blocking more carefully

Known issues

  • ESP32-S3 has significant issues with I2C devices that sleep or use clock stretching. Retry operations on these devices as necessary, or use ESP32-S2 boards.
  • Espressif boards have ESP-IDF storage leaks and occasionally crash after extended WiFi use.
  • See https://github.com/adafruit/circuitpython/issues for other issues, including issues still to be addressed for:
    • 8.1.0
    • 8.x.x
    • long term

Python-based Compiler Achieves Orders-of-Magnitude Speedups

Python-based compiler speed-up

A Python-based compiler achieves orders-of-magnitude speedups. Codon compiles Python code to run more efficiently and effectively while allowing for customization and adaptation to various domains. Codon is currently publicly available on GitHubMIT News.

MicroPython Switches to a New Package Manager: mip

mip

mip has been chosen as the new MicroPython Package Manager. mip (“mip installs packages”) is similar in concept to Python’s pip tool, however it does not use the PyPI index. Rather it uses micropython-lib as its index by default. mip will automatically fetch a compiled .mpy file when downloading from micropython-lib – Documentation.

New Book: Robotics at Home with Raspberry Pi Pico

Robotics at Home with Raspberry Pi Pico

A new book just came out: Robotics at Home with Raspberry Pi Pico: Build autonomous robots with the versatile low-cost Raspberry Pi Pico controller and Python, by Danny Staple – Amazon via Twitter.

Design, build, and program a mobile robot platform while gaining an understanding of the Raspberry Pi Pico, Free CAD, and robot sensors using CircuitPython to code, Bluetooth to connect and smartphone to control your projects.

PiDog: a Raspberry Pi 4 Dog Running Python

PiDog

PiDog, a robotic dog using servos and a Raspberry Pi 4 programmed in Python – Documentation and Python Docs, via Twitter (French).

PiDog is a Raspberry Pi pet robot with a aluminum alloy structure. It can act as a mechanical pet, show cuteness to you, and interact with you.

It is equipped with a camera module, which can perform color recognition, face detection and other projects; 12 metal gear servos support it to walk, stand, sit, shake its head, and pose in various poses; The ultrasonic module on the head enables it to quickly detect obstacles ahead; Special touch sensors allow it to respond to your touch; The Light Board on the chest can emit colorful light effects, and with the speaker equipped with the robot HAT, PiDog can express emotions such as happiness and excitement. In addition, PiDog is also equipped with a sound direction sensor and a 6-DOF IMU module to realize more complex and interesting usage scenarios.

CircuitPythonista Charlyn Gonda Interviewed on Embedded.fm

CircuitPythonista Charlyn Gonda Interviewed

CircuitPythonista Charlyn Gonda Interviewed

Embedded.fm spoke with CircuitPythonista Charlyn Gonda about making things glow, dealing with imposter syndrome, and using origami. Charlyn’s website is charlyn.codes and the projects talked about are documented there. You can find her on Instagram (@chardane) and Mastodon. Adafruit came up a lot in this episode – embedded.fm.

This Week’s Python Streams

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

Deep Dive

This week, Tim streamed work on the Disk Info API for Web Workflow.

You can see the latest video and past videos on the Adafruit YouTube channel under the Deep Dive playlist – YouTube.

CircuitPython Parsec

CircuitPython Parsec

John Park’s CircuitPython Parsec this week is on One Liners – Adafruit Blog and YouTube.

Catch all the episodes in the YouTube playlist.

Project of the Week: The LoRa Mail Boombox

LoRa Mail Boombox

LoRa Mail Boombox

The LoRa Mail Boombox is a snailmail box notifier using two Adafruit LoRa transceivers, a distance sensor, sound, lights, and a servo, programmed in CircuitPython – GitHub.

“LoRa, BT classic, and notification MP3’s. Adafruit Feather RP2040 with a RFM95 FeatherWing. Adafruit I2S audio module is connected to a 20W amp with two 10W speakers. Servo, MP3, and Neopixels activate from mailbox activity” – Twitter.

News from around the web!

cptoml

CPToml: a CircuitPython module for managing toml files – GitHub via Twitter.

Countdown

I had way too much fun making today’s MVP Buzz reminder. It’s brought to you on Adafruit PyPortal Titano using CircuitPython written in VS Code. You’ve got less than 144 hours (or 6 days!!!) to enter your contributions! Be kind to yourself (and your CPM) & enter them now – Twitter.

Update Time on a Raspberry Pi Pico

Update Time on a Raspberry Pi Pico with CircuitPython: Parse JSON, format dates/times, and schedule jobs – YouTube.

Build a ChatGPT-Like language model in Python on a Raspberry Pi

Build a ChatGPT-Like language model in Python on a Raspberry Pi – YouTube via Twitter.

Railway signaling

A next generation railway signaling system for public safety in Kazakhstan. With a cost of less than $100 per train using LoRa, ESP32 and MicroPython – Twitter.

What is MicroPython

What is MicroPython? A guide which explores what MicroPython is, how it differs from Python, and some of its unique features – Kev’s Robots.

Robot

Getting an HTTP (web) server running with CircuitPython on the Raspberry Pi Pico W to control robot motors with a simple REST API – Twitter.

micropython_nunchuk

micropython_nunchuk is a MicroPython module for interfacing with Nintendo Nunchuk controllers, ported from CircuitPython. It allows for reading of joystick position, button states, and accelerometer state – GitHub.

Solar Project

Using a Blues Wireless cellular card and note carrier to send accelerometer data from a Raspberry Pi Pico programmed in MicroPython powered by a 5V/6W solar panel – Twitter.

Control a Pico W from a Web Dashboard

Control a Pico W from a web dashboard. Turn NeoPixels on/off using CircuitPython and Adafruit IO – YouTube.

Magic 8 Ball

Making a Pico Giant Magic 8 Ball. It uses a 20×4 LCD display for snarky responses. Tilt ball switch activated, it has a Raspberry Pi Pico W and NeoPixel LEDs – Twitter.

Display PCB

A PCB for creating a small tabletop display using Raspberry Pi Pico and 1.8 inch TFT LCD via CircuitPython – GitHub via Twitter.

Thermal Imager

A DIY Open Source handheld battery-powered Thermal Camera. It uses the Adafruit ESP32-S3 Reverse TFT Feather and a MLX90640 IR camera module running CircuitPython – Guide via Twitter.

Buttons and LEDs with MicroPython for the Raspberry Pi Pico

Buttons and LEDs with MicroPython for the Raspberry Pi Pico – Simon Prickett.

Command Line Interface Guidelines

Command Line Interface Guidelines: an open-source guide to help you write better command-line programs, taking traditional principles and updating them for the modern day – clig.dev.

Conway's Game of Life on Galactic Unicorn

Conway’s Game of Life on Galactic Unicorn programmed in MicroPython – Instructables and YouTube.

Pomodoro timer

Make a giant Pomodoro timer using Galactic Unicorn and MicroPython – Raspberry Pi.

Mercury

Mercury: turn your Jupyter Notebooks into beautiful Web Apps – GitHub via Y Combinator.

PySolFC v2.20.0

PySol Fan Club Edition – a Python Solitaire Game Collection of 1,200 programs – Sourceforge via Twitter.

PyDev of the Week: Pierre Raybaut on Mouse vs Python.

CircuitPython Weekly Meeting for March 20th, 2023 (notes) on YouTube

#ICYDNCI What was the most popular, most clicked link, in last week’s newsletter? Gaming Console on a Stick to Feature Dual Raspberry Pi Chips.

Coming Soon

ZIP96 for Raspeberry Pi Pico

There will be a sneak peek at the Kitronik’s new coded gamer, the ZIP96 for Raspberry Pi Pico only at Bett UK ‘23 from 29-31 March at the London ExCel Centre, stand NQ39 – Twitter.

TI Chips

Texas Instruments releasing an Arm Cortex-M0+ for just $0.39, with its MSPM0L and MSPM0G. TI is hoping its latest Arm Cortex-M0+ microcontrollers will find broad use – hackster.io.

Portenta C33

Portenta C33 is a lower cost Arduino Pro board based on Renesas RA6M5 Arm Cortex-M33 MCU running at 200 MHz. It is equipped with a ESP32-C3 WiFi and Bluetooth Low Energy module and can be programmed in MicroPython – 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 several are in process.

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:

New Learn Guides!

New Learn Guides

Star Fragment IoT Lamp from Noe Ruiz

Mini Weather Station ESP32-S2 TFT from Trevor Beaton

CircuitPython Libraries!

CircuitPython Libraries

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 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 413!

New Libraries!

Here’s this week’s new CircuitPython libraries:

Updated Libraries!

Here’s this week’s updated CircuitPython libraries:

Library PyPI Weekly Download Statistics

Total Library Stats

  • 132657 PyPI downloads over 309 libraries

Top 10 Libraries by PyPI Downloads

  • Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 10065
  • Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 9461
  • Adafruit CircuitPython Register (adafruit-circuitpython-register): 1952
  • Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1850
  • Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1815
  • Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1245
  • Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1219
  • Adafruit CircuitPython BLE (adafruit-circuitpython-ble): 1030
  • Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1026
  • Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1005

What’s the team up to this week?

What is the team up to this week? Let’s check in!

Dan

I released CircuitPython 8.0.4 on Tuesday March 14. The most important change is a fix for network sockets on Espressif boards. I’m continuing to work on fixes and additions for the 8.1.0 release.

Melissa

Melissa

This past week, much of my focus has been on improvements to the CircuitPython installer to make it more usable in other places. This includes writing a script that generates a JSON file with all of the board information so that not so many parameters are required to get it working. In fact, now if there aren’t any parameters specified, it will display a full list of boards for you to choose from. It has also been moved to a separate repository to make updating easier. Watch out for the installer to start appearing in more places.

Tim

I’ve continued working on the bitmaptools boundary fill fix, the hurdle with the Unix port has been overcome thanks to a tip from Scott. I also began working on a new API endpoint for the web workflow to return disk information about the storage space.

Jeff

I’ve continued working on the next new functionally for i.MX RT (audio out with I2S).

Scott

I’m continuing to investigate i.MX RT optimizations. I thought I was finished, but managed to get a build that is about twice as fast as others, but I’m not sure why! I can’t reproduce it in other builds. So, I’m trying to figure out what makes that build magically faster. If I can’t by the end of the week, then I’ll PR what I have and move onto supporting other chips in the i.MX RT family.

Liz

This week I wrote the code for the Star Fragment Lamp project. It uses the Open-Meteo API to get the sunrise and sunset timestamps. Then, the NeoPixels turn on at sunset and turn off at sunrise to mimic the star fragments in the Legend of Zelda games.

Upcoming events!

MicroPython Meetup

The next MicroPython Meetup in Melbourne will be on March 22nd – Meetup and Slides.

Hackaday Berlin 2023

Hackaday Berlin 2023 is scheduled for Saturday, March 25 – Adafruit Blog and announcement.

PyCon US 2023

PyCon US 2023 will be April 19-17, 2023, again in Salt Lake City, Utah USA – PyCon US 2023.

EuroPython 2023

EuroPython 2023 will be July 17-23, 2023, in Prague, Czech Republic and Remote – EuroPython 2023.

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.

Latest releases

CircuitPython’s stable release is 8.0.4 and its unstable release is 8.1.0-beta.0. New to CircuitPython? Start with our Welcome to CircuitPython Guide.

20230320 is the latest CircuitPython library bundle.

v1.19.1 is the latest MicroPython release. Documentation for it is here.

3.11.2 is the latest Python release. The latest pre-release version is 3.12.0a6.

3,444 Stars Like CircuitPython? Star it on GitHub!

Call for help – Translating CircuitPython is now easier than ever!

CircuitPython translation statistics on weblate

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.

36,961 thanks!

36,961 THANKS

Adafruit Discord

The Adafruit Discord community, where we do all our CircuitPython development in the open, reached over 36,961 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

ICYMI

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.

Codecademy “Learn Hardware Programming with CircuitPython”

Codecademy CircuitPython

Codecademy, an online interactive learning platform used by more than 45 million people, has teamed up with Adafruit to create a coding course, “Learn Hardware Programming with CircuitPython”. The course is now available in the Codecademy catalog.

Contribute!

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.

Join the Adafruit Discord or post to the forum if you have questions.