# CircuitPython Weekly for 10 January 2022


Welcome to the CircuitPython Weekly meeting notes! Feel free to add your Hug Reports and Status Updates early. During the meeting, we go through them as a round robin sorted by username. 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!


Jeff is hosting.


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


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.herokuapp.com/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.
## 3:15 Community News

(For links and pics, subscribe to the newsletter!)

### The CircuitPython in 2022 Survey

As 2022 starts, Scott Shawcroft, lead CircuitPython developer, requests the Python on Hardware community take time to share their goals for CircuitPython in 2022.
Just like past years (full summary 2019, 2020, and 2021), Adafruit would like everyone in the CircuitPython community to contribute by posting their thoughts to some public place on the Internet.
Here are a few ways to post:
 * a video on YouTube
 * a post on the CircuitPython forum
 * a blog post on your site
 * a series of Tweets
 * a Gist on GitHub

Please consider sharing your thoughts. When you post, please add #CircuitPython2022 and email circuitpython2022@adafruit.com to let the teams know about your post so they can blog it up - Adafruit Blog.

### TIOBE Declares Python Programming Language of the Year 2021
 
Python has won the prestigious TIOBE Programming Language of the Year award for 2021. This is the second time in a row. The award is given to the programming language that has gained the highest increase in ratings in one year. C# was on its way to get the title for the first time in history, but Python surpassed C# in the last month.
Python started at position #3 of the TIOBE index at the beginning of 2021 and left both Java and C behind to become the number one of the TIOBE index. But Python's popularity didn't stop there. It is currently more than 1 percent ahead of the rest. Java's all time record of 26.49% ratings in 2001 is still far away, but Python has it all to become the de facto standard programming language for many domains - TIOBE.

### Using Both Cores of a Raspberry Pi Pico in MicroPython
 
diyelectromusic has been doing musical/MIDI visualization projects with Raspberry Pi Pico. Dual use of an LED matrix and a 4x7-segment display was a bit slow. So they looked to use the unused core on the Pico to provide extra processing power.
One core is listening to the MIDI and updating the LED matrix using the WS2812 protocol; the other is keeping the 8-segment LED scanning (over SPI) showing the last MIDI command/note received.
See more - diyelectromusic and GitHub, via Twitter Thread.

### Project of the Week: An LED Choker

My new favorite project: a text display choker for status updates at the club. Uses an Adafruit alphanumeric display FeatherWing and a Feather M0. Proto grid hosts a button to switch patterns, and CircuitPython lets the owner edit the code to add new text!

### CircuitPython Raspberry Pi Pico USB HID keyboard 

A very small CircuitPython Raspberry Pi Pico USB HID keyboard - YouTube and Hackaday.io, via Reddit.


### 6:51 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.
## 7:48 State of CircuitPython, Libraries and Blinka
### 8:01 Overall


* 38 pull requests merged
  * 25 authors - the-infinity, stoklund, EmergReanimator, PontusO, bergdahl, FoamyGuy, bd34n, tannewt, fivesixzero, jposada202020, s-light, bjnhur, twa127, aarontusko, unwiredben, CesarChavezRico, CedarGroveStudios, wtuemura, makermelissa, electricalgorithm, weblate, tekktrik, jerryneedell, hexthat, dannystaple
  * 10 reviewers - dhalbert, lesamouraipourpre, kattni, microDev1, FoamyGuy, makermelissa, TheKitty, tannewt, ladyada, jepler
* 30 closed issues by 12 people, 17 opened by 17 people


### 8:49 Core (@tannewt)
* 11 pull requests merged
  * 11 authors - hexthat, EmergReanimator, PontusO, bergdahl, unwiredben, bd34n, wtuemura, weblate, tannewt, jerryneedell, electricalgorithm
  * 4 reviewers - dhalbert, microDev1, tannewt, jepler
