#circuitpython-dev

1 messages · Page 413 of 1

foggy cave
#

(which means it has partitions, volumes, filesystems, etc.)

jaunty juniper
#

I guess you want to avoid writing to the same one twice ?

foggy cave
#

Does that mean one could use dd to copy the CIRCUITPY between two microcontrollers?

lone axle
jaunty juniper
#

but why ?

lone axle
#

Or actually I should say I think you could use cp I am less sure about dd

foggy cave
jaunty juniper
#

what reasons ?

foggy cave
jaunty juniper
#

we are just copying files to a CIRCUITPY drive, why make it more complicated ?

foggy cave
#

Speed?

#

Why else

jaunty juniper
#

don't play at the partition level, this is a microcontroller, not a hard rive

lone axle
#

I'm not really sure about their different functionalities or speed of either. But since most circuitpython devices are <10mb I think most any copying method will be pretty quick.

foggy cave
#

Hm, I do have a MagTag or Funhouse or something, and I can try looking at Disk Management or diskpart and see

idle owl
#

I mean, I guess it's technically got a partition? But, for example, Disk Utility on Mac shows the microcontroller different from the other drives.

#

I don't know for sure, I'm simply relaying the info I know how to find.

foggy cave
#

I'm simply stating what I think I know

slender iron
#

the partition table of the CIRCUITPY drive is fixed

foggy cave
crimson ferry
#

best way to know is test it out on your device

#

i usually have multiple CircuitPython volumes, but rename them uniquely, so it’s easier on me, on editors, and for simultaneous copying

mental nexus
#

I've got the Devkit N8R8 board for the ESP32-S3. It looks like it flashed properly using the "UART" usb plug. When I switch over to the "USB" plug I see the CIRCUITPY drive. I'm not seeing a REPL (I tried both USB ports). Any tricks to getting a serial connection to the REPL on the ESP32-S3?

jaunty juniper
#

I'm getting the REPL on the USB port (and the ESP debug output on the UART port)

mental nexus
#

Interesting. Maybe I need to pull the latest from GitHub and rebuild. Alternately, Is there an easy way to flash from the UF2 files rather than build with the flash command?

jaunty juniper
#

I did install the UF2 bootloader

mental nexus
#

Can you point me to instructions on loading the UF2 bootloader?

#

Strange, just tried again and now I get REPL. Only thing I did was double click the reset button. weird.

jaunty juniper
mental nexus
#

Ok I’ll see if I can decipher the process. Thanks for the help!

jaunty juniper
#

I think I narrowed it down to that, though I remember some tinkering, maybe lowering the baudrate or something, or maybe it was with the C3 that it was flaky 🤷

esptool.py --port THEPORT --after=no_reset erase_flash
esptool.py --chip esp32s3 --port THEPORT --no-stub -b 921600 --after=no_reset write_flash 0x0000 combined.bin
proven garnet
#

This is good to know, I've encountered a few scenarios where Protocol seemed to be a good solution, particularly socket-like classes and things of that nature in CircuitPython

#

I didn't know much about __future__ or the annotations package within so thank you!

manic glacierBOT
#

thanks @tannewt @FoamyGuy I'll give it ago.

Done a bit more testing and it just feels odd that if the rgbmatrix bit_depth is anything other than 1 and using .play(mp3stream) I get memory allocation failed, and this only happens on a Metro M4 Express, and from what I read the Feather M4 Express has the same specs but does not have this issue when I tried.

manic glacierBOT
solar whale
#

I am trying to use one of the V2 Feather ESP32 boards with MicroPython. According to the silkscreen, the I2C pins are SCL-20 and SDA-22 but when I try to use them in MicroPyhton i2c = I2C(0, scl=Pin(20), sda=Pin(22)) I get an "invalid pin" error ```MicroPython v1.18 on 2022-01-17; ESP32 module (spiram) with ESP32
Type "help()" for more information.

import head_13
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "head_13.py", line 24, in <module>
ValueError: invalid pin

stuck elbow
#

@solar whale maybe they are swapped?

solar whale
#

Am I using the correct Board def for this board?

solar whale
stuck elbow
#

also, might need I2C 1 instead of 0

solar whale
#

swapping them still gives invalid pin --- I'll try I2C1

#

still invalid on 1 .... 😦

#

the board says the module is an ESP32-PICO-MINI-02 with PSRAM so I think I have the correct build loaded...

solar whale
#

hmmm -- I works OK if I just move SCL to another pin -- I am using 14 -- I t will not work with scl on Pin 20

#

Wow - rshell is really nice with MicroPython --- This is the first time I have used it. Big step up from ampy....

manic glacierBOT
#

The reset and read pins should be optional, but the espressif
code had several places where it assumed they are not, and a bug that
caused a crash on release_displays if they were made optional.

The bug was caused by the fields for storing pin numbers being set
to NO_PIN, which has value of -1, while the fields have type
uint8_t. That set the actual value to 255, and a subsequent
comparison to NO_PIN returned false.

stuck elbow
#

@onyx hinge I see the paralleldisplay now has a 16-bit mode, do you know if it is supposed to be functional on the esp32-s2?

#

because it hangs for me

onyx hinge
#

@stuck elbow at one point I had wanted to add 16 bit displays but I never got anywhere with it.

#

at least that's how I remember it going

stuck elbow
#

I see, that explains it

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

You are right about compatibility with the IDF. But If you look at
https://github.com/adafruit/circuitpython/blob/08b44eade5f3caa25b986524d80ca6da2313bf20/ports/espressif/common-hal/imagecapture/ParallelImageCapture.h#L36-L38, it uses gpio_num_t for a similar purpose, and that's the actual enum type. So that's what I'd suggest here. That ends up being a 32-bit int, but that's OK. It could also use an mcu_pin_obj_t *, but that may not be an improvement.

    gpio_num_t re...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Just a quick late night look but I do not think the atmel or rp2040 ports will work if the read pin is left out (likely a bug as well with them).

You are right! I started this with the reset pin, and after checking in all the ports that they do have the code to make it optional, I noticed that the espressif port also has that code for the read pin, and assumed the other ports would as well. I will fix that.

Also in the espressif port I noticed common_hal_never_reset_pin(read); was r...

lone axle
#

Anyone here using python 3.9 or 3.10? I'm curious if installing a library while specifying it's version is working in those environments:

pip install adafruit-circuitpython-lc709203f==2.2.1
#

Is it expected that this variable would be populated with a real value in the .py file that is downloaded from pip?

__version__ = "0.0.0-auto.0"

Or it's expected to stay as that 0.0.0-auto.0 value which is in the repo?

winter mortar
lone axle
# winter mortar It worked for me with 3.10, with `click==7.1.2`

Thank you for trying it out. Is click used by pip? I didn't know the version of that could make a difference. Are you able to share what OS you're on as well? Someone on github reported issues installing it on mac, I'm trying to narrow down what factors could lead to it if possible.

lone axle
#

Ahh I see. So it does get populated into the copy that ends up in the bundle. But maybe not into the copy that gets sent to PyPi.

jaunty juniper
#

yep

#

I could be wrong, but I don't think pypi can populate those automatically

winter mortar
#

I'm on Mac. Re click, specifically what I was doing was overriding the version that requirements installed:

 1064  pip3 install -r requirements-dev.txt
 1065  pip install --upgrade click==7.1.2
lone axle
#

I think that you are right. That matches what I am seeing. Just checked the file in the py bundle and one inside site-packages inside of a venv after installing.

jaunty juniper
#
❯ ag "0.0.0-auto.0"
lib/python3.9/site-packages/adafruit_platformdetect/chip.py
32:__version__ = "0.0.0-auto.0"

lib/python3.9/site-packages/adafruit_platformdetect/board.py
33:__version__ = "0.0.0-auto.0"

lib/python3.9/site-packages/adafruit_mprls.py
32:__version__ = "0.0.0-auto.0"

lib/python3.9/site-packages/adafruit_bus_device/spi_device.py
23:__version__ = "0.0.0-auto.0"

lib/python3.9/site-packages/adafruit_bus_device/i2c_device.py
21:__version__ = "0.0.0-auto.0"

lib/python3.9/site-packages/Adafruit_PureIO/spi.py
50:__version__ = "0.0.0-auto.0"
lone axle
#

Are you willing to try this driver library?

adafruit-circuitpython-lc709203f==2.2.1
jaunty juniper
#

yeah installing with ==*** should work, this is not linked to __version__

winter mortar
#

Successfully installed Adafruit-Blinka-7.1.0 Adafruit-PlatformDetect-3.20.1 Adafruit-PureIO-1.1.9 adafruit-circuitpython-busdevice-5.1.8 adafruit-circuitpython-lc709203f-2.2.1 adafruit-circuitpython-register-1.9.8 pyftdi-0.53.3 pyserial-3.5 pyusb-1.2.1

lone axle
#

I was thinking it was unrelated to that variable as well. The error reported here: https://github.com/adafruit/Adafruit_CircuitPython_LC709203F/issues/18 mentions differing versions expecting 2.2.1 but finding 0.0.0. The __version__ var was the only thing I could find with the zeros though. Even the METADATA file inside of site-packages is showing 2.2.1 for me. Not sure what could cause the issue Maybe some cached version in pypi infrastructure or something preventing it from actually downloading properly.

lone axle
jaunty juniper
#

hmmm weird error

winter mortar
lone axle
#

Good catch! thank you

winter mortar
#

Looks like there was something funky about their cached version.

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 on 2022-02-24; Seeeduino XIAO with samd21g18

Code/REPL

import board
import digitalio
l1 = digitalio.DigitalInOut(board.LED)
l1.direction = digitalio.Direction.OUTPUT
# in Xiao 1/True is off, 0/False is on for LEDs
l1.value = True     
l1.value = False
l1.value = True
# first error ... same port for BLUE_LED
#                            and D13
l2 = digitalio.DigitalInOut(board.BLUE_LED)
###
l1.d...
manic glacierBOT
viscid pine
#

^ I'll leave rick some time to respond in case he wants to PR

manic glacierBOT
#

I would be willing to learn that process ... I presume PR means "pull request"? (My background is "problem report")
I have little knowledge of git - in the large community development.
I tend to do all my work locally, and have a modified build from master as of 3/5/2022 with the changes .

  • is YELLOW_LED desired for PA17? instead of LED?
  • I believe D13 is a legacy from Arduino/AVR world where 'pin' 13 is the blinking LED port.
  • are TX__LED and RX_LED okay names for the two bl...
manic glacierBOT
#

Glad you are interested! Here is a guide about making and submitting pull requests.

  • is YELLOW_LED desired for PA17? instead of LED?

We always want one LED to be available as board.LED, so examples that need an LED have pin for that. It's fine to have several aliases for the same pin. You can look at other LED names on other boards to see what is standard, but YELLOW_LED is fine.

  • I believe D13 is a legacy from Arduino/AVR world where 'pin' 13 is the blinking LED port.

...

#

The Feather NRF52 Express has 2 LEDS, here is how it does it:

    { MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_P1_15) },
    { MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) },
    { MP_ROM_QSTR(MP_QSTR_D3), MP_ROM_PTR(&pin_P1_15) },

    { MP_ROM_QSTR(MP_QSTR_BLUE_LED), MP_ROM_PTR(&pin_P1_10) },

RX_LED and TX_LED are labeled "R" and "T" on the silkscreen (I would still use RX_LED and TX_LED then), while the yellow one is labeled "L" (perfect for board.LED). I think it...

manic glacierBOT
manic glacierBOT
#
  1. Group aliases for the same pin together, with blank lines in between group.
  2. All these LED pins are active-low, so we add the _INVERTED suffix on such pins. (So there is no plain board.LED any more.)
  3. You can omit the comments because the names are pretty self-explanatory.
  4. We have tended to add a number after the word LED

To see all the LED names in use (not completely consistent):

grep _LED ports/*/boards/*/pins.c
    { MP_ROM_QSTR(MP_QSTR...
manic glacierBOT
proven garnet
#

There was an issue raised that Google returns the old RTD documenting site from before it got moved to circuitpython.org. Is there a way to close or redirect to the new site from the old one?

onyx hinge
#

The content should match on both URLs, as far as I understand it. So while we'd prefer people discover docs.circuitpython.org I don't think they're getting out of date information.

#

is there an issue as in a github issue? I should review the details, if so.

lone axle
onyx hinge
#

ah that's yet another level of indirection away .. hmmm

lone axle
#

I don't know if https://adafruit-minimqtt.readthedocs.io/en/latest/api.html was meant to be an arduino docs page? The repos missing "CircuitPython" in their name tend to be arduino. But the content of the page appears to be for circuitpython and the download link on the left does link back to the circuitpython repo. But I'm not sure where this docs page is actually getting it's content from

onyx hinge
lone axle
onyx hinge
lone axle
onyx hinge
#

docs/conf.py:copyright = "2019 Brent Rubell" yeah looks like the year is hard coded in the docs conf...

lone axle
onyx hinge
#

In git, you can get the 'author date' of the latest commit with a command .. we could potentially run it during parsing of conf.py. git log --format=%ad --date=format:%Y -1

#

so that it would reflect the date of the last change built by RTD

#

(that'll print e.g., 2022, the 4-digit year)

#

ah, okay, so there are two similarly named things and the 'right' one does redirect and serve up the latest info but the wrong one doesn't. we could update the other one with a robots.txt that says never to index it and eventually that should make it disappear from search engine results.

lone sandalBOT
solar whale
#

Has anyone tried using the new Feather ESP32 V2 with Micropython. The pin definitions for the SPIRAM build do not seem to be correct for the ESP32 PICO MINI 02 module on the board. Pin 20 cannot be used for I2C SCL (give an invalid pin) -- Is there some other build that will support the V2 or is it not supported yet.

#

I can "workaround" the problem by using a different pin for SCL (Pin 14 works fine) with the SPIRAM build

solar whale
#

hmm -- I just did a clean clone of the CP repository git clone https://github.com/adafruit/circuitpython.git then make fetch-submodules -- if if then do a git diff I get this discrepancy ```jerryneedell@Mac-mini circuitpython % git diff
diff --git a/ports/broadcom/firmware b/ports/broadcom/firmware
--- a/ports/broadcom/firmware
+++ b/ports/broadcom/firmware
@@ -1 +1 @@
-Subproject commit bf96d0eda5952595d717fedb797aeb168483e9fa
+Subproject commit bf96d0eda5952595d717fedb797aeb168483e9fa-dirty

