# CircuitPython Weekly Meeting for March 13, 2023


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


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:09 Community News
### Happy Pi Day
Pi Day is celebrated on March 14th (3/14) around the world. Pi (Greek letter “π”) is the symbol used in mathematics to represent a constant — the ratio of the circumference of a circle to its diameter — which is approximately 3.14159. Pi Day is an annual opportunity for math enthusiasts to recite the infinite digits of Pi, talk to their friends about math, and eat pie - piday.org.
Pi Day is also a day of celebrating Raspberry Pi. Pull out your favorite Pi (a Pi Pico / PicoW count!) and have some fun and consider donating to the Raspberry Pi Foundation - Twitter and Donate. piday.org.
### 3:22 GitHub Starts Rolling Out Two-Factor Authentication Requirement
Last year, GitHub announced their commitment to require all developers who contribute code on GitHub.com to enable two-factor authentication (2FA) by the end of 2023. From March 13, they will begin rolling out that 2FA requirement - GitHub Blog.
### 3:43 Make: Interviews Debra Ansell (@GeekMomProjects)
Frequent Pythonista Debra Ansell (@GeekMomProjects on Twitter) talks to Make: about the creative process, making blinking projects and much more - Makezine.
### 4:06 Using CircuitPython in Neuroscience
Embedded.fm talks to Peter Griffin in Episode 444 about operant boxes, projects, embedded systems and more. At about the 29:30 minute mark, Peter talks about using CircuitPython in operant box programming - embedded.fm, transcript and podcast audio download.
### 4:37 Newsletter Details
The CircuitPython Weekly Newsletter is a CircuitPython community-run newsletter emailed every Tuesday. 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.
## 5:20 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.**
### Overall
* 34 pull requests merged
  * 24 authors - tekktrik, isacben, DavePutz, vladak, matemaciek, jepler, BrainBoardz, jposada202020, Kasperror, bablokb, bill88t, weblate, FlantasticDan, xenomorpheus, kriswilk, edanidzerda, wtuemura, microdev1, gamblor21, Neradoc, dhalbert, bergdahl, farski, MathijsNL
  * 8 reviewers - tekktrik, makermelissa, FoamyGuy, jposada202020, tannewt, TheKitty, microdev1, dhalbert
* 14 closed issues by 8 people, 16 opened by 13 people


### 6:23 Core
* 18 pull requests merged
  * 13 authors - isacben, DavePutz, matemaciek, jepler, BrainBoardz, wtuemura, jposada202020, microdev1, gamblor21, dhalbert, bergdahl, bill88t, weblate
  * 4 reviewers - dhalbert, microdev1, tannewt, FoamyGuy
* 32 open pull requests
  * https://github.com/adafruit/circuitpython/pull/6037 (Open 390 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/6555 (Open 251 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/6913 (Open 177 days)
  * https://github.com/adafruit/circuitpython/pull/7114 (Open 139 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7141 (Open 136 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7151 (Open 134 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7161 (Open 132 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7221 (Open 115 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7220 (Open 115 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7237 (Open 113 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7282 (Open 102 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7293 (Open 101 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7343 (Open 88 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7430 (Open 64 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7440 (Open 61 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7548 (Open 36 days)
  * https://github.com/adafruit/circuitpython/pull/7551 (Open 35 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7554 (Open 33 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7573 (Open 28 days)
  * https://github.com/adafruit/circuitpython/pull/7592 (Open 25 days)
  * https://github.com/adafruit/circuitpython/pull/7591 (Open 25 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7618 (Open 21 days)
  * https://github.com/adafruit/circuitpython/pull/7675 (Open 9 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7678 (Open 8 days)
  * https://github.com/adafruit/circuitpython/pull/7690 (Open 6 days)
  * https://github.com/adafruit/circuitpython/pull/7689 (Open 6 days)
  * https://github.com/adafruit/circuitpython/pull/7702 (Open 3 days) (draft)
  * https://github.com/adafruit/circuitpython/pull/7712 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/7711 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/7710 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/7708 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/7718 (Open 0 days)
* 9 closed issues by 4 people, 5 opened by 5 people
* 634 open issues
  * https://github.com/adafruit/circuitpython/issues
* 8 active milestones
 * 8.0.x: 0 open issues
 * 8.1.0: 9 open issues
 * 8.x.x: 72 open issues
 * 9.0.0: 24 open issues
 * Libraries: 20 open issues
 * Long term: 500 open issues
 * Support: 8 open issues
 * Third-party: 4 open issues
  * 2 issues not assigned a milestone
