# CircuitPython Weekly Meeting for January 8, 2024


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


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.
## 02:42 Community News
### MicroPython v1.22.1 Patch Release
MicroPython v1.22.1 was released to address a specific race condition in using _thread in the RP2 port. v1.22.0 has been out since December 27th so the period where the issue has been in effect is short, although it was present in preview builds since November 9th - GitHub.
### 03:12 Free Python for Kids Tutorial with MicroPython and BBC micro:bit
Python For Kids is a free comprehensive online Python development tutorial for kids utilizing a BBC micro:bit Development Board going step-by-step into the world of Python for microcontrollers - GitHub and YouTube.
### 03:28 Project of the Week: Sound Localization with Raspberry Pi and Python
If you have multiple microphones in known locations, and can determine the time a sound arrives at each one, you can actually determine the location that sound is coming from. This technique is referred to as sound localization via time difference of arrival. Kim Hendrikse decided to put the technique to good use to track down the location of illicit fireworks launches.
The build is based on the Raspberry Pi, with Kim developing an “autonomous recording unit” complete with GPS module for determining their location and keeping everything time synchronized. By deploying a number of these units, spread out over some distance, it’s possible to localize loud sounds based on the time stamps they show up in the recording on each unit - GitHub, Medium and Hackaday.
### 04:14 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),.
## 04:53 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.**
### 05:09 Overall
* 12 pull requests merged
  * 9 authors - bdlucas1, jepler, justmobilize, imnotjames, kreier, how2flow, janvolck, makermelissa, aalhard
  * 7 reviewers - brentru, jepler, makermelissa, tekktrik, dhalbert, ladyada, FoamyGuy
* 15 closed issues by 9 people, 15 opened by 14 people
### 05:41 Core
* 4 pull requests merged
  * 2 authors - jepler, kreier
  * 3 reviewers - jepler, dhalbert, ladyada
* 23 open pull requests
  * https://github.com/adafruit/circuitpython/pull/6555 (Open 552 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7440 (Open 362 days)
  * https://github.com/adafruit/circuitpython/pull/7618 (Open 322 days)
  * https://github.com/adafruit/circuitpython/pull/7675 (Open 310 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7811 (Open 284 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7997 (Open 234 days)
  * https://github.com/adafruit/circuitpython/pull/7996 (Open 234 days)
  * https://github.com/adafruit/circuitpython/pull/8033 (Open 227 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8100 (Open 200 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8233 (Open 162 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8349 (Open 130 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8457 (Open 97 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8647 (Open 47 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8699 (Open 33 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8713 (Open 27 days)
  * https://github.com/adafruit/circuitpython/pull/8725 (Open 23 days)
  * https://github.com/adafruit/circuitpython/pull/8773 (Open 8 days)
  * https://github.com/adafruit/circuitpython/pull/8779 (Open 5 days)
  * https://github.com/adafruit/circuitpython/pull/8783 (Open 4 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8782 (Open 4 days)
  * https://github.com/adafruit/circuitpython/pull/8781 (Open 4 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8786 (Open 2 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/8787 (Open 1 days)
* 3 closed issues by 3 people, 5 opened by 5 people
* 694 open issues
  * https://github.com/adafruit/circuitpython/issues
* 8 active milestones
 * 10.0.0: 2 open issues
 * 8.2.x: 0 open issues
 * 9.0.0: 49 open issues
 * 9.x.x: 7 open issues
 * Libraries: 23 open issues
 * Long term: 573 open issues
 * Support: 14 open issues
 * Third-party: 11 open issues
 * 17 issues not assigned a milestone