solar whale
#

If I cd into the ports/broadcom/firmware folder and do git diff I get

solar whale
onyx hinge
#

<@&356864093652516868> Hey y'all, our weekly meeting is in about 30 minutes. Please add your notes to the document https://docs.google.com/document/d/1lQB-bN-XISGtWKES5DahLV3XOXG6elVJaedQBdsOd0Y/edit?usp=sharing and join us in the voice channel in a bit.

random junco
#

I can't make the meeting today, but i added a group hug - thanks to everyone who's listened and supported the podcast so far

solar whale
random junco
#

thanks, appreciate it!

tulip sleet
#

we are finishing up an internal meeting, we'll be starting shortly

idle owl
#

BRB!

#

@austere acorn Please mute your mic 🙂

tulip sleet
austere acorn
tulip sleet
#

for the newsletter

idle owl
lone axle
manic glacierBOT
onyx hinge
#

We hope to get the recording and post it within the next week.

lone axle
onyx hinge
#

That's tomorrow, March 8 🙂

slender iron
#

lol

#

I wish

#

my bet is that it's long term

solar whale
#

maybe there are so many that the signed int counter has rolled over 😉

stuck elbow
#

sounds plausible

idle owl
#

Organising Adafruit folks attending PyCon * 😄

onyx hinge
#

Congrats @proven garnet !

idle owl
#

🎉 @proven garnet

proven garnet
#

Thanks y'all! hans

minor plume
#

Congrats, @proven garnet - that's exciting!

ember iris
#

That's fantastic to hear--congrats @proven garnet

onyx hinge
stuck elbow
#

🍢

idle owl
#

@solar whale Good to know! I'm supposed to get MicroPython going on the Feather ESP32 V2 for the guide.

hidden oxide
#

I'm here

#

Real late tho

hidden oxide
#

No notes

slender iron
#

Congrats @minor plume ! 🎉

idle owl
#

Congrats @minor plume !

proven garnet
#

@minor plume 🥳🥳🥳

blissful pollen
#

Congrats @minor plume !

ember iris
#

Congrats!! That's Wonderful news @minor plume

hidden oxide
#

Congrats @minor plume

minor plume
#

Thanks, everyone! I'm super excited!

#

I start the 2nd week of April.

onyx hinge
#

@solar whale Have you considered filing an issue with micropython about the "I/O 21" issue? they are probably unaware of it.

solar whale
#

there seem to be a few and it is not clear in MP how to distinguish them.

hidden oxide
#

mmm

slender iron
#

( I may have to leave in the next ten minutes or more because we have a person coming to quote us for a heat pump. They are supposed to arrive in 10 min.)

solar whale
#

Heat pumps are nice!! Enjoy!

slender iron
#

Ya, we're looking mainly to get the AC part

#

but not using gas to heat would be better too

#

and seattle is a good place to have a heat pump

solar whale
#

Thats what we thought, but use the heat more than expected

hidden oxide
#

Or am I misunderstanding?

blissful pollen
#

All my long running wifi projects have a try block around the main routine. Not perfect but it does keep things going.

hidden oxide
#

I don't use MP that much

hidden oxide
#

Ahh, OK

idle owl
#

The only two WiFi projects I've done have try/except around the networking bits.

#

Like Mark said, not perfect, but it does keep going.

stuck elbow
#

I need to test this reload_on_error thing and see if I can scroll the error message on the PewPews with that

crimson ferry
#

perhaps some recourse on Safe Mode could help with more severe conditions

blissful pollen
#

I ran out of time when I was digging at the wifi code but I think looking at the code to make sure it doesn't get into any loops that never get returned. I saw something along those lines but it was buried deep.

ember iris
#

I've written a wifi manager class, that adjusts the try/excepts. The manager is suppose to make it easy to decide whether or not it retries right away, vs later. That's kept one of the esp32s2 feather online since.. November? Even when our router drops out

hidden oxide
stuck elbow
hidden oxide
#

Mmmkay....

blissful pollen
#

My outdoor (admittingly Arduino) project has the watchdog to give it more stability if wifi errors occur

stuck elbow
#

@hidden oxide the problem is we can't use displayio and repl with the 8x8 display, so I need to display the errors somehow myself