### 8:20 Libraries (jepler will read)
* 12 pull requests merged
  * 10 authors - tekktrik, vladak, xenomorpheus, jepler, kriswilk, edanidzerda, jposada202020, Kasperror, Neradoc, bablokb
  * 6 reviewers - tekktrik, dhalbert, FoamyGuy, jposada202020, tannewt, TheKitty
  * Merged pull requests:
    * https://github.com/adafruit/Adafruit_CircuitPython_NeoPixel/pull/146 (Days open: 88)
    * https://github.com/adafruit/Adafruit_CircuitPython_Bundle/pull/421 (Days open: 37)
    * https://github.com/adafruit/Adafruit_CircuitPython_OV5640/pull/16 (Days open: 21)
    * https://github.com/adafruit/Adafruit_CircuitPython_LC709203F/pull/23 (Days open: 17)
    * https://github.com/adafruit/Adafruit_CircuitPython_Bundle/pull/422 (Days open: 14)
    * https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT/pull/158 (Days open: 9)
    * https://github.com/adafruit/Adafruit_CircuitPython_floppy/pull/9 (Days open: 5)
    * https://github.com/adafruit/Adafruit_CircuitPython_TMP117/pull/14 (Days open: 3)
    * https://github.com/adafruit/Adafruit_CircuitPython_DRV2605/pull/34 (Days open: 2)
    * https://github.com/adafruit/Adafruit_CircuitPython_BNO08x/pull/39 (Days open: 1)
    * https://github.com/adafruit/Adafruit_CircuitPython_Display_Text/pull/186 (Days open: 1)
    * https://github.com/adafruit/CircuitPython_Community_Bundle/pull/140 (Days open: 1)
  * 39 open pull requests (Oldest: 895, Newest: 1)
* 4 closed issues by 4 people, 10 opened by 9 people
  * 605 open issues
  * 76 good first issues
* https://circuitpython.org/contributing
#### Library PyPI Weekly Download Stats
* **Total Library Stats**
  * 140419 PyPI downloads over 308 libraries
* **Top 10 Libraries by PyPI Downloads**
  * Adafruit CircuitPython BusDevice (adafruit-circuitpython-busdevice): 7080
  * Adafruit CircuitPython Requests (adafruit-circuitpython-requests): 6588
  * Adafruit CircuitPython Register (adafruit-circuitpython-register): 1788
  * Adafruit CircuitPython NeoPixel (adafruit-circuitpython-neopixel): 1686
  * Adafruit CircuitPython MiniMQTT (adafruit-circuitpython-minimqtt): 1595
  * Adafruit CircuitPython Motor (adafruit-circuitpython-motor): 1295
  * Adafruit CircuitPython ADS1x15 (adafruit-circuitpython-ads1x15): 1231
  * Adafruit CircuitPython framebuf (adafruit-circuitpython-framebuf): 1114
  * Adafruit CircuitPython Display Text (adafruit-circuitpython-display-text): 1112
  * Adafruit CircuitPython Wiznet5k (adafruit-circuitpython-wiznet5k): 1023


