# CircuitPython Weekly Meeting for March 25, 2024


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. 


Thanks! We hope to see you in the meeting!


Tim is hosting.


Video is available [on YouTube](https://youtu.be/oykFxLCp6Zo).


Join here for the chat all week: 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 which you may be able to enter directly into compatible podcast apps.
## 03:48 Community News
### 03:51 CircuitPython 9.0.0 Released
CircuitPython 9.0.0, the latest major revision of CircuitPython, is the new stable release. Check out all the new features - Adafruit Blog, Release Notes and Tom's Hardware.


### 04:27 MicroPython Plans a New Feature for the Raspberry Pi RP2040: Runtime-Defined USB Device Support
MicroPython is planing a new feature for the Raspberry Pi RP2040: runtime-defined USB device support, expected to land in the v1.23 release - hackster.io and Documentation.
### 05:17 Project of the Week: Desktop Lunar Display
Lorraine Underwood completes her desktop lunar display which uses a Raspberry Pi Pico W programmed in MicroPython - Element14, Raspberry Pi, YouTube and GitHub.


### 06:15 uc8151_micropython: a MicroPython driver for the Badger 2040 eink display
uc8151_micropython: a MicroPython driver for the Badger 2040 eink display and other displays based on the UC8151 / IL0373 chip with up to 32 levels of grey - GitHub via X.
  

### 07:09 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, or tag a post with #CircuitPython on Mastodon, Bluesky, or X (formerly known as Twitter),.
## 08:02 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:25 Overall
* 37 pull requests merged
  * 15 authors - weblate, bablokb, jkittner, dhalbert, CDarius, skerr92, wtuemura, kbsriram, tekktrik, lff5, makermelissa, anecdata, DJDevon3, justmobilize, FoamyGuy
  * 5 reviewers - tannewt, makermelissa, tekktrik, dhalbert, FoamyGuy
* 27 closed issues by 9 people, 23 opened by 20 people


### 10:11 Core
* 8 pull requests merged
  * 7 authors - weblate, wtuemura, kbsriram, bablokb, dhalbert, CDarius, FoamyGuy
  * 2 reviewers - tannewt, dhalbert
* 23 open pull requests
  * https://github.com/adafruit/circuitpython/pull/6555 (Open 629 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7440 (Open 439 days)
  * https://github.com/adafruit/circuitpython/pull/7618 (Open 399 days)
  * https://github.com/adafruit/circuitpython/pull/7675 (Open 387 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7811 (Open 361 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7997 (Open 311 days)
  * https://github.com/adafruit/circuitpython/pull/8033 (Open 304 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8100 (Open 277 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8233 (Open 239 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8349 (Open 207 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8457 (Open 174 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8647 (Open 124 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8713 (Open 104 days)
  * https://github.com/adafruit/circuitpython/pull/8798 (Open 70 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8855 (Open 56 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8954 (Open 33 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8991 (Open 24 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/9009 (Open 19 days)
  * https://github.com/adafruit/circuitpython/pull/9023 (Open 16 days)
  * https://github.com/adafruit/circuitpython/pull/9037 (Open 13 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/9065 (Open 4 days)
  * https://github.com/adafruit/circuitpython/pull/9071 (Open 3 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/9076 (Open 2 days)
* 6 closed issues by 2 people, 9 opened by 8 people
* 665 open issues
  * https://github.com/adafruit/circuitpython/issues
* 9 active milestones
 * 10.0.0: 2 open issues
 * 8.2.x: 0 open issues
 * 9.0.x: 3 open issues
 * 9.1.0: 2 open issues
 * 9.x.x: 27 open issues
 * Libraries: 22 open issues
 * Long term: 590 open issues
 * Support: 6 open issues
 * Third-party: 13 open issues
 * 3 issues not assigned a milestone


### 11:33 Libraries
* 23 pull requests merged
  * 8 authors - jkittner, dhalbert, skerr92, tekktrik, makermelissa, anecdata, DJDevon3, FoamyGuy
  * 4 reviewers - tekktrik, tannewt, dhalbert, FoamyGuy
  * Merged pull requests:
    * https://github.com/adafruit/Adafruit_CircuitPython_GPS/pull/102 (Days open: 296)
    * https://github.com/adafruit/Adafruit_CircuitPython_VL53L4CD/pull/15 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_TT21100/pull/5 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_MMC56x3/pull/4 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_LTR329_LTR303/pull/8 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_TCA8418/pull/13 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_AGS02MA/pull/4 (Days open: 23)
    * https://github.com/adafruit/Adafruit_CircuitPython_NTP/pull/31 (Days open: 3)
    * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/160 (Days open: 3)
    * https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI/pull/196 (Days open: 3)
    * https://github.com/adafruit/Adafruit_CircuitPython_Display_Text/pull/203 (Days open: 2)
    * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/170 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/169 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/166 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/165 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_HID/pull/125 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_SSD1306/pull/39 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_FeatherWing/pull/82 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_RSA/pull/41 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_GPS/pull/108 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_ConnectionManager/pull/5 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_SH1107/pull/20 (Days open: 1)
    * https://github.com/adafruit/CircuitPython_Community_Bundle/pull/209 (Days open: 1)
  * 62 open pull requests (Oldest: 585, Newest: 1)
* 16 closed issues by 9 people, 9 opened by 8 people
  * 737 open issues
  * 18 good first issues
* https://circuitpython.org/contributing


#### Library PyPI Weekly Download Stats
* **Total Library Stats**
  * 136279 PyPI downloads over 325 libraries
* **Top 10 Libraries by PyPI Downloads**
  * Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 10809
  * Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 9566
  * Adafruit CircuitPython ConnectionManager (adafruit-circuitpython-connectionmanager): 8271
  * Adafruit CircuitPython Register (adafruit-circuitpython-register): 2251
  * Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1445
  * Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 1286
  * Adafruit CircuitPython PCA9685 (adafruit-circuitpython-pca9685): 1132
  * Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1109
  * Adafruit CircuitPython ServoKit (adafruit-circuitpython-servokit): 1045
  * Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1019


#### Library updates in the last seven days:
* **New Libraries**
  * [skerr92/Oakdevtech_CircuitPython_IcePython](https://github.com/skerr92/Oakdevtech_CircuitPython_IcePython)
* **Updated Libraries**
  * [adafruit/Adafruit_CircuitPython_GPS](https://github.com/adafruit/Adafruit_CircuitPython_GPS)
  * [adafruit/Adafruit_CircuitPython_RSA](https://github.com/adafruit/Adafruit_CircuitPython_RSA)
  * [skerr92/at42qt-acorn-python](https://github.com/skerr92/at42qt-acorn-python)


### 16:24 Blinka
* 6 pull requests merged
  * 4 authors - lff5, dhalbert, justmobilize, makermelissa
  * 4 reviewers - tekktrik, tannewt, dhalbert, makermelissa
* 6 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 899 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/749 (Open 110 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/766 (Open 87 days) (draft)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/335 (Open 87 days) (draft)
  * https://github.com/adafruit/Adafruit_Blinka/pull/801 (Open 3 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/803 (Open 2 days)
* 5 closed issues by 2 people, 5 opened by 5 people
* 86 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* PyPI downloads in the last week: 17567
* Piwheels Downloads in the last month: 12271
Number of supported boards: 132






## 17:11 Hug reports


17:39 @foamyguy(Hosting)
* @KevinT on discord for helping folks in #help-with-circuitpython channel
* @DJDevon3 for answering questions, helping people, and reproducing issues that are brought up in Discord help-with
* @Tekktrik for reviewing several circup instruction readme fixes in libraries
* @Justin for trying out the switch to ruff on a handful of library repos


18:27 @danh
* @Justin for ruff experimentation and everyone who kibitzed on this.
* @vladak for a number of pertinent issues and PR’s.
* @tannewt for moving quickly ahead to ESP-IDF 5.2.1.
* @jepler for spending a lot of time on floppy support, which is not CircuitPython


19:23 DJDevon3
* @FoamyGuy, @Tekktrik, @Danh for guidance on opening & closing some issues this week.
* @Melissa, @FoamyGuy, @Danh for looking into an issue with the CircuitPython.org RSS feed.
* @FoamyGuy for having to review 16 PR’s I made to the adafruit_requests library. 
* @ Hug to whoever came up with the WARNING implementation for the new display bus types. It really helped transition my 8.x display project to 9.0 compliance.
* @Justin for all the work he put into updating linting and potentially moving things toward ruff.  Also for making Connection Manager so easy to transition to.
* @Tannewt for a great deep dive this week. Thank you for taking a look at the Electrosmith Daisy Seed.  An N8R65 board. Thank you Scott for all of your advice!
* @Kattni for being around this week. It’s always nice to see her participating again.


21:02 @jepler
* Group hug
* Folks who are reporting & testing on the SO_REUSEADDR issue on github (studiostephe, anecdata, djdevon3)


21:32 @Justin
* @DJDevon3 for updating all the request examples
* @anecdata from making ESPI32SPI more like other radio libraries
* Hug to all who talked about linting with me over the week


22:12 @kattni
* @foamyguy for helping work through figuring out some weirdness on displayio and an eink display
* @skerr for teaching me a bit about capacitors, and for trying to test an issue I was fighting with LEDs
* @tyeth for answering a number of questions over the past week or so


22:47 @Makermelissa
* @danh for quickly reviewing my Blinka Displayio PR
* @jepler and @foamyguy for your PRs that sort the RSS feed boards
* @kattni for a nice chat last week
* Group Hug


23:18 @tannewt
* @prcutler and @todbot for the Bootloader show about the CP 9 release!
* @henrygab and @peterfox for encouraging comments on the ESP BLE issue.
* @kylefmohr and @ure on github for adding a new board to CP.
## 24:16 Status Updates


24:49 @foamyguy (Hosting)
* Updating learn guide code and page references for displayio 9.x changes. Code and pages done, next up is library example code which gets embedded in some guides.
* Tinkering locally with Circuitpython.org site to chronologically sort the RSS and fix the images embedded within it.
* RSA encryption integration between adafruit_rsa library on the backend of an httpserver and JSEncrypt module on the front end of a page hosted by that server. Initially was having trouble due to trying to “square hole / round peg” the JS library to not need module import and exporting. Eventually gave up fighting that and actually have had success delivering the public key via cookie and encrypting a message with it in the front end then POSTing that encrypted message to the backend and decrypting it with the private key using adafruit_rsa 🎉. However after trying to get this integrated with the larger Cardputer messenger project I’ve been working on I began having MemoryErrors and other odd issues that are difficult to troubleshoot or reproduce reliably. I think my original plans may be too large in scale so I’m planning to pare it down to something much less complex.
* Eink display testing and start building out tic tac toe example




27:33 @danh
* Released CircuitPython 9.0.0 final last Monday evening.
* Updated some guides for 9.0.0.
* Investigating several reported issues that show up when users upgraded to 9.0.0. Some are in GitHub, some in forums, some in discord.
   * SO_REUSEADDR not in Pico W (Jeff is fixing)
   * Espressif pin sleep wakeup problem due to ESP-IDF 5.1.3.
   * etc.
* Starting on some 9.1 changes.


29:23 DJDevon3 
* Started going through good first issues to see what I could help clean up now that 9.0 stable is here. I’ve been updating a lot of my boards to 9.0 and bug hunting this week.
* Helped test an issue with adafruit_datetime from Circuit Python 7.0 alpha 4. The issue was probably fixed long ago but was left dormant. Was able to test and confirm the bug is gone in 9.0 closing a 967 day old issue.
* Found a bug in the CircuitPython RSS feed not updating in chronological order.
* Finished updating all adafruit_requests WiFi API examples to use Connection Manager for 9.0. 
   * Deleted the Twitter API example (with permission) because I couldn’t get their new API to work. Their documentation is in shambles with 3 different API versions and none of their oauth 2.0 tutorials work easily on a microcontroller.
   * Submitted a PR to update the YouTube API example. YouTube’s API was an absolute pleasure to work with because their documentation and examples are outstanding. They even have REST examples specifically designed for microcontrollers which is the first time I’ve ever seen that.
* Submitted a PR to add display rotation for the IS31FL3731 Charlieplex library. It should make chaining charlieplex matrices in any orientation easier.
* Submitted a PR to update the 3.5” TFT Featherwing display driver with 9.0 transitional code.
* Updated my Feather Weather MQTT Touch project to 9.0. There were a few hiccups like needing to update the TFT Featherwing driver. Other than that it was a great transition and will be porting all of my projects to 9.0


31:57 @jepler
* Updating the floppyio module
   * This’ll be on the main branch only
   * Includes incompatible changes
   * Close to testing it on HW
* A little change to add SO_REUSEADDR for Pico W & other rp2040 boards with wifi
* Added setsockopt to SSLSocket in my preview branch “ssl-anything” for good measure
* Building a test setup for HUSB238. A friend who tried to use HUSB238 had some reliability problems (in arduino with raspberry pi pico) that I’d like to see if I can repeat. But I’m using circuitpython & an espressif qtpy. It’s the first project I built on a swirly grid so that’s cool!
* Non-CP stuff:
   * Will take a look at updating protomatter in arduino


34:34 @Justin
* Talked and worked through ideas about switching to ruff


34:57 @kattni
* I finally got around to building my multiple grow light setups. They’re each 60 DotStar LEDs (40 cool white, 20 RGB) wired up to an ESP32-S3 (or one S2) Feather, using a NeoPXL8 as a level shifter. The code turns on and off based on a specified time, using AIO for keeping track of the time. 3D printed cases, with magnets. Future feature planned: Temperature/humidity sensor addition.
* The ESP32-S2 one has been running for about a year, and rebooting multiple times per day. It was running 8.x. I noticed the reboots have stopped since I upgraded the build and CircuitPython, however, I also learned a little over a week ago, that you can’t max out power supplies or you will run into issues. Issues like rebooting a microcontroller regularly. Which is almost certainly what the issue was… The LED density went from about 220 to 60, so the power draw dropped significantly.
* Ran into some issues with flickering on only the ESP32-S3 versions, and after a lot of unnecessary shenanigans, it turns out a capacitor on the power lines fixed it. I have never in 7 years of doing this added a capacitor to my LED strips… but here we are.
* I picked up a Pimoroni Badger2040W, and finally got around to starting some code for it. I wrote it so the display should refresh on a button press. I found that it would refresh on the first button press since reload, and then stopped refreshing after that until the board reloaded or was reset. Foamyguy tested things on a MagTag, and we eventually figured out if there is no _change_ to the display, it will not refresh. So, if you make it so each button displays something different, it refreshes on every button press, but if it remains static, it will not refresh. 
* Belated hug report to foamyguy for clarifying that black and white eink displays’ background default is black, not white, which threw me for a loop until I added a “white” rectangle, and for helping me with my badge code!


38:14 @Makermelissa
* Update Blinka Displayio to match CircuitPython 9.0.0 API
* Added PWM support to Blinka for the Raspberry Pi 5
* Updated Blinka Rock Pi S board to use libgpiod instead of sysfs
* Added PWM support to Jetson Nano
* Continuing to work on GitHub PRs and am currently fixing an issue with the CP Installer for Windows


39:00 @tekktrik (not present)
* Continuing to update circfirm with new features - I’m hoping that in the next couple weeks it’ll be in a more steady state and fully ready for general use
* Working through PRs I’ve been tagged on or assigned.



39:37 @tannewt
   * Esp32-camera PR to merge in fixes for 5.2: https://github.com/adafruit/esp32-camera/pull/8
   * IDF 5.2 update should be good to merge after that.
   * USB host featherwing is waiting on work from Thach.
   * Then getting back into ESP BLE support!
## 40:53  In The Weeds


41:17 DJDevon3 
   * Good first issues are littered with typing issues and there’s a lack of information about the types.  At first, typing was very basic with string, int, float types but now is far more complicated with bus types and more. Without documentation listing the different possible types, in my opinion, typing issues are not within the realm of good first issues for beginners anymore. Tekktrik is taking on updating the typing repo with some examples. I’d like to see more documentation on typing become beginner friendly again as it’s becoming more infused with the circuit python development workflow.
   * @danh: we would like to remove tricky typing issues from “good first issue”. I think we did that to some extent. Search for these issues (only open ones):
https://github.com/search?q=org%3Aadafruit+label%3A%22good+first+issue%22+is%3Aopen&type=issues 
   * @jepler: based on folks at the past 2 pycons trying to pick up typing issues, i feel like few of the ones left are probably actually “good first issues”
      * Ran into some display drivers not being updated in time for 9.0.  If the 3.5” TFT Featherwing wasn’t updated with at least transitional code it makes me wonder what other display drivers aren’t 9.0 ready too. 
      * @danh: Is it the examples or the actual library code?
      * @foamyguy: There are definitely at least some examples that do still have transition code in them. I found some during a pass thru learn guides this morning and am intending to search the bundle for them and submit PRs this afternoon
      * @jepler: I saw this with adafruit_displayio_ssd1306 installed from circup, the warnings about renamed stuff come up when importing: 
        Adafruit CircuitPython 9.0.0-rc.1-1-g7e7b2a4154-dirty on 2024-03-17; Adafruit Macropad RP2040 with rp2040
        >>> import adafruit_displayio_ssd1306
FutureWarning: FourWire moved from displayio to fourwire
FutureWarning: I2CDisplay moved from displayio to i2cdisplaybus
FutureWarning: I2CDisplay renamed I2CDisplayBus
FutureWarning: Display moved from displayio to busdisplay
FutureWarning: Display renamed BusDisplay
         * Looks like an attempt was made to make this specific library but it wasn’t quite correct




55:55 @Justin
         * A follow-up from last week where @foamyguy brought up my iSort PR. Based on some conversation through the week,
         * I have opened up 6 draft PRs for: BME680, NeoPixel, PortalBase, PyCamera, PyPortal and Requests.
         * I created commits in this order:
         * Add ruff formatter
         * Add ruff isort
         * Add ruff lint
         * Add ruff upgrade
         * remove upgrade UP028
         * remove upgrade UP031
         * remove upgrade UP032
         * Update README badge
         * Most of the changes are pretty small, and overall I personally feel this makes the code better:
         * Fewer comments for disabling lint
         * Fewer defined rules
         * Fewer linting packages
         * Comments aren’t included in line length
         * @ tekktrik (not present):  I think these are great changes.  Whenever it’s time to bring these changes over to the rest of the libraries, I can help with that adabot patch.  I can use one of the draft PRs to see how complicated it would be to patch (i.e., can adabot herself do it or will we need to use some of the extended tooling scripts she has available which are more flexible but require custom code).  I’ll also handle flagging libraries that need work afterwards with issues.
         * @danh: It’s possible to move the ruff-specific settings out of pyproject.toml into ruff.toml. I don’t see a specific advantage to doing that if the settings are confined to the particular library repo, but if it were possible to do an indirection to refer to an all-libraries ruff.toml, that would be a nice way to factor out these settings. ruff.toml could be installed during CI. But then how does someone get them locally when doing pre-commit locally.
         * @tannewt: Are there friendlier names for checks than “UP028”? I know pylint has both.
         * @tekktrik (not present): I don’t believe so: https://github.com/astral-sh/ruff/issues/1773
         * @tannewt: Thanks! Subscribed






## 01:10:15 Wrap-Up