### 07:38 Libraries
* 5 pull requests merged
  * 5 authors - bdlucas1, jepler, justmobilize, imnotjames, aalhard
  * 4 reviewers - brentru, FoamyGuy, tekktrik, jepler
  * Merged pull requests:
        * https://github.com/adafruit/Adafruit_CircuitPython_asyncio/pull/59 (Days open: 48)
        * https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/149 (Days open: 8)
        * https://github.com/adafruit/Adafruit_CircuitPython_LPS2X/pull/15 (Days open: 5)
        * https://github.com/adafruit/Adafruit_CircuitPython_PCA9685/pull/59 (Days open: 2)
        * https://github.com/adafruit/Adafruit_CircuitPython_PyCamera/pull/15 (Days open: 1)
  * 58 open pull requests (Oldest: 508, Newest: 1)
* 6 closed issues by 5 people, 9 opened by 8 people
  * 717 open issues
  * 19 good first issues
* https://circuitpython.org/contributing
#### Library PyPI Weekly Download Stats
* **Total Library Stats**
  * 52103 PyPI downloads over 323 libraries
* **Top 10 Libraries by PyPI Downloads**
  * Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 7105
  * Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 6770
  * Adafruit CircuitPython Register (adafruit-circuitpython-register): 2060
  * Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 915
  * Adafruit CircuitPython DHT (adafruit-circuitpython-dht): 825
  * Adafruit CircuitPython PCA9685 (adafruit-circuitpython-pca9685): 776
  * Adafruit CircuitPython Pixelbuf (adafruit-circuitpython-pixelbuf): 741
  * Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 684
  * Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 652
  * Adafruit CircuitPython Logging (adafruit-circuitpython-logging): 587