#### Library updates in the last seven days:
* **Updated Libraries**
  * [adafruit/Adafruit_CircuitPython_MiniMQTT](https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT)
  * [jposada202020/CircuitPython_uplot](https://github.com/jposada202020/CircuitPython_uplot)


There was a problem with bundle updates that affected them for about a week. This has been fixed and there’s a fresh bundle available now.
### 10:36 Blinka
* 4 pull requests merged
  * 3 authors - farski, FlantasticDan, MathijsNL
  * 1 reviewers - makermelissa
* 4 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka/pull/417 (Open 761 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 521 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/267 (Open 103 days)
  * https://github.com/adafruit/Adafruit_Python_PureIO/pull/33 (Open 32 days) (draft)
* 1 closed issues by 1 people, 1 opened by 1 people
* 96 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* PyPI downloads in the last week: 13037
* Piwheels Downloads in the last month: 9591
Number of supported boards: 101


## 11:34 Hug reports


@danh (hosting)
* @hathach for help with updating TinyUSB, especially for RP2040.
* @gneverov for ongoing asyncio discussions and rework.


12:42 @foamyguy
* @neradoc and @joseposada for fixes in display_text library
* Gneverov for jumping into asyncio improvements
* @Brentyi a first-time contributor who submitted some typing fixes.


13:16 @jepler
* @Microdev for working on the rp2040 watchdog PR. (I was sure the HW wouldn’t do it; I was wrong!)
* @gamblor (mark) for continuing to work on weird OnDiskGif memory problems even if there’s no resolution yet
* @danh I know there’s something I wanted to thank you for but I can’t think of it now!
* @neradoc for fixing a problem I ran into with a multiline label that had blank lines


14:05 @jerryn
* @MakerMellissa for the CP Installer. It is a very nice tool. It worked great with a Feather ESP32-V2.


14:33 @Jose David(Text only)
* @edanizerda. For adding the parameters for 2200 mAh cylindrical battery in the LC709203F, and for keeping the good vibes along the way counting pixels in the graph 😀
* @ xenomorpheus for updating an example in the BNO08x library
* @kriswilk for adding RealTime Playback feature to the DRV2605
* @Neradoc for working in fixing the directional option on label and bitmap_label


15:25 @DJDevon3
* @Todbot for an excellent helper function to replace the missing python findall() regular expression that doesn’t exist in Circuit Python. I don’t know if that one is in your tips & tricks but it definitely should be and I’ll make sure to check there first next time.
* @Neradoc & @Deshipu for teaching me how to add list integers using sum() with for loops and for teaching me far more efficient JSON parsing techniques. You’re both wizards.
* @Danh for helping me troubleshoot a Metro M7 issue which ultimately ended up being a bad magnetic data cable and user error.
* @Jepler for the great guide on the iMX series bootloader. I’m sure it would have worked if I had a good cable. Thankfully ended up not needing the guide. The Metro M7 bootloader process is a completely different experience than any other circuit python board I’ve used so far. I’m glad the guide was there just in case.
* @Ladyada for an excellent episode of desk of lady ada going over the difference between RP-SMA & SMA antennas. I made the exact mistake she warned about and I’ll be correcting my RFM95 antenna connection this week.


16:46 @KeithTheEE (text only)
* @Kattni, @TammyMakesThings, @Janine (over on the python discord) for all helping me during a ‘build a text scrolling hat’ workshop. Kattni gave me a lot of advice leading up to it, and with TammyMakesThings the two helped answer questions in the chat (many of which I did not have the answers for myself), helping me focus on keeping the build moving. 


17:13 @makermelissa
* @jepler for sharing your ChatGPT code
* @jerryn for testing the CircuitPython Installer
* Group Hug


17:30 @Mark[Gamblor] (Missing this week)
* @DanH, @Tannewt, @gneverov for comments and information to get my JTag going and thoughts on an issue where memory isn’t being freed by the garbage collector when I think it should be.


17:49 @tannewt
* @robert-hh for running perf bench on MP on iMX for me.
* @danh for chatting with me while I’m in the performance weeds and helping me decide on direction.
* Adam from the Albums app who let me nerd snipe them about importing Spotify song playback history.


18:55 @tekktrik (not present)
* Group hug!
## 19:04 Status Updates


19:38 @danh (hosting)
* Updated pico-sdk and cyw43-driver to the latest version on `main`.
* Updating tinyusb to latest version on `main`.
* Still planning for 8.0.4 and 8.1.0-beta.1 releases soon. Doing lots of reviewing and helping others debug issues.
* Talked with Scott about iMX performance (see below)


20:58 @DJDevon3 (missing meeting)
* Added some neopixels to my Mail Boombox project. It now blinks and plays a sound on the 20W speakers when receiving a LORA test message for mailbox activity. It is so bright and loud you can’t ignore it. It could be easily adapted as a great accessibility project for the deaf or blind.
* Created a Steam API example for the adafruit_requests library. Unlike most popular websites Steam does not use OAuth. I like the way Steam does it, it’s the easiest API I’ve used so far. Creating an API key is a one click process. The data you can return is minimal. They put their user’s privacy first which I find highly respectable. The API example pulls every game you’ve played into a list. It then adds all of the time played into a sum total in hours or days spent playing video games. If you’ve played a lot of Steam games over your lifetime, you might not want to see that number. It’s another popular API added to the library.
* Received the Metro M7 this week. After realizing I don’t have a large dot clock display I ordered the 7 '' display from Adafruit. I plan to dive into a graphical project when that arrives. 


22:15 @foamyguy
* Lighter week last week, was on vacation for the latter part of the week thru the weekend
* Worked on a fix for bitmaptools.boundary_fill() to make it handle background tasks and respect the ctrl-C interrupt in a timely fashion. Need a point in the right direction for how to handle an issue the fix caused for the unix port 
* Inspired by a viral of a person playing a MIDI piano in order to “draw a picture” with the midi notes as they get recorded into DAV software, I wrote a circuitpython script to load a small bmp image file and send MIDI notes over USB that correspond to the 2D 1bit drawing contained in the bmp image.
* This week
   * Reviewing library PRs tested some fixes for BitmapLabel and reviewed some typing fixes in BLE
   * Attempt to add an endpoint to return storage information in the web workflow for #7637


24:34 @jepler
* Infinite zorque guide is live. This project runs on a pyportal (any size) and and uses chatgpt to create an infinite (if often nonsensical) text adventure. Customize the adventure by writing in plain English (or even French!), rather than in computer code.
* I2sout started, but doesn’t build yet. Will continue
* For myself I made a terminal-based interface to the chatgpt api and put it up on github: https://github.com/jepler/chap/


25:33 @Jose David(Text Only)
* Some PR Reviews.
* PR to fix the padding in label after the work done by @neradoc in bitmap_label
* Not CP. helped translate game messages for the open source Tabletop game https://github.com/drwhut/tabletop-club/. 


25:53 @makermelissa
* Last 2 weeks:
   * Out sick for part of last week
   * Finished up getting the CircuitPython Installer live and working
   * Added a bunch of new boards to circuitpython.org
   * Wrote a JavaScript MergeBin library to incorporate most of the functionality of esptool’s merge_bin function, but works online
   * Updated WipperSnapper Firmware uploader to be able to create a downloadable file for flashing later
   * Worked with Brent to fix an issue where WipperSnapper sometimes wasn’t working on the ESP8266
   * Wrote a Voice Assistant python script that interfaces with ChatGPT and runs on the Raspberry Pi
   * Tested out esptool-js on different boards. It worked on most, but wouldn’t work on the ESP32-S2 that I tested.
* This Week:
   * Working on some changes to allow the CircuitPython Installer to be used on the Adafruit Learn System
   * Additional Improvements to the CircuitPython Installer


27:19 @Mark[Gamblor] (Missing this week)
* PR 7712 adds deinit support to OnDiskGif. This ended up not fully fixing the memory freeing issue but can be treated on its own (if it passes review).


27:38 @tannewt
* Still looking at performance on iMX RT.
* Robert-hh sent me some MP on iMX tests and CP was half as fast. I’ve made more changes and are in the ball park now. It is mostly ITCM placement. Hard vs softfp also made a big difference.
* A couple more things I’d like to try:
   * Switch to OBJ REPR A which MP uses by default.
   * Cache OCRAM access where the heap lives. Tricky with USB cached but can test via UART.
   * Investigate TI’s clang version that can do LTO while respecting linker scripts. https://www.youtube.com/watch?v=OkGsMrVd2y8 LTO could speed up all ports. (Though SAMD is already LTO’d.)
* Non-CP ordered a Steam Deck and I’m excited about it. :-)


33:02 @tekktrik (not present)
* Been out the last couple weeks between being sick, classes, my birthday
* Registered for PyCon!  Excited to be going this year, and eager to see everyone there!  I also plan to attend the first day of dev sprints before heading home.
* Planning to catch up on PR reviews and keep working on the CI tools using rp2040js
   * I’ll have more information and topics for discussion for In The Weeds next week about how the CI tool should analyze and report the information, as well as how it should be configurable (I’m thinking that we can use pyproject.toml to do so, I’ll have an example when I present it).
## 33:47 In The Weeds


34:11 @jepler Watchdog - inconsistency that came to light thanks to a PR from @microdev
* Inconsistent behavior across ports: Does the watchdog get reset when the interpreter exits? Apparently it does, on espressif. I want it to remain active, because in a project (on atmel-samd, where the watchdog hardware can’t be disabled anyway) I rely on it to restart the program if it exits, either normally or by exception.
   * I suggest that watchdog should only be disabled when the program exits by KeyboardInterrupt or ReloadException; in the case of any other exception, or just by exiting the end of the script, it should remain active.
   * To me, the use case of “restarts as from power-on in the case of an unhandled exception” is particularly important and I’m surprised that the espressif port is already disabling the watchdog in this case.
   * My existing project that relies on this is a keyboard. It encounters exceptions when the host computer resets because USB events can’t be sent (I think; this is tricky to see debug messages about because there’s no display). I enable the watchdog and purposely don’t handle the exception
   * I have given wrong advice about the watchdog because of the espressif port behavior, incorrectly believing that enabling the watchdog would restart-from-poweron in the case of an unhandled network exception. Sorry, if you were the recipient of this bad advice.
* Inconsistent use of `.deinit()` as a workaround for the fact that assigning None to watchdog.mode is not permitted even if the underlying HW does. I suggest that assigning `None` should be permitted (or rely on the common-hal layer to throw an exception, in the case that deactivating the watchdog is not supported). Subsequently, `.deinit()` should be removed from watchdog in 9.
## 42:17 Wrap-Up