* 14 open pull requests
  * https://github.com/adafruit/circuitpython/pull/5298 (Open 128 days)
  * https://github.com/adafruit/circuitpython/pull/5352 (Open 116 days)
  * https://github.com/adafruit/circuitpython/pull/5422 (Open 99 days)
  * https://github.com/adafruit/circuitpython/pull/5491 (Open 80 days)
  * https://github.com/adafruit/circuitpython/pull/5551 (Open 65 days)
  * https://github.com/adafruit/circuitpython/pull/5711 (Open 27 days)
  * https://github.com/adafruit/circuitpython/pull/5726 (Open 26 days)
  * https://github.com/adafruit/circuitpython/pull/5718 (Open 26 days)
  * https://github.com/adafruit/circuitpython/pull/5781 (Open 14 days)
  * https://github.com/adafruit/circuitpython/pull/5813 (Open 4 days)
  * https://github.com/adafruit/circuitpython/pull/5820 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/5819 (Open 2 days)
  * https://github.com/adafruit/circuitpython/pull/5827 (Open 0 days)
  * https://github.com/adafruit/circuitpython/pull/5826 (Open 0 days)
* 8 closed issues by 4 people, 4 opened by 4 people
* 464 open issues
  * https://github.com/adafruit/circuitpython/issues
* 7 active milestones
  * 7.1.0: 0 open issues
  * 7.2.0: 4 open issues
  * 7.x.x: 17 open issues
  * 8.0.0: 9 open issues
  * Libraries: 17 open issues
  * Long term: 409 open issues
  * Support: 7 open issues
  * 1 issues not assigned a milestone


* Core download stats available at https://circuitpython.org/stats


### 10:29 Libraries (@kattni)
* 20 pull requests merged
  * 12 authors - the-infinity, s-light, bjnhur, stoklund, aarontusko, FoamyGuy, CedarGroveStudios, tekktrik, tannewt, fivesixzero, dannystaple, jposada202020
  * 8 reviewers - dhalbert, lesamouraipourpre, kattni, FoamyGuy, TheKitty, tannewt, ladyada, jepler
  * Merged pull requests:
   * https://github.com/adafruit/Adafruit_CircuitPython_PN532/pull/47 (Days open: 304)
   * https://github.com/adafruit/Adafruit_CircuitPython_DPS310/pull/15 (Days open: 233)
   * https://github.com/adafruit/Adafruit_CircuitPython_Wiznet5k/pull/42 (Days open: 151)
   * https://github.com/adafruit/Adafruit_CircuitPython_EMC2101/pull/20 (Days open: 71)
   * https://github.com/adafruit/Adafruit_CircuitPython_APDS9960/pull/37 (Days open: 54)
   * https://github.com/adafruit/Adafruit_CircuitPython_HTS221/pull/10 (Days open: 53)
   * https://github.com/adafruit/Adafruit_CircuitPython_APDS9960/pull/39 (Days open: 36)
   * https://github.com/adafruit/Adafruit_CircuitPython_CursorControl/pull/32 (Days open: 22)
   * https://github.com/adafruit/Adafruit_CircuitPython_Touchscreen/pull/19 (Days open: 3)
   * https://github.com/adafruit/CircuitPython_Community_Bundle/pull/89 (Days open: 3)
   * https://github.com/adafruit/Adafruit_CircuitPython_OV5640/pull/12 (Days open: 2)
   * https://github.com/adafruit/Adafruit_CircuitPython_MMA8451/pull/21 (Days open: 2)
   * https://github.com/adafruit/Adafruit_CircuitPython_HT16K33/pull/95 (Days open: 2)
   * https://github.com/adafruit/Adafruit_CircuitPython_AVRprog/pull/31 (Days open: 1)
   * https://github.com/adafruit/Adafruit_CircuitPython_PCA9685/pull/42 (Days open: 1)
   * https://github.com/adafruit/Adafruit_CircuitPython_PCA9685/pull/43 (Days open: 1)
   * https://github.com/adafruit/Adafruit_CircuitPython_MMA8451/pull/22 (Days open: 1)
   * https://github.com/adafruit/Adafruit_CircuitPython_PIOASM/pull/33 (Days open: 1)
   * https://github.com/adafruit/Adafruit_CircuitPython_DPS310/pull/20 (Days open: 1)
   * https://github.com/adafruit/CircuitPython_Community_Bundle/pull/90 (Days open: 1)
  * 33 open pull requests (Oldest: 485, Newest: 1)