#### Library updates in the last seven days:
* **Updated Libraries**
  * [adafruit/Adafruit_CircuitPython_LPS2X](https://github.com/adafruit/Adafruit_CircuitPython_LPS2X)
  * [adafruit/Adafruit_CircuitPython_Requests](https://github.com/adafruit/Adafruit_CircuitPython_Requests)
  * [CedarGroveStudios/CircuitPython_WaveBuilder](https://github.com/CedarGroveStudios/CircuitPython_WaveBuilder)
  * [todbot/CircuitPython_MicroOSC](https://github.com/todbot/CircuitPython_MicroOSC)
### 12:02 Blinka
* 3 pull requests merged
  * 3 authors - makermelissa, how2flow, janvolck
  * 1 reviewers - makermelissa
* 11 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka/pull/417 (Open 1062 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 822 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/65 (Open 40 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/749 (Open 33 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/766 (Open 10 days) (draft)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/335 (Open 10 days) (draft)
  * https://github.com/adafruit/Adafruit_Blinka/pull/772 (Open 1 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/771 (Open 1 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/336 (Open 1 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/773 (Open 0 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/337 (Open 0 days)
* 6 closed issues by 2 people, 1 opened by 1 people
* 78 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* PyPI downloads in the last week: 12283
* Piwheels Downloads in the last month: 5522
Number of supported boards: 128


## 12:59 Hug reports
13:17 @Liz (hosting)
* Group hug


13:22 @CGrover (text only)
* @foamyguy for suggesting bitmaptools to reduce a project’s footprint. Improved performance, as well.
* @JohnPark for the design and coding of the superb Faderwave project. I’ll be using it as a test bed for my WaveBuilder demonstrator project.
* Group hug.


13:42 @danh
* @jepler and everyone else for covering while both Scott and I were away.
* @jeremyamoore, @eightycc, @romkey for continuing to stay on top of the macOS Sonoma issue and submitting Feedback items to Apple.
* @justin for working on refactoring network code.


14:25 @deshipu
* @eightycc for work on improving the filesystem support and usb MSC
* @bill88t for work on settings.toml and web workflow
* @bradanlane for discussions on displayio and epaper displays


15:02 @DJDevon3 (text only)
* @FoamyGuy for the Friday & Saturday streams.  Doing great things with displayio. Can’t wait to integrate his soft keyboard into my project.
* @Tannewt for everything he’s contributed to Circuit Python and dealing with a personal matter. 
* Group Hug


15:19 @foamyguy
* Group Hug
* @Justin for working on a ConnectionManager API that manages the differences in networking API between built-in wifi and ESP32SPI. Aso for sharing a utility that can generate stubs files for the board module using values found from pins.c in the core. Both efforts are really cool!
* @Tekktrik Nice to see you and thanks for going through some library repo issues and PRs.


16:43 @jepler
* Hug reports for Dan & Scott as they go through difficult times.
* Group hug


17:08 @justin
* @FoamyGuy for trying my ConnectionManager during a deepdive livestream and trying to figure things out on the fly


17:41 @makermelissa
* Group Hug


17:50 @tekktrik (not present)
* Group hug to everyone!  Excited to be more present again soon!


## 18:00 Status Updates
18:26 @Liz (hosting)
* I was able to take the past two weeks off to rest and recharge. I did work on some electronics projects though while I was out. I built a plant grow light for my mom. This involved building a wooden flower box to hold the plants. The lights are 6000K dotstar LEDs that are connected to a QT Py ESP32-S2 running WipperSnapper firmware that turns the lights on and off at a scheduled time. It was my first time using WipperSnapper for a project and it was incredibly easy. Since this project is running at my mom’s house I can also monitor it via my IO account for troubleshooting.
* I finally got around to starting to mod a Meowsic cat piano that I had found on the side of the road. I followed JP’s guide on adding a line out. Additionally I took out the very corroded battery compartment and installed an HUSB238 so that it can be powered by USB C. I also added a power indicator LED.


19:46 @CGrover (text only)
*   * Wrapping up the tests for a synthio.waveform wave table graphic visualizer widget, WaveViz, a companion to the WaveBuilder class. WaveViz accepts a synthio.ReadableBuffer array and creates a displayio.Group object containing an oscilloscope-like waveform bitmap of any size or aspect ratio. The envisioned objective is to create synth waveforms with WaveBuilder that are saved to (or retrieved from) a library of sound sample files. WaveViz will be used to create thumbnails for each unique wave table file.
* The remainder of this week will be devoted to creating and testing the wave file save/retrieval code. Hoping also to have time to assemble one of JP’s Faderwave PCBs. Fingers crossed that the Adafruit order of parts arrives on schedule.
* While testing WaveViz using a FeatherS2 and 2.4-inch Feather TFT wing, I occasionally saw a few mis-colored pixels and edge-to-edge horizontal transparent lines. The symptoms were dependent on the bitmap’s initial position and color palette, limited to just a few image origin locations. Was finally able to make it repeatable and drafted a CircuitPython issue. Before hitting submit, I disconnected all attached devices to confirm the error. Turns out that the unused and unselected (and broken) SD card in the wing’s slot was interfering with the display in a very specific and predictable way. Crisis averted.


21:29 @danh
   * Away last week due to my mother passing on Dec 31.
   * Returning to continue work on 9.0.0 issues.
   * Will check latest update to NINA-FW by Thach.
   * Did extra Forum support over the holidays to cover for those taking time off.


22:40 @deshipu
   * I was out of commission for a while, so nothing new.
   * I need to test the 9.x versions on all of my boards, especially the displayio and memory changes.


23:17 @DJDevon3 (text only)
   * The Fitbit heart monitor I created to track my mom’s heart rate came in handy this week unfortunately. Had to take her to the ER twice over the weekend.  Fitbit is not a medical device but it can be useful for generic monitoring when I spend most of my time in front of a computer. Was able to catch her illness much earlier this time. Turns out we both have Covid. 
   * Attempted to integrate FoamyGuy’s latest changes for his new soft keyboard library into my project but there seems to be an issue with indexes I can’t figure out.


23:52 @eightycc
   * Enjoyed some time away from computers for the holidays.
   * Discovered that MacOS Sonoma has two active implementations of its FAT filesystem drivers, the original that operates at kernel level and a new one that operates at user level. Which one is used depends on how the filesystem is mounted: A manual mount invokes the original kernel level driver while an automatic mount invokes the new user level driver. It’s the new user level driver that has the delayed meta-data write problem.
   * Back to work on RP2 _bleio. Working through asynchronous event handling for characteristic value reads now. BTstack delivers a large number of events that are not documented, so I’ve been reading a lot of source code. So far I’m maintaining parity with the nrf port.


25:26 @foamyguy
   * Lots of time off relaxing with video games and building lego with my wife. Starting to get more back into Circuitpython Friday and over the weekend
   * Checked out and tested the current draft state of the Connection Manager proposal
   * Digging into a potential off-by-one error in vectorio core module related to non-default rotations. Found a few other small fixes with some of the debugging prints that can be enabled with a flag in the c code of the module
   * Still working on PyGameDisplay library to get it to be compatible with newest version of Blinka_Displayio. I’ve had varying levels of success but I seem to be only able to get either auto_refresh or manual refresh() working at once. I’ve had both working at different times, but trying to fix one has always resulted in breaking the other so far. Learning lots about Blinka_Displayio internal functionality in the process.


27:42 @jepler
   * Last week: jpeg viewer for memento camera. Image filtering with ulab
   * This week: image filtering in new core module, taking inspiration (& some code) from openmv
   * So far: “simple” image convolution filter, called “morph”
   * Still iterating on what this will look like. Limor requests “morph3” which can operate separately on each channel
   * Also need some kind of channel mixing code (e.g., to make a sepia filter), invert, solarize, …


30:17 @makermelissa
   * Testing out hardware on the Raspberry Pi 5 and updating scripts/guides as needed
   * Speaker Bonnet
   * Voice Bonnet
   * BrainCraft HAT
   * Continuing to get more of the Raspberry Pi Setup Scripts functioning with Bookworm 


30:49 @tekktrik (not present)
   * Fall semester of classes is over, and while spring starts shortly, I’m excited to make more substantial contributions again.
   * In non-CircuitPython work, I’ve been working on getting a personal website up that runs on Flask.  Learning a lot about web development and web servers as well.
   * Hoping to take another look at my older PRs and resolve them:
   * Adafruit_IO_Python for moving to pyproject.toml
   * A few PR reviews I said I’d take a look at - if I assigned myself to review it please don’t hesitate to ping me so I don’t miss it.
   * Hoping to prototype a repository that uses typing stubs in an effort to remove the try/except block used in the libraries - I’ll share what that would look like to see if it would still be helpful.
   * I’m unsure if there’s any specific reason that inline typing annotations are preferable to typing stubs, but let me know if there is (e.g., Mu can only understand/use inline annotations)


## 31:49 In The Weeds


32:08 @tekktrik (not present)
   * Received an email that the ReadTheDocs projects need the webhooks in the repositories updated in order for triggered builds to keep working:
   * “Previously, manually configured webhooks from integrations did not have a secret attached to them. In order to improve security, we have deployed an update so that all new integrations will be created with a secret, and we are deprecating old integrations without a secret. You must migrate your integrations by January 31, 2024, when they will stop working.”
   * “If you aren't using an integration, you can delete it. Otherwise, we recommend clicking on "Resync webhook" to generate a new secret, and then update the secret in your provider's settings as well. You can check our documentation for more information on how to do this.  You can read more information about this in our blog post: https://blog.readthedocs.com/security-update-on-incoming-webhooks/.”
   * It seems enough to go to the project on RTD and click the “Resync webhook” button.
   * It’s worth noting that I’m unable to do so for sub-projects I’ve created within the CircuitPython RTD project due to insufficient GitHub repository permissions, so someone with full permissions on both RTD and GitHub needs to do it.
   * Happy to help in any way I can, please ping me about anything I can do!


34:25 @deshipu
   * Fake file/filesystem with exception information and other status:
   * it would be nice to be able to see exceptions without having to teach people about the serial console, it could greatly simplify answering support questions, if we could just ask them to upload the file on discord
   * https://github.com/adafruit/circuitpython/issues/8737 
## 40:56 Wrap-Up