hidden oxide
proven garnet
#

Haha no worries

solar whale
#

Life was so simple when editors just did text 😉

minor plume
hidden oxide
#

so then you need to display the errors outside of repl then??

stuck elbow
hidden oxide
#

Makes sense... esp if it sends you back to menu

proven garnet
#

Will stay tuned adabot

minor plume
#

Ditto. I'm happy to find other stuff to do and wait for the dust to settle, too.

hidden oxide
#

Boo DST

onyx hinge
#

canada and parts of mexico follow the same rule as the US, when DST is observed

idle owl
#

@proven garnet @minor plume Please continue as-is! The changes might come in how we do the imports, but we can always submit another PR at a later time.

solar whale
#

UTC -4, no?

onyx hinge
#

👋

minor plume
#

I live in AZ and most of AZ doesn't do daylight savings, but the whole world shifts around us, which is very confusing.

proven garnet
#

Thanks!

hidden oxide
#

Thanks!! cya next week!!

onyx hinge
#

@solar whale oh yeah I think you're right

minor plume
solar whale
#

That would be very helpful !

#

I thought I was the only one who had no idea what a "type hint" was....

ember iris
#

Thanks all!

solar whale
onyx hinge
#

@solar whale it doesn't seem like MP is going to be able to fix an issue if it's only discussed on Adafruit turf.

solar whale
#

I wanted to make sure Adafruit was aware of it since the product page says it works with MP

#

I considered a PR, but my MicroPython build environment is not working at present.

onyx hinge
#

fwiw looking at the code I don't see any way that any ESP32 (not S2 etc) could end up with that pin available, regardless of which "board", it's something at the "port" level. but that's not based on actual testing, soo

tulip sleet
#

Here is the notes document for next Monday’s CircuitPython Weekly meeting. It is at the normal time of 11am Pacific / 2pm Eastern here on Discord. Everyone is encouraged to attend! Please add your hug reports and status updates even if you’ll be attending the meeting - it’s super helpful! If you are unable to attend but would still like to include updates, feel free to include them in the notes and we’ll read them off during the meeting. Hope to see you there! <@&356864093652516868> https://docs.google.com/document/d/1I8mIuR4dXWFDHa32M216Mh_Nj655kqJh2MeRtj4GpLU/edit?usp=sharing
Take note: The US changes to Daylight Saving Time (“summer time”) between now and the next meeting, making the time 2PM in UTC-4. Use our online calendar with your favorite calendar app so you always see the meeting in your local time.

solar whale
slender iron
slender iron
#

that's a linux target, not bare metal

#

I'm gonna make a PR to switch. should free up room for deshipu's PR

#

I've been on 11.2 for a while

tulip sleet
#

what size diffs are you seeing/

slender iron
#

the matrix portal has a compilation issue. will let you know after I fix it

onyx hinge
#

"AArch32 bare-metal target (arm-none-eabi)" is the one we'd be using @slender iron ?

slender iron
#

yup

onyx hinge
#

for samd/etc

slender iron
#

though I can't get the pragma to actually work for the warning...

onyx hinge
manic glacierBOT
idle owl
#

Do we submit board defs, or whatever MicroPython calls them, for Adafruit boards, or does that come from the community? There's no specific build for this Feather, and I'm not sure if there should be....

#

I'm now clearer on Jerry's fuzziness earlier.

#

There's not a lot of Adafruit boards listed, so I'm guessing it's not as common...?

onyx hinge
#

@idle owl no I don't think we do it on the regular

idle owl
#

I'm... not seeing easy to find info on how to add a board. There's "Porting CircuitPython", which I'm sure is wrong, and that says "A port will typically contain definitions for multiple boards" so I doubly don't think that's what I'm looking for. Probably this is not a path I should be heading down.

#

@solar whale What build did you use for the Feather ESP32 V2 to get MicroPython "going" on it? ("going" because I realise you ran into issues.)

solar whale
idle owl
#

Got it. Thanks.

solar whale
idle owl
idle owl
#

Hmm.

manic glacierBOT
#

CircuitPython version

adafruit-circuitpython-feather_m4_express-en_US-7.2.0
adafruit-circuitpython-bundle-7.x-mpy-20220304
update-bootloader-feather_m4-v3.14.0

Code/REPL

import board
import digitalio
import neopixel

pixels = neopixel.NeoPixel(board.D22, 54, brightness=0.2)

while True:
    pixels.fill((255, 0, 0))

Behavior

AttributeError: 'module' object has no attribute 'D22'
AttributeError: 'module' object has no attribute 'D21'...
solar whale
#

hmm -- I may have missed something -- I did not see anything like that

idle owl
#

No, it looks like there isn't in any of the board-specific directories.

#

Hmph.

solar whale
#

at least not for the esp32 port

idle owl
#

Wait is that a default file for it?

#

Or what's the deal there?

#

Ah helper lib.

idle owl
#

Nevermind.

#

Hmmmmm

#

Why is ESP32 different I wonder? Because there's no remapping done?

onyx hinge
#

@slender iron So I don't know if it's a right fix but I added CFLAGS += -fno-builtin-memcpy and matrixportal builds.

slender iron
#

How much space is left?

onyx hinge
#

I don't know WHY gcc thinks that memory region starting at QSPI_AHB is only 0 bytes long (I can't see any reason why it should) but it stops concluding that the improper write is occurring when it is told not to treat memcpy as working like the standard function of that name

#
|| 
|| 494976 bytes used, 4736 bytes free in flash firmware space out of 499712 bytes (488.0kB).
slender iron
#

Ja was the one failing

onyx hinge
#

trying it now

#

maybe i'm just impatient but the builds feel kinda slow.

#

500764 bytes used, -1052 bytes free in flash firmware space out of 499712 bytes (488.0kB). drat

manic glacierBOT
slender iron
#

Bummer. I’m off for lunch and walk

manic glacierBOT
jaunty juniper
#

so like it should have xt_RATEEST.ko and xt_rateest.ko but it only has the latter, so the former is marked as "modified"

#
❯ git st .
## HEAD (no branch)
 M xt_DSCP.ko
 M xt_HL.ko
 M xt_RATEEST.ko
 M xt_TCPMSS.ko
❯ ls | grep -i xt_RATEEST.ko
xt_rateest.ko
solar whale
#

Interesting, this is the first time I’ve run into it. Thanks.

jaunty juniper
#

if you ask me, having 2 files with the same name that only differs by the case is not user friendly, we humans don't "see" case that much when we think about file names, but there it is

solar whale
#

It’s good to know what happened.

jaunty juniper
#

I don't build for broadcom, so I just ignore it, though on APFS it would be rather easy to add a small case-sensitive partition just for that, rather than reformat or use a disk image

#

actually it doesn't have to be small, they share space anyway

solar whale
#

I have one I used to use. But I’ll just stay on my Linux box.

timber mango
#

Just out of curiosity, how hard would it be to add circuitpython support for a custom board I was making?

I have a project I want to make that is based on a SAM E51 (Adafruit already has support via the Feather M4 CAN Express) that I would like users to have the option of using Arduino and circuitpython on. The difference between my board and the Feather board is that my board will have specific headers broken out for specific applications

stuck elbow
slender iron
#

@timber mango the trickiest thing can be adding support for a new external flash chip

#

@onyx hinge how did you add that flag? I tried $(BUILD)/ports/atmel-samd/supervisor/qspi_flash.o: CFLAGS += -fno-builtin-memcpy and it still failed to compile

onyx hinge
# slender iron <@!426200547024961539> how did you add that flag? I tried `$(BUILD)/ports/atmel-...
diff --git a/ports/atmel-samd/Makefile b/ports/atmel-samd/Makefile
index b9bc36344..b6d8b75b0 100644
--- a/ports/atmel-samd/Makefile
+++ b/ports/atmel-samd/Makefile
@@ -158,7 +158,7 @@ else
   endif
 endif
 
-CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) -Werror=missing-prototypes
+CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) -Werror=missing-prototypes -fno-builtin-memcpy
 
 ifeq ($(CHIP_FAMILY), samd21)
 CFLAGS += \
#

I applied it to all files

slender iron
#

the error is coming from linking which is why global cflags works

#

I disabled the errors instead

#

my build is -392 even though it has the -Os lib

manic glacierBOT
manic glacierBOT
#

I tried to build libgcc.a as part of building the ARM gcc toolchain from their supplied sources, so I could then change libgccs build flags and make sure I got a library that would be cleanly substitutable. Despite following the directions carefully, I was unable to get the toolchain to build far enough to build that library. I think I tried this twice. Perhaps it will be easier with the 11.2 sources

manic glacierBOT
slender iron
#

The 11.2 doesn't look like the libs were stripped so it's huge

#

I tried stripping it but apparently did too much

#

may look tomorrow

timber mango
viscid pine
manic glacierBOT
#

Hi everyone, I'm currently using
Adafruit CircuitPython 7.1.1 on 2022-01-14; Adafruit FunHouse with ESP32S2
and I appear to be encountering a similar issue as reported here.
Never an issue with the first request, 200 OK status with get time from Adafruit IO, but fails on second request.
I've made sure to only start one Session as suggested above and tried catching any of the following errors ConnectionError, OSError, and RuntimeError but get the following:

Traceback (most recent ca...

manic glacierBOT
solar whale
#

@idle owl @tulip sleet FYI -- take a look at this discussion <#circuitpython-dev message> -- it looks like the case sensitive file system is once again necessary for the broadcom builds...We discussed this awhile ago and found it was not needed for the espressif builds any more, but ... it's back -- I just verified that it woks fine with a case sensitive file system but not with the "standard" MacOS file system. sigh,,, I guess I'll go back to using my case sensitive partition when I want to build on the Mac.

solar whale
#

ugh -- I guess i never tried a broadcom build on my Mac . Now I ham having issues getting the correct version of gcc for the M1 Mac -- I think I'll stick to Linux for the broadcom builds -- probably for all builds...

solar whale
#

There appears to be an issue with the arm compiler (aarch64) and rosetta on the m1 mac. I suppose I could try building gcc locally, but for me, it is not worth the trouble to resolve just for the broadcom ports.

tulip sleet
#

@onyx hinge if you are willing to approve #6117 (from future) then I can merge #6118 immediately after that. tnx

onyx hinge
#

@tulip sleet I'll take a look right now

tulip sleet
#

ty

lone sandalBOT
slender iron
#

black (formatter) failed

#

it reformatted adafruit_vl53l0x.py

#

ya, we have standard formatting

#

stylistic

#

vscode probably has a black extension you can install

#

it's a standard python formatter

#

🙂

timber mango
manic glacierBOT
#

Switch to GCC 11.2. Arm now releases it on a different page: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads

The builds are generated in a new way and the libraries have debug info. The compressed archive is 400+ mb vs <200 mb for the current version we use.

Stripping the libraries makes them smaller but breaks linking for some reason.

It looks like it also increases build size. So, we make way to make our own libraries compil...

idle owl
manic glacierBOT
viscid pine
#

@tulip sleet should i open a pull request to 7.2.x or is the backport note for yourself?

tulip sleet
manic glacierBOT
viscid pine
#

🍒

orchid basinBOT
slender iron
jaunty juniper
slender iron
#

thanks! we'll need an issue to fix it

manic glacierBOT
#

Hello! I am currently working with Arduino. Can you please tell me if it is possible to implement a Dynamic USB HID descriptor? The most convenient would be, for example, changing the USB HID descriptor when a certain pin is shorted to ground. I saw the following code on the Internet – and I understand that this is possible.
—————code———————-
`0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
0x09, 0x38, // USAGE (Wheel)
#ifdef ABSOLUTE_MOUSE_...

manic glacierBOT
#

CircuitPython version

adafruit-circuitpython-metro_m4_express-en_US-7.2.0
update-bootloader-metro_m4-v3.14.0

Code/REPL

boot.py:
mport board
import digitalio
import storage

# Metro M4 Express
switch = digitalio.DigitalInOut(board.D13)
switch.direction = digitalio.Direction.INPUT
switch.pull = digitalio.Pull.UP

# If the switch pin is connected to ground CircuitPython can write to the drive
storage.remount("/", switch.value)

code.py:
print("H...
manic glacierBOT
#

Pin D13 is connected to the red LED through a resistor, which is going to try to pull the signal to ground all the time. Pick a different pin that has no other connection.

You can get into safe mode by pressing the reset button when the NeoPixel is yellow. This is hard to do because of human reaction time, but a "slow" double-click reset can usually hit it. See https://learn.adafruit.com/welcome-to-circuitpython?view=all#circuitpython-7-dot-0-0-and-later-2978455-21.

orchid basinBOT
onyx hinge
#
GitHub

Cookiecutter template for Adafruit's CircuitPython libraries. - cookiecutter-adafruit-circuitpython/{% if cookiecutter.pypi_release in ['y', 'yes'] %}setup.p...

manic glacierBOT
#

Dan,

Thanks for following up! I apologize for not responding sooner.

I think I have convinced the device manufacturer to produce a version of
their firmware that conforms to the practice of sending a stop bit
following the write. This will solve my problem so I will not need to
convert my code from circuitpython to c++. You can close this issue now.

However, after my discussions with the vendor and review of other I2C
devices, I am less certain that it benefits circuitpython to enforce th...

manic glacierBOT
#

Thanks for the reply. As @ladyada mentioned:

we do this because linux kernel doesn't allow a write without a stop in a single call without a followup read. this way we can make sure drivers will work on linux as well as microcontrollers.

We did used to support full control of the stop bit, and found it that we had more support problems supplying it than not. People would write drivers that would sort of work, but not well, and not on Linux. So we made the capabilities adhere to the I2C...

tidal kiln
lone sandalBOT
manic glacierBOT
#
  • Fixes #6007.

  • Add reset for autoreload. De-request ticks.

  • Separate state a little more in autoreload.c

  • Rename some routines and variables.

  • Reset _tick_event_channel when ticks are disabled, in atmel_samd/supervisor/port.c

  • Add PYEXEC_RELOAD as a specific reason for a forced termination of code, instead of checking the exception.

  • Remove redundant settings of CIRCUITPY_AUTORELOAD_DELAY_MS.

The most vital changes are the autoreload reset, and perhaps the `_tick_event...

orchid basinBOT
manic glacierBOT
#

Dan,
Makes sense, thanks. I value the compatibility with Linux and I can
appreciate the burden of attempting to support non-compliant devices. This
is a good decision. Thanks for the explanation.
Cheers,
Dan

On Wed, Mar 9, 2022 at 9:23 AM Dan Halbert @.***> wrote:

Thanks for the reply. As @ladyada https://github.com/ladyada mentioned:

we do this because linux kernel doesn't allow a write without a stop in a
single call without a followup read. this way we can make sure d...

orchid basinBOT
slender iron
orchid basinBOT
manic glacierBOT
#

Ah thx. I've thought the provided source does already contain the fix.

Meanwhile i found another descriptor and can confirm working with a startech kvm switch 👍
Other USB functions like storage, midi, and cdc needs to be turned off.
I'm using Circuitpython 7.2.0

BOOT_KEYBOARD_DESCRIPTOR=bytes((
    0x05, 0x01,        # Usage Page (Generic Desktop Ctrls)
    0x09, 0x06,        # Usage (Keyboard)
    0xA1, 0x01,        # Collection (Application)
    0x75, 0x01,        # Report...
manic glacierBOT
manic glacierBOT
manic glacierBOT
idle wharf
# onyx hinge <@!382939733107408897> you were asking the other day about the 'version' marker ...

and @lone axle here's when @viscid pine added that SCM Version change he could likely advise on your libraries implementation of same.
https://github.com/adafruit/cookiecutter-adafruit-circuitpython/pull/146

GitHub

Improves #127
After a lot more reading of forums and github comments, I've figured out a way of munging in the version info at release time using some features of setuptools_scm.
This involves ...

viscid pine
#

wrong @ ? i dont know what this is

slender iron
#

wrong purple person 🙂

#

@onyx hinge did you do anything with the touchscreen on the s3 box?

onyx hinge
#

no I don't think I got that far

slender iron
#

kk, you got pretty far! it's nice that the screen comes up

viscid pine
#

it doesn't expose any usb

slender iron
#

yup, that's ok for C3. we'll have ble at some point

viscid pine
#

it's kind of cool, it's a c3 replacement for the esp8266 boards with the same pinout

#

lots of compatible carriers that it should work with

onyx hinge
#

@slender iron I don't think anything in particular stopped me from working on the touchscreen unless it was an i2c problem, is that how it's interfaced? I think i2c is better now

slender iron
#

ya, it is i2c. datasheet is under nda though 😕

#

but there is this source

#

that should be enough

manic glacierBOT
slender iron
#

@mental nexus may have looked into touchscreens too

slender iron
#

it'd be good to have a common interface for them

#

ah, found one

idle wharf
mental nexus
slender iron
#

cool cool. it looks like that driver will generate a bunch of dicts so it might be nice to have a non-alloc version in the future

#

I'll copy it for now

#

it looks like the touch chip is a tt21100

lone axle
tough flax
#

Check this out @slender iron and @tulip sleet

#

Got the boards today

#

One more

#

I have this one too bu I’m going to rework it to have a male jack instead of the pcb jack

tulip sleet
#

👍 👍

tough flax
#

Thanks for all the work on the usb host stuff.

#

I need to head home and watch all the streams

tulip sleet
#

scott is the one doing all of it (and Thach)

tough flax
#

Thank you @gentle bronze !

#

I love the way the host #bff works with only the one set of headers. So slim and tiny!

#

Easier to see with my hand for perspective

manic glacierBOT
manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 on 2022-02-24; AITHinker ESP32-C3S_Kit with ESP32-C3FN4

Code/REPL

from adafruit_ble.services import Service
from adafruit_ble.uuid import StandardUUID

class MyService(Service):
    uuid = StandardUUID(0xA000) # (0xA000 - my/Custom Service ID)
       
mySevice= MyService()

Behavior

Traceback (most recent call last):
File "", line 8, in
File "adafruit_ble/services/init.py", line 3...

manic glacierBOT
#

Hi, your mpconfigboard.h file is using tabs instead of spaces for some indentation. Please use only spaces, and make them line up. I think this is causing the formatting error mentioned in https://github.com/adafruit/circuitpython/runs/5491224618?check_suite_focus=true. You can check for this in your local repo by using pre-commit: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

wasn't sure what you meant by "convert them to bytes() before passing them down" Does it mean like on this line: https://github.com/FoamyGuy/circuitpython/blob/6a792ab373bff7e47adcaffaca02019506037f20/shared-bindings/wifi/Radio.c#L291

it would wrap that value in bytes() call like this?

common_hal_wifi_radio_start_ap(self, bytes(ssid.buf), ssid.len, bytes(password.buf), password.len, args[ARG_channel].u_int, authmode, args[ARG_max_connections].u_int);

Ah, OK, i...

slender iron
#

@tulip sleet what is your release plan? I think it'd be good to move to 7.3 after 7.2.1 is out

tulip sleet
#

if you feel the 1.18 merge is stable, etc., I wonder if I should even bother with 7.2.1.

tulip sleet
#

or go straight to rc

#

or one beta

slender iron
#

ya, I'd skip alpha

#

we haven't had any pre-releases on 1.18

#

so we should definitely do one

#

but I haven't personally had any issues

#

7.2.1 is basically ready after these backports afaict

#

so we might as well do it

tulip sleet
manic glacierBOT
tulip sleet
#

@slender iron should I make a 7.2.1-rc.0 or just do it? Main fix from my point of view is the auto-reload stuff

slender iron
#

I'd just do 7.2.1

#

that way we can also have a 7.3 beta

tulip sleet
#

then I'll make release notes and release it by tonight

slender iron
#

thank you

slender iron
#

@tough flax did you start the intellikeys pyusb code?

tough flax
#

No, I have Ella coming down for a visit and have been swamped... I got the PCBs and snuck in time for assembly 🙂

#

Very happy with the hardware though

#

I am thinking about installing the C-API version that you referenced just to see if the hardware works

slender iron
#

I've distracted him a bit from it requesting a lower level host api

#

his work for that is in the more-host-bare-api branch

idle owl
idle owl
#

You're welcome! First contribution to MicroPython 😊

tough flax
#

Thanks @slender iron

manic glacierBOT
slender iron
#

@lone axle I've got the start of a painter on touchscreen now

#

pleasantly responsive too

slender iron
#

thank you!

#

ok, I won't go crazy with mine. that looks neat

#

could be upgraded to bitmaptools

lone axle
#

It could use an adjustment for a maximum size maybe as well. PyPortal Titano has memory allocation error running it

tulip sleet
manic glacierBOT
#

I did find some information about wbits (putting it here for future reference if needed):

  • to (de-)compress deflate format, use wbits = -zlib.MAX_WBITS
  • to (de-)compress zlib format, use wbits = zlib.MAX_WBITS
  • to (de-)compress gzip format, use wbits = zlib.MAX_WBITS | 16

From https://stackoverflow.com/questions/3122145/zlib-error-error-3-while-decompressing-incorrect-header-check
(More information located there as well)

tulip sleet
#

@slender iron @onyx hinge fyi I found a regression in the autore-load fix in the proposed 7.2.1: it will not auto-reload during fake deep sleep. Fixing that, but that seems to reintroduce some of the other older problems. So no 7.2.1 tonight. I'll wait until next week.

manic glacierBOT
#

Hi, your mpconfigboard.h file is using tabs instead of spaces for some indentation. Please use only spaces, and make them line up. I think this is causing the formatting error mentioned in https://github.com/adafruit/circuitpython/runs/5491224618?check_suite_focus=true. You can check for this in your local repo by using pre-commit: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code

OKay will check now. thanks

onyx hinge
#

@tulip sleet I'm glad you found that before you shipped it. waiting a bit longer can't hurt.

manic glacierBOT
mental nexus
manic glacierBOT
orchid basinBOT
manic glacierBOT
slender iron
#

@tulip sleet where do you think the utf16 file should go?

tulip sleet
#

some but not all are submodules?

slender iron
#

I think submodules are in lib

#

shared isn't submodules

tulip sleet
#

the README states the purpose

#

i wasn't sure about readline, etc. but I guess those are copies

#

could be in shared/runtime

slender iron
#

I have it in shared-module/usb/utf16le.* for now

#

I hesitate to put it in an existing subfolder because it'd be better if they matched mp

tulip sleet
#

probably it will only get used in USB; I think there is also some UTF16 code in the USB device layer, but maybe it's in tinyusb

#

I remember writing something, but maybe it was in python for descriptor strings

slender iron
#

I offered to put it in tinyusb and thach didn't want it there

#

the outer function is mp specific anyway

tulip sleet
#

it could be a long-term thing, not a big deal

slender iron
#

I borrowed a bunch of the code from FATFS anyway

#

ok, I've at least split it apart now

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 (local dirty build) for ODT Branch ESP32-S2

Code/REPL

import board, busio, digitalio

cs = digitalio.DigitalInOut(board.D4)
cs.direction = digitalio.Direction.OUTPUT
cs.value = True

spi = busio.SPI(board.SCK, MISO=board.MISO) # SCK = GPIO35 MISO = GPIO37

while not spi.try_lock():
     pass

spi.configure(baudrate=5000000, phase=0, polarity=0)
cs.value = False
result = bytearray(4)
spi.readin...
manic glacierBOT
#

#6132 had a regression: when doing fake deep sleep, a write to CIRCUITPY waited until sleep was done instead of restarting immediately. I fixed this but still saw some flakiness.

After some cogitation, I reworked the basic logic of auto-reload. Instead of using ticks to count down a time before raising the reload exception, I raise the exception immediately, and then wait in main.c for the auto-reload delay, restarting the clock if new writes occur. auto-reload is also check in the fake/re...

manic glacierBOT
#

Where would we want to put the safemode.py? Next to code.py and boot.py et al?

I looked into implementing this, or at least starting to, and I quickly ran into a comment in main.py

     // Create a new filesystem only if we're not in a safe mode.
     // A power brownout here could make it appear as if there's                                                                               
     // no SPI flash filesystem, and we might erase the existing one.
manic glacierBOT
manic glacierBOT
#

This is in response to @tannewt suggestion in https://github.com/adafruit/circuitpython/pull/6074#discussion_r812309726

I believe I have set it up correctly (certainly the sequences match what we do in C++ and MP). One query though, what is the default background color meant to be?

As it currently stands with our config it is white, but that means that to draw black text with displayio I have to do label.Label(font, text=text, color=0xFFFFFF) which seems backwards, but I cannot figure...

tidal kiln
#

@lone axle ping. non-urgent CP text question.

lone axle
tidal kiln
#

hey. i seem to remember someone putting together some basic UI elements. like a text list, etc.?

#

essentially extensions of label, as i recall

lone axle
#

that one is like a wrapper around Label that takes care of some of the more specific details around text.

tidal kiln
#

cool. thanks. that might be it. let me take a look.

lone axle
lime trellis
#

Is there anything special to get CP to build with CIRCUITPY_UHEAP on the atmel-samd port?

#

just enabling it in the board definition causes conflicts with gc

tidal kiln
#

@lone axle sry. got distracted. thanks for the links! those look like what i was trying to remember.

manic glacierBOT
old smelt
# orchid basin

Thanks @gilded cradle . I saw this and then immediately forgot to comment. Anything you still need from me?

gilded cradle
manic glacierBOT
slender iron
#

should probably be removed

viscid pine
#

golfing a minimal asyncio example a bit:

import asyncio

async def printy(name, period):
    while True:
        print(name)
        await asyncio.sleep(period)

asyncio.run(asyncio.gather(printy("t1", 0.7), printy("t2", 1)))
#

gather automatically promotes to task, no need to create_task, gather returns an awaitable, pass that straight to run instead of creating a main func. Edit: turns out it isnt compatible with cpython

manic glacierBOT
lime trellis
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Thanks for the clarification. So the CircuitPy mini REPL that appears on screen should be classic terminal style of white text on black?

I'll get that inverted then. A related question, how can I easily draw a white background from python code with display IO? I found some guides but it suggested that the only way to do it is to create a white bitmap that is then shown to the screen, but if feels like there's got to be a simpler way. Maybe I've been spoilt by our freedom with the custom Mi...

manic glacierBOT
#

@ZodiusInfuser AFAIK the way to make a blank white screen with displayio is to make a white something and add it as the first element in the group that you show() on the display, you could then stack more things on top of it.

There is some flexibility with what the white something can be though... It could be a Bitmap that is the same size as the display filled with white pixels. Or it could be a Bitmap that is an even multiple smaller than the display and then use the Group objec...

mental nexus
#

I’m just starting to evaluate the ESP32-S3 for driving RGB LCD displays. I’ve hacked the lcd RGB esp-IDF example code to strip out the LVGL parts and just draw a colored square “bouncing” along the screen.

I’m struggling to understand how all the timing works for defining each frame.

In my code, I use esp_lcd_panel_draw_bitmap to draw my colored 50x50 pixel box along its motion path inside a while True loop. What appears to be happening is that each frame draws just one new position movement of the box (move by x and y by 1 pixel each). It seems like I can only get one draw_bitmap call in each frame. That doesn’t seem right to me, I suspect something must be blocking to prevent multiple draws in a frame.

I expected that this box would fly around the screen since the while loop would be updating much faster than the frame rate. But alas it’s not the case. Any suggestions on how to understand the sequence of events of queuing up several calls to draw_bitmap and have them all happen before the next frame?

Frame rate is about 12 fps on an 800x480 display, it’s a start.

https://github.com/espressif/esp-idf/tree/a8ba5a0264d50f9aadd79838e2672a2828704770/examples/peripherals/lcd/rgb_panel

#

There is a call back function in the display configuration but I’m not exactly sure how to use it.

  • .on_frame_trans_done

Can I do a bunch of bitmap drawing and then trigger the next frame? Do I have to do all the work in the callback routine?

orchid basinBOT
#

Let me explain my rationale for these proposed changes.

Since the vast majority of CircuitPython, its docs, and supporting boards are products of Adafruit, I feel it would be useful to describe how this board differs from common expectations of those Adafruit boards, to prevent accidental assumptions. Ex: if a project for some reason requires green light, it could be handy to know that isn't included, not even via an RGB LED; AFAIK that LED color is not actually documented anywhere, not...

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 on 2022-02-24; Adafruit MagTag with ESP32S2

Code/REPL

#
# MagTag date and time circuitpython script
# modified by @Paulskpt
# Version of 2022-02-08
#
# MAGTAG flashed with CircuitPython version:
# Using library files from:
#    a) https://github.com/adafruit/Adafruit_CircuitPython_Bundle/adafruit-circuitpython-bundle-7.x-mpy-20220208.zip and from
#    b) https://github.com/adafruit/Adafruit_CircuitP...
orchid basinBOT
manic glacierBOT
#

CircuitPython version

CircuitPython 7.2.0 on Raspberry Pi Pico RP2040

Code/REPL

Pull directly from the RFM69HCW tutorial on your website.  Code adapted to use the Pico pins

# SPDX-FileCopyrightText: 2018 Tony DiCola for Adafruit Industries
# SPDX-License-Identifier: MIT

# Simple example to send a message and then wait indefinitely for messages
# to be received.  This uses the default RadioHead compatible GFSK_Rb250_Fd250
# modulation and packet for...
manic glacierBOT
#

I think I found the problem of the OSError -2. I let the MAGTAG connect to a WiFi extender. I just went to the livingroom where is the router of the ISP. I let the MAGTAG connect to the WiFi AP of that router. It worked! I have to do more investigation why the MAGTAG has problems with the WiFi extender. For the moment I close this issue.

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.3.0-alpha.0-38-g862210b3f-dirty on 2022-03-13; Adafruit Trinket M0 with samd21e18

Code/REPL

import asyncio
async def foo(bar):
  print("foobar")

Behavior

Traceback (most recent call last):
  File "code.py", line 2
SyntaxError: invalid syntax

Description

I managed to squeeze asyncio into a fw build for the trinket_m0 using `FROZEN_MPY_DIRS += $(TOP)/../Adafruit_CircuitPyth...

manic glacierBOT
manic glacierBOT
manic glacierBOT
mental nexus
# mental nexus There is a call back function in the display configuration but I’m not exactly s...

Digging into the esp-IDF source code a bit more, I’m beginning to suspect that the draw_bitmap code triggers a new frame update. https://github.com/espressif/esp-idf/blob/a8ba5a0264d50f9aadd79838e2672a2828704770/components/esp_lcd/src/esp_lcd_rgb_panel.c#L337. I guess I’ll need to brush up on semaphores to understand how to hack this code to update several different regions before triggering a frame update.

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.0 on 2022-02-24; Adafruit MagTag with ESP32S2

Code/REPL

import analogio
import board

battery_value = (analogio.AnalogIn(board.BATTERY).value / 65535.0) * 3.3 * 2

Behavior

It seems the battery voltage calculated from the code is longer correct in CircuitPython 7.2.0 (code based on https://github.com/adafruit/Adafruit_CircuitPython_MagTag/blob/main/adafruit_magtag/peripherals.py).

Using 7.0.0 ...

manic glacierBOT
#

I’ve been poking around with the example code and removing the LVGL parts so that I can directly manipulate the calls to draw_bitmap.

Unfortunately based on my testing and some code review, I think that the function esp_lcd_panel_draw_bitmap only provides for transfer of one bitmap for each frame. I don’t think this is adequate for CircuitPython since it draws several rectangles of data in the [_refresh_area function](https://github.com/adafruit/circuitpython/blob/f13d2187498974a6f5...

manic glacierBOT
#

Afterburner: the error AttributeError: 'WiFi' object has no attribute 'get_mac_address' is very probably caused by the fact that the latest version of CircuitPython (5.2.0) has inside a class with the name 'WiFi'. To avoid this AttributeError (and other unwanted errors) I made the following name changes:

a) change folder name '/lib/adafruit_portalbase' into '/lib/adafruit_portalbase_psk';
b) change the filename '/lib/adafruit_portalbase/wifi_esp32s2.py' into '/lib/adafruit_portalbase/w...
manic glacierBOT
onyx hinge
#

https://nedbatchelder.com/blog/202203/dinghy_digests.html neat looking tool, should try it on circuitpython related repos

manic glacierBOT
manic glacierBOT
#

https://user-images.githubusercontent.com/33587466/158075273-1390c44d-9db9-4ff0-889d-67bf2e040df3.MOV

I broke it into three chunks and it’s doing better but not exactly what I wanted.

I have a loop doing 100 “copy” to the buffer before calling “finish”. It appears to operate smoothly during the “copy” phase but stutters at the “finish” phase. Periodically the code will crash due to CPU0 watchdog timeout and cause the processor to restart.

I currently have serial debug statements t...

jaunty juniper
#

is this worth addressing ?

>>> rainbowio.colorwheel(-10)
-7680
manic glacierBOT
#

TileGrid.setitem enforces, but does not document, a limitation to 255 tile elements.

This limitation is not great for my needs, but the failure to document what's going on, or provide a more informative error message, led to a merry hour of debugging. TileGrid also doesn't allow introspection in any way of how many tiles are available to be addressed, so I was extremely conf...

tulip sleet
jaunty juniper
#

pypixelbuff and Blinka do:

    if pos < 0 or pos > 255:
        return 0, 0, 0
tulip sleet
#

it would be fine to fix it. the >255 check is already a recent fix.

jaunty juniper
#

what would be the preferred fix ? black below 0 and % 256 above ? (add return 0 if < 0 in builtin rainbowio)

onyx hinge
#

Personally I wish it worked for any number like sin.. though if it runs into trouble after 224 or 230 that's less ideal and it's "good" to cause the user to think about what happens after 255.

jaunty juniper
#

I would prefer just using % 256 which works great in python for negative numbers too, but how much more complex is it for the C code, that had to be trimmed down to fit ?

viscid pine
#

&255?

onyx hinge
#

That work s for negative numbers, good call

tulip sleet
#

should they be more consistent (and is % more useful?)

jaunty juniper
#

yeah, I noticed the discrepancy when posting code for blinka in the forum and was about to submit a PR to blinka when I noticed the negative numbers issue in the builtin module

#

I like the time trick for a rainbow animation for its simplicity but had to add a % 256 on blinka
colorwheel( time.monotonic() * some_speed_factor )

tulip sleet
#

I would say we could modify blinka and pypixelbuf to do the modulus. It's more useful. I doubt if any example relies on out-of-range going to (0,0,0)

manic glacierBOT
#

https://user-images.githubusercontent.com/33587466/158093649-7e73fd0a-fec6-4854-924a-b45b0bb5d2b0.MOV

It turns out you just need to call lcd_ll_start once and then you can keep writing away to the display buffer to your heart’s content. I added vTaskDelay(pdMS_TO_TICKS(10)); to prevent the crashing.

(So far I’ve hacked into the ESP-IDF and changed some of the structure to accommodate these drawing functions. I’ll eventually need some guidance how to make it into a standalone packag...

manic glacierBOT
manic glacierBOT
manic glacierBOT
#
[adafruit/circuitpython] New tag created: 7\.2\.1
orchid basinBOT
proven garnet
#

Does displayio.FourWire.send() accept a str as the data argument? It's typed as circuitpython_typing.ReadableBuffer but I saw recently that str happens to implement that protocol but is not behavior that is intended. Should the argument be typed as a Union or should libraries (I think I see one) that use a str (it's typically a blank string) be changed to b""?

stuck elbow
#

I think it doesn't care internally, it just takes the bytes from the memory

#

you could also use an array

tulip sleet
#

since that's not true for CPython (regular Python)

manic glacierBOT
#

displayio.FourWire.send() accepts str for data argument despite being type annotated as circuitpython_typing.ReadableBuffer. Should the fix be:

  1. Type the argument as Union[circuitpython_typing.ReadableBuffer, str]
  2. Change implementations of displayio.FourWire.send() to use valid circuitpython_typing.ReadableBuffer

For what it's worth, I've only seen this in display libraries that use a blank string "" as the data argument, so it may be a special case? Examples:
...

proven garnet
manic glacierBOT
onyx hinge
# tulip sleet Make it `Union[ReadableBuffer, str]` since that's the most correct. The type-che...

@proven garnet @tulip sleet The other position to take would be that the type annotation gives the "ideal" types, even if a relaxed type check within CircuitPython means that specifying some other type today (str) is not rejected. It's not "here's all the things that in fact work today", it's "here's the contract we make about what types will work now and in the future; and what types need to work in an alternate implementation, such as blinka".

tulip sleet
#

the previous case of this were SSID and password in wifi.radio, and there it seems quite fine to take str's. For displayio.FourWire.send(), it makes sense to only take buffer protocol, since you really want bytes. But if we don't change our examples not to use str, or validate the argument not to use str, then there's a case where it works, but not as documented (too permissive).

lone axle
#

Good day to all <@&356864093652516868> 👋 The weekly meeting will begin in about 1 hour and 10 minutes in the CircuitPython voice channel here on Discord. If you're participating please add your notes to the document: https://docs.google.com/document/d/1I8mIuR4dXWFDHa32M216Mh_Nj655kqJh2MeRtj4GpLU/edit?usp=sharing

proven garnet
#

I don't know much about the core so I don't know what the likelihood or reason that behavior would change, but if it would, maybe it makes sense to futureproof it?

#

(fix libraries using str as opposed to fixing typing to include str that happens to work right now)

tulip sleet
#

that would be an incompatibility with micropython

#

we need it internally because there is a lot of shared code betwen strs and bytes, but we could prevent memoryview from taking a str, etc.

stuck elbow
#

what would be the advantage of doing that, in practical terms?

tulip sleet
#

only preventing incompatibility with CPython

#

e.g. memoryview(str) in CPy/MPy provides access to the raw UTF-8 bytes, not possible in CPython

idle owl
#

@lone axle Are you still available after the CP Weekly to work with Eva and I for her to teach us about Adabot patches?

idle owl
# lone axle Yep, I am.

Ok, excellent. We'll start after you do the post-meeting whatnot. So let me know when you're done.

proven garnet
onyx hinge
#

Added!

idle owl
#

Thanks Jeff!

onyx hinge
#

@candid sun you might have to close out and re-open the voice channel with the added role

#

maybe do a mic check before recording starts

candid sun
stuck elbow
#

lurking

turbid radish
#

lurking

stuck elbow
#

meow

blissful pollen
#

lurking today, didn't have any updates

mental nexus
#

🐕‍🦺 🤷

turbid radish
#

I have a dog too

stuck elbow
#

leave cat and dog notifications enabled

turbid radish
#

Yay Paul!

random junco
#

thanks. 🙂

turbid radish
#

Joined last week

#

It's recorded

minor plume
#

The Apoca-pi Now is proof that anything worth building is worth over-building. 🙂

turbid radish
#

Tag on Twitter & email please

idle owl
#

🎉

candid sun
#

yay! glad it was helpful 🙂

random junco
#

Liz's guide made me go dust off my electric piano

#

thanks LIz!

blissful pollen
#

Good problem: always too many things to want to learn and explore.
Great solution: lots of guides help you get up to speed fast!

slender iron
#

🎉

idle owl
#

🎊

turbid radish
#

yay liz

blissful pollen
#

Congrats @candid sun ! Super exciting

candid sun
#

thank you all!

minor plume
#

Congrats @candid sun !

candid sun
#

that would be awesome @onyx hinge

stuck elbow
#

great to see you here @candid sun!

random junco
#

Joining Adafruit on Pi Day will make it easy to remember you work anniversary. 🙂

idle owl
onyx hinge
#

And if you're going to be at pycon, please feel free to open a DM or otherwise chat with me if you are interested in meeting in the hallway track. I will be there the conference days but will leave as the sprints get started.

idle owl
#

Melissa and I will be attending the day before the conference (Education Summit), and through the Sprints. Feel free to message me as well if you'll be attending PyCon 2022!

onyx hinge
#

@idle owl wow what a coincidence. want to get together while we're there?

turbid radish
#

Thanks @minor plume for your contribution to the newsletter and for broadcasting your making

random junco
#

I hope to cross PyCon off my bucket list next year

blissful pollen
minor plume
#

I hope to be able to attend PyCon next year too...but it's hard to think that far into the future when the world still feels so uncertain right now.

onyx hinge
#

I've been to one PyCon (2002? a looong time ago, I think it was the inagural one) and one PyOhio (2019). Good experiences.

#

hope to make pycon a more regular feature of my life while i'm working on CircuitPython, which I have no plans to stop

stuck elbow
#

travelling to events feels so unreal now

minor plume
stuck elbow
#

i will be running circuitpython workshops on EuroPython this year

random junco
#

when is EuroPython?

onyx hinge
#

July 26 - Aug. 1, 2021

random junco
#

Thanks

stuck elbow
onyx hinge
#

@mental nexus curious how many/any I/Os are left after connecting to the lcd & touchscreen

idle owl
#

Congrats @mental nexus!

stuck elbow
#

July 11-17th 2022; Dublin

onyx hinge
#

hah just noticed I pasted 2021 info headdesk

blissful pollen
#

Getting your first PCB is a real awesome feeling @mental nexus good job!

random junco
#

I could have hit Google, too. 🙂

mental nexus
#

And plus I’ve left the USB pins free (19 and 20)

mental nexus
#

Oops and one in my six is the Boot button so I think one must be cautious with that one.

mental nexus
jaunty juniper
#

I was surprised of the big changes made to remove so-called "marketing statements"

onyx hinge
#

I suspect micropython deliberately made trade offs that are different than ours, but I wouldn't call it "lazy".

#

🥧

random junco
#

@idle owl When is CircuitPython day again in 2022? I can't find my notes (sorry!)

turbid radish
#

please subscribe!!

turbid radish
#

Tell your friends and others to subscribe too

onyx hinge
#

@turbid radish can we make subscriptions for our cats and dogs, or is it just for people?

random junco
#

thanks. I just noticed earlier today that the 5 year anniversary of the 1.0 release is this July

turbid radish
#

Anyone with an email address

#

Thanks all!

onyx hinge
#

thanks tim!

mental nexus
#

Thanks all!👋

random junco
#

thanks foamyguy!

gilded cradle
#

Thanks everyone

candid sun
#

thanks everyone! and great job hosting @lone axle !

turbid radish
#

Thanks

mental nexus
tidal kiln
#
Adafruit CircuitPython 7.2.1 on 2022-03-14; Adafruit Matrix Portal M4 with samd51j19
>>> from adafruit_ble import BLERadio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "adafruit_ble/__init__.py", line 21, in <module>
ImportError: no module named '_bleio'
>>> 
#

am i missing something?

slender iron
tidal kiln
#

@slender iron thanks.

Adafruit CircuitPython 7.1.0 on 2021-12-28; Adafruit Matrix Portal M4 with samd51j19
>>> import _bleio
>>> 
#

does it need to be put back in?

slender iron
#

yup

tidal kiln
idle owl
#

This reload thing is awful. This over and over while copying libs to the board. Ended with it working, apparently.Auto-reload is on. Simply save files over USB to run them or enter REPL to disable. code.py output: Traceback (most recent call last): File "code.py", line 7, in <module> RuntimeError: Corrupt .mpy file

slender iron
#

@idle owl what board are you on?

idle owl
#

Feather RP2040.

slender iron
#

k, I can try it once I'm done with email

idle owl
#

Ok

slender iron
#

dan will likely see this once he's back from his meeting too

idle owl
#

Yep.

tulip sleet
#

i just got out of a non-work meeting

idle owl
#

No worries

tulip sleet
#

it's supposed to stretch out the restart time

#

that is not the way I want it to work

#

@idle owl which board are you trying?

idle owl
#

Feather RP2040

manic glacierBOT
#

CircuitPython version

Adafruit CircuitPython 7.2.1 on 2022-03-14; Adafruit Matrix Portal M4 with samd51j19

Code/REPL

import _bleio

Behavior

Adafruit CircuitPython 7.2.1 on 2022-03-14; Adafruit Matrix Portal M4 with samd51j19
>>> import _bleio
ImportError: no module named '_bleio'
>>>  

Description

see above

Additional information

Introduced here:
https://github.com/adafruit/circuitpython/pull/6043

Needed to use ...

tulip sleet
# idle owl Feather RP2040

are you using pycharm as the editor, on Mac? I don't see repeated reloads on Linux with emacs or circup

#

I will try it on the Mac

idle owl
#

PyCharm.

#

And iTerm 2, and tio.

#

Finder did it too though.

#

So maybe it's a MacOS issue.

tulip sleet
#

yes, I'm firing up a Mac to try

#

are you copying libraries just via command line?

idle owl
#

No, Finder.

#

From a downloaded folder to CIRCUITPY

lone axle
#

Here is the notes document for next Monday’s CircuitPython Weekly meeting. It is at the normal time of 11am Pacific / 2pm Eastern here on Discord. Everyone is encouraged to attend! Please add your hug reports and status updates even if you’ll be attending the meeting - it’s super helpful! If you are unable to attend but would still like to include updates, feel free to include them in the notes and we’ll read them off during the meeting. Hope to see you there! <@&356864093652516868>
https://docs.google.com/document/d/1oq50yQiocKcPcGAHEyFuRJqNOz5ipXDD62D0aPNctq8/edit?usp=sharing

random junco
#

I don't know if it helps, but I can reproduce the issue on macOS

tulip sleet
#

which issue?

#

repeated auto-reloads?

random junco
#

yes

#

sorry, should have been more specific

tulip sleet
#

I am trying it with Mu - I see two auto-reloads (not 4)

#

I am using an M1 Mac Mini

#

I will instrument the restart loop for myself to see what is going on

idle owl
#

This is what happens when I edit this code: ```0.489988
0.519988

Code stopped by auto-reload.
soft reboot

Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:

Code stopped by auto-reload.
soft reboot

Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:

Code stopped by auto-reload.
soft reboot

Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:

#

That last one finally lets me do something.

random junco
#

I'm on an M1 Macbook, and I copied a font to my feather, and it did it 6 times it looks like, just like Kattni above

idle owl
#

I'm also on M1.

tulip sleet
#

the way the code is written, if the writes are <0.75 seconds apart, it should not restart multiple times

#

so I will verify that

lone axle
#

@idle owl okay, post meeting things are wrapped up. I am ready any time.

idle owl
#

@lone axle Ok, BRB, refilling water. Then we can get going.

manic glacierBOT
tulip sleet
random junco
#

Finder

tulip sleet
#

I am copying Arial-12.bdf to the drive. On Linux, I get one autorestart. On MacOS, in the shell, I got two

idle owl
#

Become a user, Dan. Use .... Finder....

manic glacierBOT
tulip sleet
hidden oxide
slender iron
#

it may be the metadata writes that apple/finder does

tulip sleet
#

it seems to be worse with the RP2040. I tried an ESP32-S2 and a SAMD51 on Mac and I am not seeing multiple restarts

slender iron
#

maybe writes take longer on rp2040?

tulip sleet
#

Yes, I may just need to stretch the 0.75 seconds. XIP and writes are getting in the way of each other

#

maybe

slender iron
#

it has aggressive interrupt disabling while writing flash that may have delayed supervisor_ticks before

tulip sleet
#

that would make a lot of sense

#

We are having dinner guests in a couple of hours and I have to cook. I will do some more work on this later.

slender iron
#

so you .75 measurement is truer than before

#

want me to take a look?

#

aka, increase the reload time on rp2040?

tulip sleet
#

if you'd like, sure. I did try the RP2040 on Linux and it doesn't seem as bad, so there may be multiple writes: all the junk files macOS writes

slender iron
#

yup, that's my guess too

#

I'll take a look shortly

#

7.2.2 can have this tweak plus re-enabling bleio on matrix portal

tulip sleet
#

ty!

slender iron
#

np

manic glacierBOT
idle owl
#

@lone axle I moved the if START_TIME: indentation out one, and it works now. 🙂 I realised what might be happening, and that fixed it. I'll submit a PR to your repo!

#

@slender iron Reload using ctrl+D does not reload a bunch, only once. Same out of the REPL using CTRL+D

slender iron
#

that's good 🙂

#

I suspect we just need to increase the timeout for reloads on the rp2040

idle owl
#

Oki

slender iron
#

(I'm distracted now trying to test my esp change)

idle owl
#

No worries, simply wanted to let you know I had more data.

slender iron
#

ty

manic glacierBOT
idle owl
#

@lone axle Turns out you can't set brightness on a single pixel. So, my code isn't doing what I wanted it to. Debating between leaving it with both keys pulsing, trying to figure out another way to do it, or using the LED Animation library.

#

I wanted only the time-start key to pulse.

lone axle
#

Ah, I discovered recently that Dotstars can do individual brightnesses. Hadn't known the differences before.

idle owl
#

Interesting.

#

I wonder why.

#

Maybe I'm doing it wrong. 😄

#

I was trying to do pixels[1].brightness which failed.

blissful pollen
lone axle
#

For neopixels one option for "lower brightness" would be to use a color closer to black. i.e. 0xff0000 is full bright red, but 0xaa0000 is less bright red. It may get convoluted if you are attempting to puslse it up and down for a fade in / out effect though so maybe isn't the best solution for that.

idle owl
lone axle
#

ATMakers Bill ended up finding code in the core I think as well that referenced the same behavior. There should be a link and brief discussion somewhere in the #live-broadcast-chat history if you're interested in going deeper through what we found.

blissful pollen
#

I always used what you just said change the value from 0x00 to 0xFF but will have to take a look at the dotstars thanks

proven garnet
#

Anybody have a SharpMemoryDisplay? Would love some help on quickly testing a PR for the library!

idle owl
#

@lone axle Called in a loop, but it doesn't update: pixels[1] = (0, (g + 1) % 255, (b + 1) % 150) What obvious thing am I missing? Is that not how % works? 😄

#

Now that I think about it, it's not going to be the right color anyway.

#

it will for part of the time. But never again after that.

#

If they're updating at the same speed anyway.

#

I could change it to straight up cyan, which might make this simpler. But I'm still not sure how to do this.

lone axle
#

Ah, it looks to me like if g and b are incrementing it would work as far as I can tell. Only gotcha I can think of is probably need some time.sleep() or some way to slow it down some, by default it might iterate so fast that it's difficult to see the changes.

idle owl
#

b/g are 0 before the while loop.

#

I have time.monotonic() around it.

#

In the loop. That's how I timed the pulsing before.

#

It's not iterating though, afaict.

#

Printing (b, g) is (0, 0).

blissful pollen
#

Maybe it's my lack of python knowledge but isn't g and b not incrementing? you're just adding one to them

idle owl
#

Shouldn't they add 1 255 times?

#

And actually overflow at that point because I haven't added the "if 255, to back to 0" code.

lone axle
idle owl
#

Either way, it's not even adding 1. They're set to 0 before the loop, and it prints 0 after that pixel line in my code.

#

That's what I thought... ok..

lone axle
#

can you drop it into a gist? I can take a look in context and see if anything jumps out

idle owl
#

This seems like something I'm trying to do simply, and maybe it's not so simple.

#

Sure!

#

I guess it could all be under one if now because indentation changed.

#

Updated that. Still doesn't work, but at least it's not redundant.

#

Also going to have to not leave this plugged in or I'm going to be sending timestamps to random things when I get distracted and start pressing toebeans. 😆

#

FWIW, I tried the LED pulse line outside of the if in only the while True: and it still didn't do anything.

#

I also understand this would only pulse up. I was going to tackle the other direction once I got this working.

lone axle
idle owl
#

Oh hmm.

#

OK

#

trying it

#

There it is!

#

And it loops properly.

blissful pollen
#

ya sorry that is what i was (badly) trying to say earlier 🙂

idle owl
#

Wait, no it doesn't....

#

😂 It's up to 721 by now.

#

It was a soft reload that made it look right.

#

Do I put the % in the loop outside the pixel line?

lone axle
#

it will probably be blinking from full bright to full dark if I understand correctly. And "fading" up from full dark to full bright.

idle owl
#

Yep

#

Oof. Autoreloaded on 253 🤦🏻‍♀️

#

Oh!

#

Code is working, print is incorrect.

#

Alright.

lone axle
#

in order to fade back down instead of blink you can use b -= 1 and g -= 1 but you'll also need some logic to tell it when to do which. I would probably make a new boolean fading_up or something and set it to true for increasing and then false once it reaches 255 to start the decrementing. And set it back to true once it reaches 0. At that point you could also get rid of the modulo as well I think.

idle owl
#

Right.

#

Oh true, re: modulo.

blissful pollen
#

you can use like b = (b + 1) % 255 and remove any long term overflow possibility (which would take forever to hit)

idle owl
#

Ok

slender iron
idle owl
#

Nope.

#

Check the gist above, that's the basic code I'm running. (Modified now, but I'll update it in a minute.)

slender iron
#

ok, one thing I'm seeing is that the autoreload delay only applies if code.py was interrupted

idle owl
#

Like by me hitting save? Also when it decides to auto-reload on its own, it reloads a bunch of times. But once every 10 times, it's fine.

slender iron
#

hrm. I'll definitely get my mac out to try it too

tulip sleet
# slender iron ok, one thing I'm seeing is that the autoreload delay only applies if code.py wa...

The autoreload flag is checked in the sleep loop, because that's fake sleeping (even though the VM is gone), so that it will autoreload immediately if sleeping. But yes, it should have the delay loop there too, in case there are multiple writes (which there will be). So I bet it's restarting immediately, and then it falls into the actual running check. So need to factor out the delay loop and call it two places, I guess.

slender iron
#

I'm thinking it might be clearer to have the global just be the last write completion time

tulip sleet
#

i was thinking of that too, but I was a little worried about the cache

orchid basinBOT
tulip sleet
#

the cache is flushed explicitly on VM exit, but maybe not on VM entry

slender iron
#

seems like flushing on vm entry could be good too

tulip sleet
#

since the ticks are uint_64, it can't be an atomic volatile. so maybe need to make setting it be non-interruptible.

slender iron
#

or we add some 32 bit tick math

tulip sleet
#

instead of being a global, it could be a few routines in reload.c that you call to set and check or get it

idle owl
#

@lone axle I got it working, but it flickers every so often, and when it does, both LEDs flicker, not only the one being pulsed. No consistency on the flickering. When it does, it's a single flicker every so often. Gist updated.

#

Initially the flickering was because it was hitting -1 or 256, but I fixed that.

#

Flickering is not consistent though. It's not happening right now. 🤷🏻‍♀️

#

The only issue I can foresee with this is if the reloading is this finicky, it's going to lose its elapsed time on reboot. But hopefully that's resolved soon 🙂

#

I'm not about to figure out how to save the elapsed time in nvm or whatever the right term is. 😄

lone axle
idle owl
lone axle
#

will do

orchid basinBOT
thorny jay
# orchid basin

I also made similar suggestion for the learn guide to try to have both ESP32-S2 QT Py more equal even if one came later.

slender iron
#

@idle owl around still? want to try what I have now?

#

I haven't tried it on my mac yet though

idle owl
#

Yes, and very yes!