* 19 closed issues by 9 people, 13 opened by 13 people
  * 637 open issues
  * 239 good first issues
* https://circuitpython.org/contributing


Library updates in the last seven days:


**New Libraries (community bundle)**
 * [ansi_escape_code](https://github.com/s-light/CircuitPython_ansi_escape_code)
 * [nonblocking_serialinput](https://github.com/s-light/CircuitPython_nonblocking_serialinput)


**Updated Libraries**
 * [Adafruit_CircuitPython_LSM303_Accel](https://github.com/adafruit/Adafruit_CircuitPython_LSM303_Accel)
 * [Adafruit_CircuitPython_SHT31D](https://github.com/adafruit/Adafruit_CircuitPython_SHT31D)
 * [Adafruit_CircuitPython_Touchscreen](https://github.com/adafruit/Adafruit_CircuitPython_Touchscreen)
 * [Adafruit_CircuitPython_Wiznet5k](https://github.com/adafruit/Adafruit_CircuitPython_Wiznet5k)
 * [Adafruit_CircuitPython_PN532](https://github.com/adafruit/Adafruit_CircuitPython_PN532)
 * [Adafruit_CircuitPython_APDS9960](https://github.com/adafruit/Adafruit_CircuitPython_APDS9960)
 * [Adafruit_CircuitPython_OV5640](https://github.com/adafruit/Adafruit_CircuitPython_OV5640)
 * [Adafruit_CircuitPython_MMA8451](https://github.com/adafruit/Adafruit_CircuitPython_MMA8451)
 * [Adafruit_CircuitPython_PIOASM](https://github.com/adafruit/Adafruit_CircuitPython_PIOASM)
 * [Adafruit_CircuitPython_DPS310](https://github.com/adafruit/Adafruit_CircuitPython_DPS310)
 * [Adafruit_CircuitPython_HT16K33](https://github.com/adafruit/Adafruit_CircuitPython_HT16K33)
 * [Adafruit_CircuitPython_EMC2101](https://github.com/adafruit/Adafruit_CircuitPython_EMC2101)
 * [Adafruit_Blinka](https://github.com/adafruit/Adafruit_Blinka)
 * [Adafruit_Python_PlatformDetect](https://github.com/adafruit/Adafruit_Python_PlatformDetect)
 * [CircuitPython_Community_Bundle](https://github.com/adafruit/CircuitPython_Community_Bundle)


### 12:47 Blinka (@MakerMelissa)
* 7 pull requests merged
  * 4 authors - CesarChavezRico, makermelissa, twa127, FoamyGuy
  * 3 reviewers - ladyada, makermelissa, tannewt
* 6 open pull requests
  * https://github.com/adafruit/Adafruit_Blinka/pull/417 (Open 334 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/496 (Open 168 days)
  * https://github.com/adafruit/Adafruit_Blinka_bleio/pull/40 (Open 94 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/201 (Open 34 days)
  * https://github.com/adafruit/Adafruit_Blinka/pull/540 (Open 3 days)
  * https://github.com/adafruit/Adafruit_Python_PlatformDetect/pull/210 (Open 1 days)
* 3 closed issues by 1 people, 0 opened by 0 people
* 69 open issues
  * https://github.com/adafruit/Adafruit_Blinka/issues
* Piwheels Downloads in the last month: 14001
Number of supported boards: 87


## 14:00 Hug reports
@jepler (host)
* Group hug


14:49 @CGrover (text only)
* @foamyguy for last Saturday’s very informative stream. Not only did it help to explain some missing details of CircuitPython board definitions, it also showed some examples of excellent code+documentation in the CircuitPython PR pipeline, particularly that of @fivesixzero.


15:12 @danh
* Echoing Scott’s thanks to our helpers in discord, including @jerryn, @neradoc, @deshipu, @anecdata, and often or mostly in the non-CircuitPython world, @Ichiro.Furusato, @madbodger, @EdKeyes, @todbot, @skerr, @ben-, and others I have missed.


15:55 @david.glaude (lurking)
* @kattni for making the floppy disk playlist on YouTube
* @foamyguy and others that left ready to use vectorio sample code in issues, I made all my tests based on resolved issues, they are known to be working minimal pieces of code.


16:19 @foamyguy
* @fivesixzero for doing loads of great work on the APDS9960 library. They left a very detailed PR that resolved many of the open issues and added lots of great documentation for the library.
* @Jeff E for posting an overview about Matrix chat systems on Discord. KMK project chat is the first/only time I’ve used it. I managed to find a web based client to get into the room a while back, but Jeff’s post allowed me to understand how it actually works.
* @Neradoc for testing out a PR for HTS221 and suggesting a good improvement for recent changes to DPS310 library


17:32 @jerryn (missing meeting)
* @tannewt for the continued improvement and expansion of the broadcom port
* @danh for jumping in to add deprecation warnings to the TinyLoRa guides


17:47 @kattni
* @mark[gamblor] for the updates to the IS31FL3741 and patience with me getting to sorting out where the updates should live
* @foamyguy for continuing through the older library PRs
* @sheehan (one of our Learn developers) for sorting out a script to convert a template page to a static page in Learn for an unusual situation I ran into with refactoring a specific template page - saved me a ton of time and frustration in manually copying a very lengthy guide page
* @PT and @ladyada for incredible support during a rough situation.
* @jepler, @danh, @anneb, @johnpark for further support.
* Group hug!


18:33 @KeithTheEE (Text only)
* Hug report to everyone for being such a welcoming and helpful community 


18:45 @MakerMelissa
* Group Hug


19:00 @tannewt
* @neradoc, @deshipu and @anecdata for helping folks in #help-with-circuitpython (even when they complain about the job we’ve done.)


19:34 @v923z
* @jepler for chipping in quite a few times with ulab fixes in the past 6 months
* Group hug
## 20:29 Status Updates
20:51 @jepler (host)
* Last week & This week: Centered around floppy disk drives.
   * Last week: Got basic “flux” reading working in CircuitPython
   * This week: Goal is to add real-time MFM decoding, have a plan
* When I need a break I’ll see about implementing PIO code for 8 parallel neopixel strip output without a shift register for the feather scorpio
* Have a languishing adafruit_pioasm PR I need to return to
* Did a pure C program with esp-idf, was fun: https://github.com/jepler/wifi-ntp-pps – didn’t do CircuitPython because I wanted synchronization at better than 1ms levels


22:12 @danh
* Wrote an asyncio NeoPixel animation example, which is in review right now.
* Debugging PDMIn not working on SAMD in 7.1.0.
* Fighting with a new Linux bug that takes down an entire USB controller when a device goes away. A newer kernel may be helping: trying Ubuntu 22.04 instead of 20.04.


24:10 @CGrover (text only)
* A week of refactoring: disassembled and rebuilt the retro RPN calculator code followed by the redesign of three PCBs to accommodate a new round of scarce part availability issues. Upgraded two existing IoT projects to CircuitPython 7.1.0 and lined up four more for similar treatment.
* Depleted a large share of my maker budget with an Adafruit order.
* Finally found a suitable round TFT display for the 6E5 MagicEye project. A flexible PCB will be needed. Looking forward to the experience – my first.


@david.glaude (lurking)
* CP:
   * Testing displayio and vectorio on a Raspi Zero 2 W, changing screen resolution.
   * Searching for floppy drives, floppy disk and floppy cable.
* Non-CP: Drilling holes in thick walls, finding acceptable paths between rooms to place ethernet backhaul for a Wifi upgrade… and better connectivity where I am teleworking.


25:18 @foamyguy
* Last Week
   * Wrap up Busy Sim PyPortal guide and submit for moderation
   * More PR testing and Reviews. A few cool ones this week were splitting the DPS310 library to have a minimal basic version that can get used on the smallest builds. And improvements to APDS9960 gesture recognition and documentation
* This week
   * Two new projects to work on: Webb Telescope status shower, and some Llama based nostalgia with a Winamp skinned MP3 player for PyPortal.
   * Continuing to build out documentation for the Minecraft Feather I showed last week. Maybe record a video of the setup process
   * Write a post for CircuitPython 2022


28:03 @kattni
* Last week:
   * Short week.
   * Sorted out a home for the IS31FL3741 updates
   * Added more to the QT Py ESP guide
   * Merged the ESP32-S2 Bootloader Install and ESP32-S2 Factory Reset templates to prep for gutting the Bootloader Install template
* This week:
   * Starting Feather TFT guide
   * Refactor the ESP32-S2 Bootloader Install template
   * Finish QT Py ESP guide
   * Finish Feather TFT guide
   * Arcade STEMMA QT guide
   * QT-ify guide for updated MCP4725 Breakout Board - 12-Bit DAC w/I2C Interface
   * Create CP Essentials DotStar Status LED template
   * Create CP Essentials template for asyncio


31:34 @MakerMelissa
* Last Week:
   * Finished up Blinka Displayio changes and was able to leave it in a working state
   * Added a bunch of missing boards to CircuitPython.org
   * Started working on porting LittleFS to JavaScript to use with WipperSnapper
* This Week:
   * Continue porting LittleFS


32:12 @tannewt
* Just about wrapped up on RPI. Still somewhat unreliable SD card unfortunately. Last bit will be a learn guide.
* Will make a PR to enable Turkish builds. Thanks to @electricalgorithm for doing the translations
* Next up is ramping up on ESP32-S3.
* Also doing #CircuitPython2022 this week. Exciting news to come
* Will be testifying to some WA state committees around broadband and digital equity. Hopefully not too distracting. This is the week it happens though.


36:54 @v923z
* Released version 4.0.0 of ulab with optional support for complex arrays, a couple of new functions, and a number of bug fixes with help from the circuitpython community
* Keep working on open issues.
## 38:13 In The Weeds
38:30 @v923z
* What is the platform-independent way of writing data to file in C?



```
char *buffer = m_new(char, ULAB_IO_BUFFER_SIZE);
int error;
mp_obj_t open_args[2] = {
fname, 
MP_OBJ_NEW_QSRT(M_QSRT_wb)
}
mp_obj_t npy = mp_builtin_open(2, open_args, (mp_map_t *)&mp_const_empty_map);
const mp_stream_p_t *fout = mp_get_stream(npy);
fout->write(npy, buffer, ULAB_IO_BUFFER_SIZE, &error);
```

How to close fout, what can be done with error?


@danh: ~~This is how we do it in main.c (no error checking in this case, because there’s nothing we can do):~~
```c
            f_open(fs, &boot_output_file, CIRCUITPY_BOOT_OUTPUT_FILE, FA_WRITE | FA_CREATE_ALWAYS);
            UINT chars_written;
            f_write(&boot_output_file, boot_text.buf, boot_text.len, &chars_written);
            f_close(&boot_output_file);
            filesystem_flush();
```
This doesn’t work for arbitrary paths.
@jepler: Look at gifio for how to write a file.


50:01 @foamyguy 
Do we want to separate out requirements that are only used for typing? A specific example is here: https://github.com/adafruit/Adafruit_CircuitPython_Requests/issues/96 but I think there will be other ones that come up that are similar.
## 55:31 Wrap Up
Next meeting: Tuesday January 18, 2022 (24 hours later than usual)
