# CircuitPython Weekly Meeting for February 18th, 2025

**THIS MEETING IS ON TUESDAY\! 24 hours later than normal.**

*Welcome to the CircuitPython Weekly meeting notes\! Feel free to add your Hug Reports and Status Updates before the meeting, alphabetically by your username. During the meeting, we go through them in order. If you can’t make the meeting and would still like to participate, add your notes with a “(missing meeting)” after your username and we’ll read them off for you.* 

*Add any longer-form discussion topics or general questions you have to the “In the weeds” section.* 

*We now convert this document to Markdown on export, instead of including explicit raw Markdown formatting. When you type, just format your contributions with regular Google Docs formatting. If you type using Markdown formatting characters, your input will be converted on the fly to formatted text. You can also right-click and “Paste as Markdown” any text that is using raw Markdown.*

*Thanks\! We hope to see you in the meeting\!*

***Tim** is hosting.*

Video is available on YouTube.

Join here for the chat all week: [http://adafru.it/discord](http://adafru.it/discord).

The CircuitPython Weekly Meeting normally is held at 2pm US ET/11am PT on Mondays. Check the \#circuitpython channel on Discord for notices of change in time and links to past meetings. Meeting times are also available in [iCal format](https://raw.githubusercontent.com/adafruit/adafruit-circuitpython-weekly-meeting/master/meeting.ical) for use with standard calendar applications and can also be viewed [in your browser](https://open-web-calendar.hosted.quelltext.eu/calendar.html?url=https%3A%2F%2Fraw.githubusercontent.com%2Fadafruit%2Fadafruit-circuitpython-weekly-meeting%2Fmain%2Fmeeting.ical&title=CircuitPython%20Meeting%20Schedule&tab=agenda&tabs=month&tabs=agenda).

If you want to be able to participate in the meeting by speaking, you will need to be added to the @circuitpythonistas role on Discord. Please ask any of the moderators or admins to add you if you’d like to join.

CircuitPython development is sponsored by Adafruit. Please support them by purchasing hardware from https://adafruit.com.

Reminders: Podcast available on most services. Let us know if we’re missing some. The canonical URL for the podcast version is [https://adafruit-podcasts.s3.amazonaws.com/circuitpython\_weekly\_meeting/audio-podcast.xml](https://adafruit-podcasts.s3.amazonaws.com/circuitpython_weekly_meeting/audio-podcast.xml) which you may be able to enter directly into compatible podcast apps.

## 04:01 Community News

## **04:37 Python, MicroPython, and CircuitPython: Similarities and Differences**

Don Wilcher writes about the similarities and differences in Python, MicroPython, and CircuitPython \- [DigiKey](https://www.digikey.com/en/maker/tutorials/2025/python-micropython-and-circuitpython-similarities-and-differences).

## **05:15 10 Years of Certifying Open Source Hardware**

Michael Weinberg presented 10 Years of Certifying Open Source Hardware at FOSDEM 2025 \- [bluesky](https://bsky.app/profile/michaelweinberg.org/post/3lhu2zye6ht2x) and [Video](https://ftp.belnet.be/mirror/FOSDEM/video/2025/h1309/fosdem-2025-4257-lessons-from-10-years-of-certifying-open-source-hardware.av1.webm).

## **05:44 Gustavo Reynaga: Inspiring the Next Generation of Makers with MicroPython**

If you’re a fan of open-source technology, Gustavo Salvador Reynaga Aguilar is a name to know. An experienced educator with a passion for technology, Reynaga has spent nearly three decades teaching and inspiring students at CECATI 132 in Mexico. He’s worked with platforms like Arduino, Raspberry Pi, and BeagleBone \- [Arduino Blog](https://blog.arduino.cc/2025/02/10/gustavo-reynaga-inspiring-the-next-generation-of-makers-with-micropython/).

## **06:41 An Open Source Password Manager**

PasswordVault 2.x is an open source password manager, based on Raspberry Pi Pico 2 and a small display with buttons. It is implemented in CircuitPython \- [hackster.io](https://www.hackster.io/olav/passwordvault-2-x-05d922) and [GitHub](https://github.com/PasswordVault/passwordvault-cp2).

### 07:31 Newsletter Details

The Python on Microcontrollers Weekly Newsletter is a CircuitPython-community-run newsletter emailed every Monday. The complete archives are \[here\](https://www.adafruitdaily.com/category/circuitpython/). It highlights the latest Python on hardware related news from around the web including CircuitPython, Python and MicroPython developments. 

To contribute your own news or project, edit next week's draft [on GitHub](https://github.com/adafruit/circuitpython-weekly-newsletter/tree/gh-pages/_drafts) and [submit a pull request](https://help.github.com/articles/editing-files-in-your-repository/) with the changes. You may also or email [cpnews@adafruit.com](mailto:cpnews@adafruit.com), or tag a post with \#CircuitPython on Mastodon, Bluesky, or X (formerly known as Twitter),.

## 08:21 State of CircuitPython, Libraries and Blinka

**This report contains information from the previous seven days. Any changes (PRs merged, etc.) made today are not included in this report.**

### 08:40 Overall

* 20 pull requests merged  
  * 9 authors \- weblate, dastels, mattuna15, Randall-Scharpf, bablokb, jepler, wtuemura, eightycc, FoamyGuy  
  * 6 reviewers \- BlitzCityDIY, ladyada, tannewt, dhalbert, FoamyGuy, jepler  
* 15 closed issues by 6 people, 18 opened by 13 people

### 10:11 Core

* 12 pull requests merged  
  * 7 authors \- weblate, eightycc, wtuemura, mattuna15, Randall-Scharpf, bablokb, jepler  
  * 3 reviewers \- tannewt, dhalbert, jepler  
* 23 open pull requests  
  * [https://github.com/adafruit/circuitpython/pull/7811](https://github.com/adafruit/circuitpython/pull/7811) (Open 691 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/8457](https://github.com/adafruit/circuitpython/pull/8457) (Open 504 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/8647](https://github.com/adafruit/circuitpython/pull/8647) (Open 454 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9009](https://github.com/adafruit/circuitpython/pull/9009) (Open 349 days)  
  * [https://github.com/adafruit/circuitpython/pull/9094](https://github.com/adafruit/circuitpython/pull/9094) (Open 328 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9349](https://github.com/adafruit/circuitpython/pull/9349) (Open 244 days)  
  * [https://github.com/adafruit/circuitpython/pull/9559](https://github.com/adafruit/circuitpython/pull/9559) (Open 178 days)  
  * [https://github.com/adafruit/circuitpython/pull/9844](https://github.com/adafruit/circuitpython/pull/9844) (Open 81 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9876](https://github.com/adafruit/circuitpython/pull/9876) (Open 73 days)  
  * [https://github.com/adafruit/circuitpython/pull/9878](https://github.com/adafruit/circuitpython/pull/9878) (Open 72 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9883](https://github.com/adafruit/circuitpython/pull/9883) (Open 70 days)  
  * [https://github.com/adafruit/circuitpython/pull/9909](https://github.com/adafruit/circuitpython/pull/9909) (Open 56 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9955](https://github.com/adafruit/circuitpython/pull/9955) (Open 36 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/9974](https://github.com/adafruit/circuitpython/pull/9974) (Open 31 days)  
  * [https://github.com/adafruit/circuitpython/pull/9994](https://github.com/adafruit/circuitpython/pull/9994) (Open 24 days)  
  * [https://github.com/adafruit/circuitpython/pull/10023](https://github.com/adafruit/circuitpython/pull/10023) (Open 15 days)  
  * [https://github.com/adafruit/circuitpython/pull/10044](https://github.com/adafruit/circuitpython/pull/10044) (Open 9 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/10052](https://github.com/adafruit/circuitpython/pull/10052) (Open 6 days)  
  * [https://github.com/adafruit/circuitpython/pull/10060](https://github.com/adafruit/circuitpython/pull/10060) (Open 4 days)  
  * [https://github.com/adafruit/circuitpython/pull/10056](https://github.com/adafruit/circuitpython/pull/10056) (Open 4 days)  
  * [https://github.com/adafruit/circuitpython/pull/10065](https://github.com/adafruit/circuitpython/pull/10065) (Open 3 days) (draft)  
  * [https://github.com/adafruit/circuitpython/pull/10073](https://github.com/adafruit/circuitpython/pull/10073) (Open 1 days)  
  * [https://github.com/adafruit/circuitpython/pull/10076](https://github.com/adafruit/circuitpython/pull/10076) (Open 0 days)  
* 3 closed issues by 2 people, 12 opened by 8 people  
* 762 open issues  
  * [https://github.com/adafruit/circuitpython/issues](https://github.com/adafruit/circuitpython/issues)  
* 7 active milestones  
* 10.0.0: 18 open issues  
* 9.2.x: 10 open issues  
* 9.x.x: 59 open issues  
* Libraries: 17 open issues  
* Long term: 622 open issues  
* Support: 21 open issues  
* Third-party: 15 open issues  
* 1 issues not assigned a milestone

### 11:32 Libraries

* Adafruit Libraries: 352 Community Libraries: 154 (Total: 506\)  
* 8 pull requests merged  
  * 3 authors \- dastels, FoamyGuy, jepler  
  * 5 reviewers \- BlitzCityDIY, ladyada, tannewt, FoamyGuy, jepler  
  * Merged pull requests:  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_VEML7700/pull/34](https://github.com/adafruit/Adafruit_CircuitPython_VEML7700/pull/34) (Days open: 35\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_CLUE/pull/65](https://github.com/adafruit/Adafruit_CircuitPython_CLUE/pull/65) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_BitmapSaver/pull/37](https://github.com/adafruit/Adafruit_CircuitPython_BitmapSaver/pull/37) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_VCNL4020/pull/5](https://github.com/adafruit/Adafruit_CircuitPython_VCNL4020/pull/5) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_MLX90393/pull/49](https://github.com/adafruit/Adafruit_CircuitPython_MLX90393/pull/49) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_ImageLoad/pull/96](https://github.com/adafruit/Adafruit_CircuitPython_ImageLoad/pull/96) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_Bundle/pull/496](https://github.com/adafruit/Adafruit_CircuitPython_Bundle/pull/496) (Days open: 1\)  
    * [https://github.com/adafruit/Adafruit\_CircuitPython\_Bundle/pull/495](https://github.com/adafruit/Adafruit_CircuitPython_Bundle/pull/495) (Days open: 1\)  
  * 54 open pull requests (Oldest: 915, Newest: 1\)  
* 12 closed issues by 4 people, 6 opened by 6 people  
  * 685 open issues  
  * 3 good first issues  
* [https://circuitpython.org/contributing](https://circuitpython.org/contributing)

#### Library updates in the last seven days:

* **New Libraries**  
  * [adafruit/Adafruit\_CircuitPython\_Display\_AnalogClock](https://github.com/adafruit/Adafruit_CircuitPython_Display_AnalogClock)  
* **Updated Libraries**  
  * [adafruit/Adafruit\_CircuitPython\_BitmapSaver](https://github.com/adafruit/Adafruit_CircuitPython_BitmapSaver)  
  * [adafruit/Adafruit\_CircuitPython\_VEML7700](https://github.com/adafruit/Adafruit_CircuitPython_VEML7700)  
  * [adafruit/Adafruit\_CircuitPython\_ImageLoad](https://github.com/adafruit/Adafruit_CircuitPython_ImageLoad)  
  * [adafruit/Adafruit\_CircuitPython\_VCNL4020](https://github.com/adafruit/Adafruit_CircuitPython_VCNL4020)  
  * [jposada202020/CircuitPython\_uplot](https://github.com/jposada202020/CircuitPython_uplot)  
  * [jepler/Jepler\_CircuitPython\_udecimal](https://github.com/jepler/Jepler_CircuitPython_udecimal)  
  * [FoamyGuy/CircuitPython\_GameControls](https://github.com/FoamyGuy/CircuitPython_GameControls)

### 15:43 Blinka

* 0 pull requests merged  
  * 0 authors \-  
  * 0 reviewers \-  
* 19 open pull requests  
  * [https://github.com/adafruit/Adafruit\_Blinka\_bleio/pull/40](https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40) (Open 1229 days)  
  * [https://github.com/adafruit/Adafruit\_Python\_PlatformDetect/pull/335](https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/335) (Open 417 days) (draft)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/884](https://github.com/adafruit/Adafruit_Blinka/pull/884) (Open 188 days) (draft)  
  * [https://github.com/adafruit/Adafruit\_Blinka\_Displayio/pull/140](https://github.com/adafruit/Adafruit_Blinka_Displayio/pull/140) (Open 184 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/888](https://github.com/adafruit/Adafruit_Blinka/pull/888) (Open 171 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/908](https://github.com/adafruit/Adafruit_Blinka/pull/908) (Open 101 days) (draft)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/911](https://github.com/adafruit/Adafruit_Blinka/pull/911) (Open 93 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/914](https://github.com/adafruit/Adafruit_Blinka/pull/914) (Open 78 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/915](https://github.com/adafruit/Adafruit_Blinka/pull/915) (Open 73 days)  
  * [https://github.com/adafruit/Adafruit\_Python\_PlatformDetect/pull/372](https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/372) (Open 68 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/921](https://github.com/adafruit/Adafruit_Blinka/pull/921) (Open 57 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/925](https://github.com/adafruit/Adafruit_Blinka/pull/925) (Open 40 days)  
  * [https://github.com/adafruit/Adafruit\_Python\_PlatformDetect/pull/375](https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/375) (Open 40 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/928](https://github.com/adafruit/Adafruit_Blinka/pull/928) (Open 37 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka\_Displayio/pull/143](https://github.com/adafruit/Adafruit_Blinka_Displayio/pull/143) (Open 33 days) (draft)  
  * [https://github.com/adafruit/Adafruit\_Python\_PlatformDetect/pull/378](https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/378) (Open 31 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/931](https://github.com/adafruit/Adafruit_Blinka/pull/931) (Open 28 days)  
  * [https://github.com/adafruit/Adafruit\_Python\_PlatformDetect/pull/379](https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/379) (Open 9 days)  
  * [https://github.com/adafruit/Adafruit\_Blinka/pull/941](https://github.com/adafruit/Adafruit_Blinka/pull/941) (Open 6 days)  
* 0 closed issues by 0 people, 0 opened by 0 people  
* 126 open issues  
  * [https://github.com/adafruit/Adafruit\_Blinka/issues](https://github.com/adafruit/Adafruit_Blinka/issues)  
* Number of supported boards: 146

## 17:05 Hug reports

17:28 @foamyguy (hosting)

* @PaulCutler for interviewing me for the CircuitPython show, and editing together a great episode of the podcast from it. It’s scheduled to release on April 21st, with other great episodes coming between now and then.  
* @tannewt generally for the deep dive streams, and specifically for talking through some ideas for possible ways to implement emoji on the recent one.  
* @BlitzCityDIY for guidance on writing learn guide pages and answering my many questions  
* SerenityOS project for publishing their Emoji font and images for others to use

18:26 @danh

* @tyeth and @justmobilize for NINA-FW testing

18:51 @jepler

* @MichaelBell on github and mastodon for the awesome “dvhstx” library I’m using for some Arduino work (for the digital video output on rp2350)  
* @cooper for helping out with some audio work in the core that should have fallen to me. And also for asking questions so I could clarify my thinking.  
* @tannewt for helping one of my PRs be better than it was at the outset  
* Somebody at adafruit for implementing an atom feed for the Adafruit Playground, I just added [https://adafruit-playground.com/playground/pages.atom](https://adafruit-playground.com/playground/pages.atom) to my RSS reader’s electronics folder. (spoke too soon, cloudflare protection is preventing the feed from actually loading in my feed reader; hopefully I can find someone who can let it work)

20:04 @jerryn

* Group hug  
* SamBlenny for the Zephyr guides in the Playground


  
20:33 @tannewt

* Hathach for debugging PIO usb host. Excited to try it with fixes  
* Foamyguy for experimenting with emoji support in CP. I want to circle back to discuss options with you.

## 21:01 Status Updates

21:29 @foamyguy (hosting)

* Wrote generic USB gamepad mapping code. Works with Feather RP2040 USB Host and prints out the data sent when buttons are pressed, or joysticks moved. Will use it for a guide page.  
* Added support for USB HID game pads to GameControls library  
* Working on Metro RP2350 guide pages  
* Hacked together a Label-like class for displayio that can render emoji in addition to text. It’s quite limited, and has had no thought given toward efficiency in its implementation, but it does render mixed text and emoji successfully 🎉  
  * Reported an issue with ImageLoad that crashed with some images and submitted a fix for it  
  * Have observed a different issue where some images render improperly, but haven’t been able to pin down the root cause yet.

23:18 @danh

* Released NINA-FW 2.0.0+adafruit, which is the firmware used for AirLift co-processors. I’ll continue working on this, updating it to ESP-IDF 5.4, and investigating reducing its internal heap use and fragmentation.  
* Also looking at why ESP32-C3 BLE is causing a boot loop after updating to ESP-IDF 5.3.2.

25:16 @jepler

* Added \`supervisor.runtime.display\` for any board with displayio, and wrote a playground note about it: [https://adafruit-playground.com/u/jepler/pages/supervisor-runtime-display-in-circuitpython-9-2-5](https://adafruit-playground.com/u/jepler/pages/supervisor-runtime-display-in-circuitpython-9-2-5)  
  It’s basically the new and improved successor to \`board.DISPLAY\` and you can do useful stuff like configure a display in boot.py once and then use it in multiple runs of code.py, even on a board with no built in display that therefore lacks \`board.DISPLAY\`  
* Added auto configuration of picodvi on metro rp2350 and feather rp2350. Defaults to 320x240@16bpp. This is the motivating reason to add supervisor.runtime.display right now.  
* In piomatter, setting some ground work for a possible upcoming pi hat with 3 HUB75 connectors. This will involve moving the code that sets the mapping from framebuffer coordinates to matrix pixel coordinates into Python for additional flexibility.  
* Also working in Arduino land creating a library for digital video on rp2350. The WIP is progressing. That’s where I’ll be putting the bulk of my time the coming week probably.

28:19 @jerryn

* Cleaning up issues in the RFM9X and RFM libraries – more \- In the Weeds  
* Playing with OV5640 on the Pico2W and espcamera on some esp32s3 boards.  
  * Resurrecting some dormant projects \- mostly sending snaps to AIO

29:15 @tannewt

* Polishing up Fruit Jam board definition to PR.  
* Expanding supported HSTX framebuffer resolutions. 720x400 is good for wide screen.  
* Testing USB Host after Thach’s fixes. Hoping to get it solid.  
* Brainstorming terminal improvements for Fruit Jam:  
  * Supporting emoji  
  * Moving terminal font to the file system  
  * Supporting foreground and background color  
  * Supporting framebuffer scroll

## 31:49 In The Weeds

32:05 @jerryn

* This is clearly not a hot issue but there was a long-standing issue in the RFM9x library regarding using Spreading Factor=6 It has finally been fixed in the RFM library (pending PR- submitted 3 weeks ago…) but not in the RFM9x library. It adds code so I’m not sure we want to implement it in the RFM9X library due to the impact on the feather\_m0\_rfm9x build.  RFM library will not run on M0 boards – needs asyncio. Looking for guidance… Do you want the fix implemented in RFM9x?   Note: SF=6 also does not work in RadioHead library for Arduino. I reported it and they appear to just want to document it, not fix it. It creates additional issues for the “reliable datagram mode” which will not work for RFM library either.  It has only been requested a few times in the past several years.    
* With this fix  – all Spreading Factors can work, but may require “tweaking” af some of the timing controls. A few issues in RFM9X are fixed in RFM, but not available in RFM9x. I have made notes in the RFM9x issues.     
* Why is the espcamera module not included for the 4Mbyte esp32s3 builds? Just curious. I can build it myself.  
  * @jepler: from looking at the file history, I see that my note on commit 0e26a937ccc8187aaf15f98c763a669dd7caa7a5 which disabled CIRCUITPY\_CAMERA on adafruit\_feather\_esp32s3\_4mbflash\_2mbpsram and other boards said “Disable camera everywhere it doesn't fit”. Elsewhere in the history there are notes that states “bitmapfilter does not fit on 4MB boards unless they are set up as camera boards”. If it fits now due to other changes, without disabling anything else, then we can consider enabling it.  
  * @tannewt: these boards have less code space due to partition tables that support OTA. This may change in CircuitPython 10 & updated tinyuf2.

## 42:10 Wrap-Up

Next meeting Monday February 24 at 2PM ET / 11AM PT.
