# CircuitPython Weekly Meeting for September 11, 2023

Video is available [on YouTube](https://youtu.be/mQohLco1O-g).

Join here for the chat all week: http://adafru.it/discord.

The CircuitPython Weekly happens normally at 2pm 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 one 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.
## 2:46 Community News
### 3:12 CircuitPython 8.2.5 Released
CircuitPython 8.2.5 is the latest bugfix revision of CircuitPython and is the new stable release - [Adafruit Blog](https://blog.adafruit.com/2023/09/07/circuitpython-8-2-5-released/) and [GitHub](https://github.com/adafruit/circuitpython/releases/tag/8.2.5). 
**Notable changes to 8.2.5 since 8.2.4**
* Updated TLS root certificates.
* Tuning of `RGBMatrix`.
* New and updated boards.
### 3:33 Pimoroni MicroPython Version 1.20.5 Released
Version 1.20.5 of Pimoroni's fork of MicroPython provides "Glorious Vector Visuals". This release introduces a beta of PicoVector, a library that sits atop PicoGraphics and supplies anti-aliased vector drawing tools using Pretty Poly.
PicoVector is currently available in the following builds:
* Pico
* Pico W
* Pico LiPo
* Tufty 2040


It includes support for Alright Fonts, allowing you to convert almost any ttf or otf font into a simplified vector format - a sequence of overlapping polygonal contours - which can be used in PicoGraphics projects - [GitHub](https://github.com/pimoroni/pimoroni-pico/releases/tag/v1.20.5).
Version 1.20.4 from August 4th added PNG file support as a better option than JPG - [GitHub](https://github.com/pimoroni/pimoroni-pico/releases/tag/v1.20.4).
### 4:38 Using Conda for Microcontroller Embedded Development Environment
Developing for an embedded target can mean using a certain version of code compiler, debugger and other tools. The challenge gets bigger if working with multiple different tool chains and environments. Conda is a package, dependency and environment management tool. While it is heavily used for Python and Data Science development, it is surprisingly working very well to set up and manage environments for embedded development. Conda is great for managing non-Python dependencies and setups - [MCU on Eclipse](https://mcuoneclipse.com/2023/08/25/vs-code-virtual-environments-for-embedded-development-with-conda/).
### 5:16 IoT Survey
Blues, an internet of things (IoT) provider, has completed an interesting poll on the internet of things and microcontrollers. What specifically drew my attention is where folks typically get news about embedded/IoT development. Hackaday, Hackster and the Adafruit Blog make up 40% of the IoT information folks ingest - [blues.io](https://dev.blues.io/blog/blues-iot-survey-2023-results/).
### 5:48 Newsletter Details
The CircuitPython 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 tag a tweet with #CircuitPython on Twitter, or email cpnews@adafruit.com.
## 6:35 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.**
### 6:50 Overall
* 28 pull requests merged
  * 16 authors - gfghjjk, bill88t, weblate, jepler, makermelissa, tannewt, sc-bin, bergdahl, michalpokusa, UnexpectedMaker, eightycc, tirtharajsinha, jerr0328, rrahkola, dhalbert, HarryWeppner
  * 6 reviewers - FoamyGuy, tannewt, dhalbert, makermelissa, jepler, anecdata
* 19 closed issues by 8 people, 19 opened by 14 people


### 7:42 Core
* 15 pull requests merged
  * 11 authors - tirtharajsinha, gfghjjk, bill88t, weblate, jepler, makermelissa, tannewt, dhalbert, bergdahl, UnexpectedMaker, eightycc
  * 3 reviewers - jepler, dhalbert, tannewt
* 21 open pull requests
  * https://github.com/adafruit/circuitpython/pull/6555 (Open 433 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/6913 (Open 359 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7220 (Open 297 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7440 (Open 243 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7618 (Open 203 days)
  * https://github.com/adafruit/circuitpython/pull/7675 (Open 191 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7711 (Open 184 days)
  * https://github.com/adafruit/circuitpython/pull/7718 (Open 182 days)
  * https://github.com/adafruit/circuitpython/pull/7811 (Open 165 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7997 (Open 115 days)
  * https://github.com/adafruit/circuitpython/pull/7996 (Open 115 days)
  * https://github.com/adafruit/circuitpython/pull/8033 (Open 108 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8095 (Open 83 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8100 (Open 81 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8233 (Open 43 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8262 (Open 36 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8285 (Open 26 days)
  * https://github.com/adafruit/circuitpython/pull/8349 (Open 11 days)
  * https://github.com/adafruit/circuitpython/pull/8371 (Open 4 days)
  * https://github.com/adafruit/circuitpython/pull/8385 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/8383 (Open 2 days)
* 8 closed issues by 5 people, 13 opened by 9 people
* 710 open issues
  * https://github.com/adafruit/circuitpython/issues
* 6 active milestones
 * 8.2.x: 14 open issues
 * 9.0.0: 53 open issues
 * Libraries: 22 open issues
 * Long term: 601 open issues
 * Support: 15 open issues
 * Third-party: 8 open issues
 * 1 issues not assigned a milestone


### 8:44 Libraries
* 6 pull requests merged
  * 5 authors - jerr0328, rrahkola, dhalbert, michalpokusa, tannewt
  * 3 reviewers - anecdata, FoamyGuy, tannewt
  * Merged pull requests:
    * https://github.com/adafruit/Adafruit_CircuitPython_turtle/pull/35 (Days open: 130)
    * https://github.com/adafruit/Adafruit_CircuitPython_MAX7219/pull/47 (Days open: 44)
    * https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer/pull/67 (Days open: 10)
    * https://github.com/adafruit/Adafruit_CircuitPython_HID/pull/116 (Days open: 6)
    * https://github.com/adafruit/Adafruit_CircuitPython_ESP32SPI/pull/181 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Bundle/pull/436 (Days open: 1)
  * 46 open pull requests (Oldest: 389, Newest: 8)
* 7 closed issues by 2 people, 3 opened by 3 people
  * 636 open issues
  * 19 good first issues
* https://circuitpython.org/contributing


#### Library PyPI Weekly Download Stats
* **Total Library Stats**
  * 71856 PyPI downloads over 313 libraries
* **Top 10 Libraries by PyPI Downloads**
  * Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 6837
  * Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 5896
  * Adafruit CircuitPython Register (adafruit-circuitpython-register): 2034
  * Adafruit CircuitPython PCA9685 (adafruit-circuitpython-pca9685): 1303
  * Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1280
  * Adafruit CircuitPython ServoKit (adafruit-circuitpython-servokit): 1272
  * Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 983
  * Adafruit CircuitPython ESP32SPI (adafruit-circuitpython-esp32spi): 814
  * Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 752
  * Adafruit CircuitPython RGB Display (adafruit-circuitpython-rgb-display): 719


#### Library updates in the last seven days:
* **New Libraries**
  * [adafruit/Adafruit_CircuitPython_JSON_Stream](https://github.com/adafruit/Adafruit_CircuitPython_JSON_Stream)


* **Updated Libraries**
  * [adafruit/Adafruit_CircuitPython_HTTPServer](https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer)
  * [adafruit/Adafruit_CircuitPython_turtle](https://github.com/adafruit/Adafruit_CircuitPython_turtle)
  * [2bndy5/CircuitPython_nRF24L01](https://github.com/2bndy5/CircuitPython_nRF24L01)


### 9:57 Blinka
* 7 pull requests merged
  * 3 authors - makermelissa, sc-bin, HarryWeppner
  * 2 reviewers - makermelissa, tannewt
* 4 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka/pull/417 (Open 943 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 703 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/299 (Open 106 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/705 (Open 2 days)
* 4 closed issues by 2 people, 3 opened by 3 people
* 102 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* PyPI downloads in the last week: 11766
* Piwheels Downloads in the last month: 8274
Number of supported boards: 121
## 10:58 Hug reports
11:17 @kattni
* Group hug!


12:45 @tannewt (host)
* @danh for wrangling 8.2.x fixes and their release
* @kattni for growing CircuitPython and its community.


13:15 @danh
* BIG HUG to @kattni; more later
* @Liz for discovering a new cert problem, post 8.2.5
* @PaintYourDragon for quick Protomatter fixes (in process)


14:02 @DJDevon3 (text only)
* @LadyAda for the Desk of LadyAda lesson on using OpenAI to write a display init sequence.
* @smitka on discord for figuring out a way to animate bitmaps with .bin files.
* @Danh and team for fixing the SSL handshake bug. Confirmed fixed in the 8.2.5 release. Great job to all the devs involved with the SSL update for 8.2.5!


14:35 @foamyguy
* Group hug
* @michalpokusa for collaborative programming work on templating engine
* @kattni for all of your contributions to the community and helping many folks including myself get involved.


15:09 @jepler
* Group hug
* @danh for the bugfix release & much sleuthing
* @paintyourdragon (phil b) for working on protomatter bugfixes that are vexing users
* @kattni thank you for being one of the key people who brought me into this community! I hope you’ll have more to tell us soon about what you are doing next.
* @djdevon3 your bracket print looks great. I made a very much more minimal and fragile one but I’d print this if I was assembling a group of panels againI 


16:02 @Liz
* @Danh for the cert fix
* @Scott for adding the json stream library to the bundle
* Group hug


16:27 @makermelissa
* @Danh for fixing the circuitpython.org boards
* @kattni for everything you’ve done and all the people you’ve helped out including myself
* Group Hug


16:55 @michalpokusa (text only)
* @FoamyGuy for pair programming session regarding templating engine and for merging PR for adafruit_httpserver


17:09 @todbot (text only)
* @clever in #help-with-circuitpython for reminding me about `picotool` to save entire state of RP2040-based projects


## 17:27 Status Updates
17:51 @tannewt (host)
* Continuing work on ESP-IDF 5 kconfig update. Getting close. Wrote a script to regenerate them for all boards. Have (at least) one bug to fix for ESP32.
* After kconfig is updated, I will smoke test a few builds before updating the PR.
* Organizing the new office when I need a coding break. Moved a rug and couch in this weekend. AC is up and running too.
* Wrote up storage box info: https://adafruit-playground.com/u/tannewt/pages/custom-storage-boxes


19:05 @danh
* Fixed certificate problem when using Let’s Encrypt. Let’s Encrypt uses a tricky certificate chain with a variant on a root certificate to allow supporting some old devices. Normally it works fine but mbedTLS as used in ESP-iDF does not seem to handle it right, so we have to add an expired certificate as a root cert. This was in the old NINA-FW list but was removed when I cleaned up that list. Now it’s put back.
* Helping @PaintYourDragon debug RGBMatrix/Protomatter issues. Latest fix needs testing.
* Cert and Protomatter fixes should go into an 8.2.6 release soon.
* Working on MicroPython v1.20.0 merge. Resolved a number of initial merge conflicts. Still need to do py/ directory.


21:32 @DJDevon3 (text only)
* I spent days on the ST7796S display driver init trying to flip bits so it would refresh in landscape mode. Following LadyAda’s lead I used OpenAI to correct the missing bit in the sequence. Tested it and works great refreshing top to bottom in landscape mode. 
* Smitka on discord used a method from Gifio to directly blit bitmaps in sequence for full screen animated bitmaps, each frame is a .bin file. I was able to create a full screen 480x320 animated BMP at 9 FPS. From looking at it you’d never be able to tell it’s sequential BMP’s and not a GIF.
* Purchased more matrix panels and a 2nd PSU to add to my already 6 matrix panels. I want to see how many panels a single MatrixPortal S3 will drive. 6 is already very nice and will suit my needs but I’m hoping for 9 or 12 panels.
* Designed & 3D printed a bracket for joining 4x 5mm pitch matrix panels. Already printed a couple of prototypes. Every pitch size (2mm, 3mm, 4mm, etc..) has a slightly different design & each is physically different in size. The bracket I designed will only work on the 5mm pitch panels to my knowledge.


23:01 @foamyguy
* Off last monday for the holiday and have been working on server migrations in the evenings for other work so little time for circuitpython over the past week. Made it past the bulk of those and am back to a more normal schedule this week
* Testing of the HTTPServer library PR with new features for cookies, additional redirect types and more
* Attempting to use https://github.com/pfalcon/utemplate with circuitpython on stream saturday. Was successful but it requires some elaborate-ish boilerplate because its made from the ground up to operate on files, for both input and output. CircuitPython being write-protected by default makes it tricky to operate that way. Was able to “fake it” with io.StringIO. Intend to test further with an SDCard allowing it to write to files there.
* Working along with @michalpokusa on a new implementation of a templating library that is made to work in RAM rather than files so that it’s easier to use with stock circuitpython and no external storage.
* Testing out and submitting patch to fix an issue that some repos have with building the docs inside RTD.


25:20 @jepler
* Belated hug report: scott & micodev, the idf 5 update is huge and I can’t wait for it to be ready.
* Last week:
   * The dot clock display PR was merged, thanks to all who tested & supplied feedback
   * Sketched out support for core I/O expander support
* This week:
   * Scaled back ambitions for I/O expander. See meeting notes for more details
* Right now it’s assumed that a GPIO can be read at any time, because it’s just a register in the local I/O memory space.
* However, support for GPIO expanders on lockable buses like I2C is desirable.
* A problem arises: That bus can be locked
* Say your I2C bus has a temperature sensor and a GPIO expander. You create a keypad.Keys using GPIO expander pins. In your foreground Python code, you read the temperature sensor, which locks the I2C bus while the transaction is ongoing. The keypad background task runs, but it can’t actually read the GPIO expander keys because it cannot get the I2C bus lock.
* Similar problems exist for conditions that I hope are less likely
   * SD card CS is on an I/O expander; background MP3Decoder needs to read from an SD card
   * Display DC is on an I/O expander; background task needs to update a displayio region
* This probably points towards requiring real I/O pins for anything that might work in the background context. Which is too bad, I2C to keypad.Keys seemed like a cool idea
* This really leaves Adafruit wanting 1 thing that’s not there yet: the ability to boot-time configure a dot clock display over SPI where the clock & data pins are on an I2C expander (and with as much speed as possible); and to expose the same to CircuitPython programs. This would be a close relative of bitbangio.SPI that would work with some additional object kinds.




26:54 @kattni
* Metro M7 microSD guide in progress.
* Beginning offboarding process.


28:35 @Liz
* I’ve been working on an ESPN API project using four 64x32 matrices. It monitors five sports and leagues but I’m writing the code so that folks will be able to easily customize what they want to monitor. I wrote a Python script to pull down the team logos and convert them to 32x32 bitmaps with gamma correction for the matrix displays, which will be included in the guide. This saved me a lot of work that I’d done manually for other matrix projects and gets around the question of how to distribute the logos without running into copyright issues.
* I’ve also been writing some code for another prop-maker project. This time it is a halloween project with the Ruiz brothers. It uses the prop-maker feather along with a matrix featherwing so no matter what it’s been an RGB LED heavy week


29:40 @makermelissa
* Last Week:
   * Finished up updating Home Assistant guides
   * Started going through Blinka issues and fixing/merging/closing the easier ones
* This week:
   * Continue going through Blinka issues
## 30:12 In The Weeds


30:37 @todbot (not online unfortunately, feel free to skip)
* “Installer” for CircuitPython projects?  
I have a CircuitPython application I need to install on hundreds of boards. The application consists of a bunch of library files in “CIRCUITPY/lib” and my application files in CIRCUITPY root.  Has there been any effort to create an "installer" for CircuitPython projects that is more usable than "unzip this .zip after installing the CircuitPython UF2"?  Ideally I'd love a UF2-based solution that includes the CircuitPython firmware + application code in one bundle. This is an RP2040-based application so a hacked UF2 bootloader is not possible. (And I’ve not seen a way to easily extend the default “hello world” code.py that’s created to include a whole filesystem.)
* Update: nevermind, looks like “picotool save -a foo.uf2” works well
* @jepler: A long time ago I wrote https://github.com/jepler/mkfatimg for creating a FAT filesystem image on a host computer. It’s unmaintained. You could couple it with uf2conv.py to create a uf2 file of “just the filesystem”. As I think you know already, this will only work on devices where the filesytsem area is writable from the uf2 bootloader. Unfortunately as I understand it you can’t simply concatenate uf2 files, so the file from `picotool save` might be better.


31:56 @foamyguy - RTD Build patch for libraries


Recently a problem arose from the theme used when building docs inside RTD. It was fixed initially in the core here: https://github.com/adafruit/circuitpython/pull/8322 


I’ve tested the same fix in the TestRepo and verified it’s working there / for libraries as well. I’ve prepared a patch to use with adabot to make this fix across the libraries, but I’m uncertain if the patch was created correctly as it’s my first time doing it this way. Am interested in getting more eyes on it, and discussing timing to run it once it’s looking good.


Adabot patch PR: https://github.com/adafruit/adabot/pull/353
Cookiecutter PR: https://github.com/adafruit/cookiecutter-adafruit-circuitpython/pull/232

## 35:25 Wrap-Up
