#circuitpython-dev

1 messages ยท Page 96 of 1

manic glacierBOT
#

Have you tried changing the repeat count value? I do this in my board.c for the Pimoroni Badger2350 which also uses a SSD1680. The repeat count has an effect on contrast and also on update speed (it basically changes the number of times the display "flashes" during update). The implementation allows the user to change this at runtime.

During development, I tried all kinds of waveforms: from the Adafruit-driver, from Wasveshare and from Pimoroni. It seems like VCOM is not the only thing t...

manic glacierBOT
manic glacierBOT
#

I have an M5Stack Core2 and tried to flash the latest CircuitPython images, namely 10.2.0, 10.3.0-alpha1, and 10.1.4 - all of them resulted in a boot loop right after the output Serial console setup:

Serial console setup
ets Jul 29 2019 12:21:46

rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0040,len:496
load:0x40078000,len:14128
load:0x40080400,len...
manic glacierBOT
manic glacierBOT
#

the linked build results in boot loop, too.

I tried to find a board with similar MCU on the downloads page, and tried the "TTGO T-Display ESP32 16M by [LILYGO]" one - this doesn't enter the loop after flashing the 10.2.0 image:

Serial console setup
Adafruit CircuitPython 10.2.0 on 2026-04-22; LILYGO TTGO T-DISPLAY v1.1 with ESP32
Board ID:lilygo_ttgo_tdisplay_esp32_16m
UID:8712486A80C3
MAC:5C:F0:FC:3F:50:2E

Auto-reload is on. Simply save files over USB to run them or enter REPL to disa...
stuck elbow
manic glacierBOT
#

CircuitPython version and board name

`adafruit_feather_esp32c6_4mbflash_nopsram` builds from main starting at this commit https://github.com/adafruit/circuitpython/commit/45fecd285a908632f7f32c6973ac4baf27ecd480

Builds from commit: https://github.com/adafruit/circuitpython/commit/64c736ff4a269a45a40fc47b43c5aeef56a54fbe and earlier do not have same problem.

Code/REPL

N/A, bootloop before CircuitPython launches

Behavior

Serial port is printing this...

#

The startup code for this board is quite complicated: https://github.com/adafruit/circuitpython/blob/main/ports/espressif/boards/m5stack_core2/board.c.

The way to debug this would probably be to make a debug build and look at the log output, and/or divide-and-conquer on the startup code and settings. It will be on our list. If you make builds yourself already you could try some of these things.

Also I'd do a bisect with versions between 10.0.3 and 10.1.4 to find which version transition sta...

manic glacierBOT
#

Made some good progress with test patterns and weather example has improved. It is more crisp and the contrast is close. Still some speckle noise.

Thoughts?

<img width="480" height="611" alt="IMG_0329 (1)" src="https://github.com/user-attachments/assets/0dc9eb75-649b-4e46-a6cf-1f099fcc332d" />
<img width="480" height="601" alt="IMG_0330" src="https://github.com/user-attachments/assets/e63d606e-780d-4f21-9144-3e30cf15791a" />

<br>

Made changes to support both 0x44 and 0xca with t...

lone axle
#

@tulip sleet re: esp32c6 issues. Do you know if the firmware.bin that comes from a CircuitPython build includes the bootloader? Or is a separate process needed to get/flash bootloader.bin?

#

I am troubleshooting a bit further with help from claude and it sounds like perhaps the bootloader may have changed between 5 and 6, possibly I am ending up with the old bootloader still. I am not certain how to confirm or rule that out though.

manic glacierBOT
tulip sleet
#

there is only the ROM bootloader

#

i think I tested with an artifact from the 6.0.1 PR, except that it was 6.0.0 at that time. It's hard to search the Actions results

#

about to be afk

#

but I could have tested with the wrong thing

lone axle
silver tapir
#

I know you said you are about to wrap it up, but I do have a C6-DevKit and can load the firmware if it would be helpful. This one does have the two usb ports.

lone axle
#

I'll try to make a DEBUG=1 build real quick and post it here.

#

@silver tapir Do you know if you have n4 or n8?

#

Ah this might be tricky actually. debug build overflowed

silver tapir
#

It's the devkitc, so I would guess n8

#

Can't remember how to flash the devboard, I had to do something with this jumper...

lone axle
#

I am not sure how to flash it though, haven't messed much with the devkit boards.

silver tapir
#

I did managed to write the firmware with esptool, but now I don't get any output on any of the serial interfaces.

tulip sleet
#

I'll work on this. I thought it was ok.

manic glacierBOT
#

I can verify that the format code worked for me.

Feather RP20450 + 512MB XTSD

import storage, sdcardio, busio, board

spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
sd = sdcardio.SDCard(spi, board.D5)
storage.VfsFat.mkfs(sd)
sklarm@ciao ada % diskutil info /Volumes/NO\ NAME | grep -E "File System|Type \(Bundle\)|Name \(User"
   File System Personality:   MS-DOS FAT16
   Type (Bundle):         ...
manic glacierBOT
#

Whether FAT12, FAT16, or FAT32 is used depends only on the number of clusters (cluster size may vary):

From https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/fatgen103.doc, page 15:

This is the one and only way that FAT type is determined. There is no such thing as a FAT12 volume that has more than 4084 clusters. There is no such thing as a FAT16 volume that has less than 4085 clusters or more than 65,524 clusters. There is no such thing as a FAT32 volume ...

manic glacierBOT
#

I narrowed it down even further. The version 10.1.0-beta.1 works, but 10.1.0-rc.1 doesn't. The difference between these two tags in ports/espressif/boards/m5stack_core2/board.c are at the display initialization from this commit: https://github.com/adafruit/circuitpython/commit/de4311396203ef1e0bb11d9ea3ecefef0c54903d#diff-c5e6ff2eb80c3e02167304b053d79f113ee657ff13a3f02fa34955d2c779b070

manic glacierBOT
manic glacierBOT
#
  • Fixes #10993.

common_hal_fourwire_fourwire_construct() was changed in #10783 to take objects in general rather than only pin objects. If the rdisplay reset pin was not present, it expected mp_const_none, not the previous NULL or MP_OBJ_NULL (both are zero). This caused a crash on all boards that did not use a reset pin for the display.

Thanks @oenone for tracking down the exact commit, which made the diagnosis easy.

manic glacierBOT
#

I'm up for putting together a short microSD Optimization with CircuitPython guide. I need permission for this from @ladyada .

The goal would be best practices microSD usage with CircuitPython to avoid slow unwanted slowdowns.

  • Card size selection
  • FAT 12/16/32 cluster / lookup table differences
  • Disabling MSC (CircuitPython)
  • Disabling Host OS plug-in scanning (macOS, Linux, Windows)
  • SDIO vs SPI
  • SPI Max Freq
  • Card performance
  • mkfs formatting
manic glacierBOT
#

Try the artifact from PR #10995 when it finishes building.

I tried it and can confirm that it works:

Serial console setup
Adafruit CircuitPython 10.2.0-2-gc57a1a19fd on 2026-05-10; M5Stack Core2 with ESP32
Board ID:m5stack_core2
UID:8712486A80C3
MAC:78:21:84:A6:08:3C

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

Code done running.

Press any key to enter the REP...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#
  • Implements a new setting in settings.toml: CIRCUITPY_SDCARD_USB.
    • if true (the default), presents a mounted SD card (auto or manually mounted) via USB MSC
    • if false, the SD card is not presented over USB.
  • Revises docs/environment.rst to bring it up to date and clarify how it works. Documents CIRCUITPY_SDCARD_USB as well.

Tested on a Fruit Jam, Metro ESP32-S3, and PyPortal.

@tannewt FYI:

I deleted the lines belowin tud_msc_test_unit_ready_cb, because they di...

manic glacierBOT
runic loom
#

Sorry for spamming, I created a video of what I was able to make. Wanted to see what the community feels about this. I wanted to get some advice of packaging it properly so that its just some kind of flag or env variable someone has to enable while compiling circuit python. Currently it is lot of patch work : https://github.com/code2k13/cp-cnn-extension

Also something very intresting , when I just run the library on pi pico it runs perfect, the inference matches digit to digit with PC output, but if I simply add code to initilize a color LCD and Bitmap, something strange happens and I can see strange values in output. ChatGPT says its RAM corruption. Are there any techniques I can follow to safeguard my code ?

GitHub

Convolutional Neural Network extension for Circuit Python - code2k13/cp-cnn-extension

manic glacierBOT
#

The black areas still look fuzzy. Another good example is the lines, which have crisp borders on the original, but seem to have random pixels turned on outside the lines in the newer models. Is this maybe some voltage or contrast setting issue?
<img width="281" height="128" alt="image" src="https://github.com/user-attachments/assets/3c746c68-5e30-461f-82af-c02514a2cd99" />
<img width="236" height="131" alt="image" src="https://github.com/user-attachments/assets/6fb544d0-3c85-4c89-9fc5-f9b02...

manic glacierBOT
#

An interesting comment from an LLM:

A useful diagnostic clue: if the fuzziness is stable and repeatable in the same way every refresh, suspect wrong waveform/init. If it varies from refresh to refresh, suspect power/analog noise or panel degradation.

Looking at the speckles in the cloud in the weather example, they reappear at the same place each time. There are some accidental groups and shapes caused by speckles (e.g., an accidental curved line) that make this clear.

tulip sleet
#

@strange pumice after failing to find any good discussions about speckle noise in a websearch, I asked an LLM further, and edited the comment above to add the response. Some parts are not relevant, but some might be

strange pumice
#

@tulip sleet - Thx. I took a look at your posts this morning and will try these suggestions today. Seems like the right direction.

manic glacierBOT
#

It got some additional logs from a DEBUG=1 build:

ESP-ROM:esp32c6-20220919
Build:Sep 19 2022
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:2
load:0x40875730,len:0x28e0
load:0x4086b910,len:0x12c4
load:0x4086e610,len:0x38f0
entry 0x4086b91a
I (24) boot: ESP-IDF v5.3-dev-16963-g2b900d1222c 2nd stage bootloader
I (24) boot: compile time May 11 2026 08:34:22
D (25) bootloader_flash: XMC chip detected by RDID (00204016), skip.
D (31) bootloader_flash: mmu se...
#

Here is a nice writeup on how LUTs work: https://github.com/antirez/uc8151_micropython#what-i-learned-about-setting-waveformsluts-for-edps. It is for a different driver chip, but it explains the basic principles very well.

Does Adafruit have vendor information about the specific SSD1680 and the necessary LUTs for the display? This seems to vary from vendor to vendor and without these specs writing a driver is more like a trial&error experience. And there are so many parameters so it is unl...

#

I got this output from the script:

$ ./riscv-backtrace.sh build-adafruit_feather_esp32c6_4mbflash_nopsram/firmware.elf 0x40017246 0x42102ec0
0x40017246: ?? ??:0
0x42102ec0: coex_schm_status_bit_clear at ??:?

And a few extra lines by following a tip from claude to check some of the other addresses from the stack memory:

$ riscv32-esp-elf-addr2line -pfiaC -e build-adafruit_feather_esp32c6_4mbflash_nopsram/firmware.elf 0x42102ec0 0x42122f1e 0x421083d6 0x42117140 0x42108300
0x42102ec0...
#

maybe I am misunderstanding how the submodule versions work. The versions here make it seem like main is still set to v5.5.1 https://github.com/adafruit/circuitpython/blob/e512a257d918239d206cf0530ec977fe74daa266/.gitmodules#L143-L146

I see there is a v6.0.1 branch in the repo with recent commits: https://github.com/adafruit/esp-idf/tree/circuitpython-v6.0.1 but as far as I can tell this isn't linked in to circuitpython repo yet

manic glacierBOT
#

The branch = is wrong, but the commit chosen at https://github.com/adafruit/circuitpython/tree/main/ports/espressif is correct: esp-idf @ 2b900d1. That commit is the 6.0.1 branch. The branch = value appears to be a convenience for updating, but is not a specification of the specific commit used: https://superuser.com/questions/1600823/whats-the-benefit-of-specifying-a-branch-for-a-submodule. (I had to look this up to understand it.)

When ports/espressif/esp-idf/ gets updated, I go in...

tulip sleet
#

@lone axle I haven't yet finished trying the 6.0.0 commit on ESP32-C6 in the 6.0.1 PR. I thought that commit worked. I thought I saw some settings changes (including BLE) after that commit.

manic glacierBOT
#

Thank you, I was just coming to the same conclusion that the commit hash is correct despite of the different version listed in .gitmodules. It does also seem odd to me that the output in the log shows ESP-IDF v5.3-dev-16963-g2b900d1222c 2nd stage bootloader which has an even older version 5.3 but does contain the proper commit hash.

So I do think I'm built with the correct version even though it prints an older number. And I am still getting the same issues as my prior comments mention

tulip sleet
#

@lone axle might need to do a git pull --tags or something like that in the esp-idf submodule. I see the same kind of outdated version numbers in CircuitPython when the tags are not up to date

lone axle
#
$ git pull --tags
You are not currently on a branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>
tulip sleet
#

or just git fetch --tags

lone axle
tulip sleet
#

yeah, if we forgot to fetch them from upstream, then they will not be in our fork

lone axle
#

git fetch --tags runs and seems to complete but outputs nothing.

tulip sleet
#

i will try to get the tags from upstream and push them to our fork

lone axle
#

I will stop here for now unless you want me to try anything else specific. I ran into this issue while looking at the failed builds from https://github.com/adafruit/circuitpython/pull/10990 that were coincidentally also c6, but I am thinking the issues are unrelated.

tulip sleet
#

yah, that looks like a linking or source list problem

#

ok, I pulled tags from espressif and pushed a lot of new tags to our fork. I also changed our default branch to circuitpython-v6.0.1, though it doesn't really make any difference.

#

you could try git fetch --tags again

#

inside esp-idf

lone axle
#

yep, it's receiving a bunch now. Thank you!

manic glacierBOT
tulip sleet
lone axle
#
Instructables

How to Reverse-Engineer Almost Any Keyboard Matrix With Raspberry Pi Pico: So you have a keyboard. Maybe you yanked it out of a broken laptop, saved it from a bin, or bought a random membrane thing at a thrift store for 50 cents. And now you're staring at a ribbon cable with 20-something pins going absolutely nowhere, wondโ€ฆ

lone axle
#

Thanks for hosting Dan, have a great week everyone ๐Ÿ‘‹

tulip sleet
#

recording seems OK this time - whew (after like three bad ones when it was my turn)

manic glacierBOT
#

Ended up using GxEDP2_4G (GDEM029T94) settings almost entirely.

A005 on top and 7519 on bottom with changes applied. All speckle traces are gone and lines are cleaner. Notably darker grey clouds.

<img width="640" height="817" alt="IMG_0333" src="https://github.com/user-attachments/assets/8fac35c3-4c8e-424a-b162-963348de58f6" />

<br>

Setting Pre-PR (A005, all panels) FPC-7519 (0x44 / 0xca)
colstart 0 8
...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

This gray change looks a bit smoother. Less speckle?

A005 (top), 7519 (bottom).

<br>

<img width="640" height="843" alt="IMG_0336" src="https://github.com/user-attachments/assets/293ad8ca-7495-47b8-96be-eab34478be49" />

<br>

Quick comparison of what the 7519 (0x44 / 0xca) looks like when we started:

<img width="812" height="537" alt="Screenshot 2026-05-11 at 4 30 04โ€ฏPM" src="https://github.com/user-attachments/assets/daa3c47c-1abe-4e2b-b4c6-e0660aa5b527" />

Where it is no...

slender iron
#

@proud ember I've got the official ev function boards and the m5stack poe board

#

I have a p4x ev function board but the boards I ordered are v1.3 instead of v3 (aka x)

manic glacierBOT
manic glacierBOT
proud ember
manic glacierBOT
tulip sleet
#

@lone axle do you think 10.2.1 should have updated frozen libraries? The only fix I know about is display_text, is that right?

lone axle
#

both issues are non-critical though I think.

tulip sleet
#

RFM69 and RFM9x are frozen in one a few boards

#

I could just update anyway. I am awaiting one more PR for 10.2.x from MikeySklar for a MagTag fix. I'll tag you for review. Sounds like there would not be any regressions

manic glacierBOT
#

Backport of #10992 to the 10.2.x stable branch.

MagTag units with the SSD1680 - FPC-7519rev.b display panel (User ID byte 0xca) show bold, blurry text with the default firmware. This fix detects the panel by its User ID and applies a separate start sequence with the correct VCOM voltage (0x14 = -1.0V) read directly from the panel's OTP register. All other MagTag panels are unaffected.

Changes vs 10.2.x baseline:

  • Add ssd1680_vcom14_display_start_sequence with VCOM=0x14 for FPC-...
manic glacierBOT
slender iron
manic glacierBOT
#

Summary

  • Pulse RESET low before User ID read โ€” SSD1680 ignores SPI while in deep sleep; hardware reset is required to wake it
  • Replace ad-hoc LUT with GxEPD2_4G reference waveform (VS L0โ†”L3 swapped for CircuitPython luma mapping, 0x48 for DC balance)
  • VCOM=0x24 empirically tuned for correct contrast on FPC-7519rev.b panels
  • Unify FPC-7619rev.b (0x44) and FPC-7519rev.b (0xca) into a single code path โ€” both panels share the same sequence and behavior

Test plan

  • [ ] Verified on FPC-7...
#

Summary

  • Pulse RESET low before User ID read โ€” SSD1680 ignores SPI while in deep sleep; hardware reset is required to wake it
  • Replace ad-hoc LUT with GxEPD2_4G reference waveform (VS L0โ†”L3 swapped for CircuitPython luma mapping, 0x48 for DC balance)
  • VCOM=0x24 empirically tuned for correct contrast on FPC-7519rev.b panels
  • Unify FPC-7619rev.b (0x44) and FPC-7519rev.b (0xca) into a single code path โ€” both panels share the same sequence and behavior

Test plan

  • [ ] Verified on FPC-7...
strange pumice
#

@danh - new logic for new ssd1680 panels:

  switch (status) {
      case 0xff:
          return DISPLAY_IL0373;
      case 0x00:
          return DISPLAY_SSD1680_COLSTART_0;
      default:    // unknown SSD1680 variant โ€” assume newer panel needs colstart=8
      case 0x44:
      case 0xca:
          return DISPLAY_SSD1680_COLSTART_8;
  }
tulip sleet
#

that looks ok to me: the compiler will merge the 0x44 and 0xca case with default

strange pumice
#

It could save a lot of work on future panels if they have similar attributes and only a USER ID change.

tulip sleet
#

right that's what I'm hoping, though we will not know about any new user ID's unless they get tested

strange pumice
#

#11002 - looks good on 0xca.

tulip sleet
#

i will test on 0x44 and on old Magtags

strange pumice
#

I'm realizing that I need to keep multiple circuitpython folders to test stable and main. make clean eats some real time.

#

Okay, I don't have an ILI based, but I do have the SSD1680 A005 I can try with the 10.2 build.

tulip sleet
#

yes, I have at least three clones of my fork right now

strange pumice
#

pulled from my webcam...

A005 (top) and 7519 (bottom) running PR# 11002 (10.2 build) on both:

tulip sleet
#

snappy looking!

strange pumice
#

the new displays (7519) look better to me at this point.

tulip sleet
#

a005 is the first batch of new magtags, is that right?

strange pumice
#

Yes.

#

re-flashed with PR# 11003 (main)

Adafruit CircuitPython 10.3.0-alpha.1-16-g243bf0b6e5-dirty on 2026-05-12; Adafruit MagTag with ESP32S2
>>>

A005 (top) and 7519 (bottom)

tulip sleet
#

going shopping; pr's should be done when I'm back

manic glacierBOT
manic glacierBOT
orchid basinBOT
manic glacierBOT
tulip sleet
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

@relic-se I believe that assuming signed data was the original behavior. Handling unsigned data was only added with this most recent commit and is only achieved by explicitly passing samples_signed=False. Leaving the default value True results in the same behavior from before that commit where data is assumed to be signed.

I can remove that new argument if it's not necessary to handle unsigned data. I don't have much experience with these (or really any) mics yet, so I am not about wha...

#

I believe my confusion stems from the use of array.array objects with unsigned typecodes to handle the data ("B", "H", and "I"). So, the data may be coming through as signed but it is being injected into a byte array which treats it as unsigned. Then, we are requiring the user to handle the conversion of that data back to its intended form.

I initially thought your original implementation only handled unsigned data which is why I suggested the samples_signed property (ie: I thoug...

#

So, I can now see some benefit of the conversion implemented in i2sin_convert_to_unsigned for users who specifically are trying to feed into an unsigned destination (WAV file, etc), and I understand that the bus is always treated as signed regardless of the samples_signed property.

I still think that the following changes should be implemented:

  • If samples_signed=True, the required typecodes should be "b", "h", and "i" depending on bit depth.
  • If samples_signed=False, t...
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

I reproduced this problem on a QT PY ESP32-C3, and also on a Metro ESP32-S3.

Easiest, most controlled way to reproduced, on Metro S3:

  1. Empty settings.toml (or at least with CIRCUITPY_WIFI_SSID and _PASSWORD commented out), so no automatic network startup.
  2. import wifi in the REPL. Safe mode crash.

This is fairly consistent with what I saw in logging on the C6. If wifi is enabled on startup, it crashes in PHY init. If wifi is not enabled, it crashes on BLE init. The Metro is also...

manic glacierBOT
#

@relic-se my primary goal was to unlock support for mics built-in to Sparkle Motion devices and this other breakout: https://www.adafruit.com/product/6049. Aiming to support audio reacitive neopixel stuff and recording audio for allowing a project like these walkie talkies: https://learn.adafruit.com/esp-now-walkie-talkies to work under CircuitPython.

I'm not opposed to ultimately having more functionality but enabling those things is was the main focus of the current implementation.

I...

manic glacierBOT
#

@FoamyGuy

I'm not sure how bit depth works exactly, would using bit depth 8 require specific microphone hardware? or any mic can support it?

I am not aware of any I2S microphones which are limited to or support 8-bit data. I only know of some audio codecs which support that format.

I am only this question asking because the espressif implementation has 8-bit support while the raspberrypi hal does not. I wasn't sure if that lack of functionality on one platform was a concern. I cou...

manic glacierBOT
#

Most of my comments are related to bit depth and signedness. Currently, I think there is more work to be done to make it so that it doesn't have to be fixed within user code. All users should have to worry about is ensuring they have the correct bit_depth set for their microphone.

On that note, I could see an output_bit_depth option being added which could enable the core to handle conversion between 24-bit and 16-bit samples (for instance) and just give the user back their data in an `"...

manic glacierBOT
orchid basinBOT
#

Summary

Follow-up to adafruit/web-firmware-installer-js#23, which fixed issue #22 (OPEN INSTALLER hang on Feather ESP32 V2).

The installer fix enables post-flash MD5 verification by passing a calculateMD5Hash callback to esptool-js's writeFlash. esptool-js only runs the readback hash check when that callback is supplied, and the callback in turn relies...

manic glacierBOT
manic glacierBOT
#

@relic-se Thank you! I think I have made all of the requested changes. Let me know if I have missed anything or changes don't align with what you had in mind.

Looking good so far! Any thoughts on the output_bit_depth property that I mentioned at the start of the review? I could even see that being an optional argument in in I2SIn.record to make something like mic.record(buf, len(buf), bit_depth=16). That way, you could transfer the data from a 24-bit I2S mic straight into a WAV fil...

manic glacierBOT
#

In the following program, I'm take a 128 frame sample of data recording at 16-bit 44.1kHz after a second of delay (to warm up the bus). (Note: the environment I'm in is relatively quiet.)

mic = I2SIn(sample_rate=44100, bit_depth=16, mono=True) # excludes pins
time.sleep(1)
buf = array.array("h", [0] * 128)
mic.record(buf, len(buf))
print(", ".join([str(x) for x in buf]))

With that, I'm getting the following data:

0, 0, 0, 0, 0, -5108, -5116, -5116, -5116, -5...
slender iron
#

@tulip sleet did you figure out the c6 thing?

manic glacierBOT
tulip sleet
manic glacierBOT
slender iron
tulip sleet
#

Great!

slender iron
#

needed another -u

#

๐Ÿ™„

manic glacierBOT
#

This may be a future consideration but was there any thought to take the I2S input right to an output? I'm thinking about like a kid's karaoke machine that they sing into and it adds echo or distortion and plays it out right away.

Maybe going to the buffer and feeding that into an audio.play object would work. Just a random thought.

Yes, I think the next step is to implement the audiocore API. I've already made some progress on audiobusoo.PDMIn, but it's not ready at this moment.

tulip sleet
slender iron
#

Just approving commands ๐Ÿ˜•

#

May have found some memory to help it too. Not sure

tulip sleet
#

maybe I will do the alpha.2 tomw. I'll see about #10989.

manic glacierBOT
manic glacierBOT
#

I just want to understand whether this is security pairing or you are just talking about connection. Do the pedals require some action on their side to do pairing? Are you calling .pair() in the CircuitPython code?

Some simple devices include heart rate monitors and oximeters. Some use the the standard HRM and Pulse Oximeter services, and some use some ad hoc protocol. There are also standard services for bicycle sensors.

I have a Schosche heart rate monitor I bought years ago that is...

#

#10899 originally added this doc note in shared-bindings/alarm/SleepMemory.c:

//|     .. note::
//|         Programs that call ``microcontroller.reset()`` should wait at least
//|         one second after boot before resetting, otherwise CircuitPython's
//|         double-reset safe mode detector may activate. See
//|         ``supervisor/shared/safe_mode.c``.

@tannewt wasn't sure this was true. I removed it in #10989. Revisit this later. If it is true, maybe it's a bug.
Tagging @l...

manic glacierBOT
#

@relic-se the latest commits add output_bit_depth functionality and a new manual test that uses it to write to a .wav file.

I tested with the new example on esp32s3 and the neopixel reactive examples on rp2350 and found all appear to work as expected. I did not test all possible output depths.

And agree'd that it would be nice to ultimately have the ability for this to be hooked up to audiocore for applying an effect and then playing it back out.

tulip sleet
manic glacierBOT
#

@relic-se the latest commits add output_bit_depth functionality and a new manual test that uses it to write to a .wav file.

I tested with the new example on esp32s3 and the neopixel reactive examples on rp2350 and found all appear to work as expected. I did not test all possible output depths.

@FoamyGuy I'll need to do some review and testing on my own, but that definitely simplifies the the WAV example. Heck, with the adafruit_wave library it would be even easier!

#

I've recently discovered that audiocore exposes a set of conversion methods.

https://github.com/adafruit/circuitpython/blob/66001d04ac0b5a04e28bf6dd1c38fee088ef80ad/shared-module/audiocore/__init__.h#L94-L116

Rather than maintaining separate platform implementations within audioi2sin, it may be a good idea to work with these instead, but we would need to add 32-bit support. I think that update could wait for a separate PR in the future, though.

tulip sleet
manic glacierBOT
#
[adafruit/circuitpython] New tag created: 10.3.0-alpha.2
#

CircuitPython version and board name

Adafruit CircuitPython 10.x.x
waveshare rp2350 zero
xiao rp2350

Code/REPL

` = picodvi.Framebuffer(FB_WIDTH, FB_HEIGHT,
    clk_dp=board.GP14, clk_dn=board.GP15,
    red_dp=board.GP12, red_dn=board.GP13,
    green_dp=board.GP18, green_dn=board.GP19,
    blue_dp=board.GP16, blue_dn=board.GP17,
    color_depth=color_depth)`

Behavior

Traceback (appels les plus rรฉcents en dernier) :
  Fichier "", ligne 39, dans ...
orchid basinBOT
manic glacierBOT
manic glacierBOT
#

I completely understand this decision and that the advantage of running CP on a Pi Zero is disappearing as micro controllers get more power and access to larger RAM/Flash. Micro controller boards like the fruitJam go a long way to filling the gap. I'm looking forward to incremental advances like more power/memory on the RP20xx micro controllers or DVI capabilities on the Espressif chips which will be far more competitive with a bare metal Pi Zero ๐Ÿ˜

That being said, I do hope we see a future...

tulip sleet
#

https://blog.adafruit.com/2026/05/15/circuitpython-10-3-0-alpha-2-released/
Highlights:

  • Fix crashes on certain boards with integral displays.
  • Adafruit MagTag 2025: improve display quality and support new display variant.
  • Add CIRCUITPY_SDCARD_USB to settings.toml to control visibility of a mounted SD card on USB.
  • Support float values in settings.toml.
  • Report USB MSC drives as removable media to the host.
  • Update ESP-IDF to v6.0.1.
  • Fix audiomixer.Mixer regressions on SAMx5x.
  • STM: support audio.AudioOut, using DAC.
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

I tried my example above with CircuitPython 10.2.1. I am getting [Errno 5] Input/output error occasionally (a few per minute or less), but no safe mode.

The I2C touch controller is known by us to be somewhat flaky (hence the errors) if you poll very often, so these errors are not unexpected.

But no safe mode crashes give hope. There have been updates to ESP-IDF since the original issue.

I am going to close this for now, but happy to reopen if safe mode shows up again with 10.2.1 or later.

manic glacierBOT
#

I wrote a program to do repeated microcontroller.reset()'s 2 and 4x on OS releases from 1.0.3 to 10.3.0-alpha.2 and I am unable to get it to enter double-reset safe mode. I had no settings.toml or boot.py to ensure quickest possible boot after reset. I tried it on ESP32-S3 Reverse TFT and QtPy ESP32-S3 N4R2. Here is my program:

"""
Test to see if two microcontroller.resets without 1 second sleep will trigger safe mode
No boot.py or settings.toml to reduce any WiFi or other e...
orchid basinBOT
manic glacierBOT
manic glacierBOT
#

CircuitPython version and board name

Adafruit CircuitPython 10.2.1; m5stack StackChan

Code/REPL

tio /dev/tty.usbmodem2101

Behavior

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x28 (SPI_FAST_FLASH_BOOT)
Saved PC:0x4038085e
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x17f8
load:0x403c8700,len:0x4
load:0x403c8704,len:0xfa8
load:0x403cb700,len:0x30c0
entry 0x403c8974
I (26) boot: ESP-IDF v5.3.2 2nd stage bootloade...

manic glacierBOT
#

@dhalbert Same result with CoreS3 10.3.0-alpha.2. After the .uf2 gets copied to the CORES3BOOT drive, the board doesn't seem to reset. I press the reset button, and get this boot log after attaching to the serial monitor:

<details>
<summary>CoreS3 10.3.0-alpha.2 boot log</summary>

ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x2b (SPI_FAST_FLASH_BOOT)
Saved PC:0x4038316e
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2820,len:0x17f8
load:0x403c8700,len:0x4
load:...
manic glacierBOT
#

I see that the schematic for the CoreS3 baseboard is the same for both products.

Did you erase flash completely in the process of the loading the firmware?

You could try loading the .bin after a full erase, instead of using the .uf2 + the bootloader.

Do you have any other Espressif S3 boards that you could try, just to rule out an issue with the flashing process?

This board definition was contributed by @CDarius. We don't have one of these boards to test (I have a Cardputer, which is a St...

manic glacierBOT
#

@dhalbert
I didn't click "Skip Erase", so yes it should have. I've also tried erasing the flash with esptool (pipx run esptool --port /dev/tty.usbmodem2101 erase-flash) beforehand.
I get the same result flashing the .bin directly as well.

Unfortunately I don't have another supported S3 board to test on atm; flashing a Pico 2W via dragging .uf2 worked fine though (though that's not exactly the same method), and flashing the stock/test firmware from m5stack works fine. I've also had no is...

manic glacierBOT
#

Thank you @dhalbert . Did some preliminary testing with my full project code and 10.2.1:

USB connected to computer:

  • Image load very slow. Can take upwards of two minutes to load image to display.
  • ctrl-C + ctrl-D to reload code.py shows that code runs fine, but actual image load slow (as above). I can see that the code has moved-on past the image load step in the REPL, but the image has not in fact loaded yet.

USB connection to power-only:

  • Image load almost immediate (no delays).
    ...
manic glacierBOT
#

Thank you @dhalbert . I also tested with the test code above, but I still get a failure when I include the framebuffer and display setup in the code above (it is commented-out in the listing above). Failure is at ping test now, though:
``| BLE:Off | code.py | 10.2.1\ESP32-S2 WebClient Test
My MAC address: ['0x94', '0xa9', '0x90', '0x1b', '0x11', '0xc0']
Available WiFi networks:
ngc253 RSSI: -41 Channel: 2
Connecting to ngc253
Connected to ngc253
My IP address: 192.168.0.201
Couldn't pi...

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#
  • Fixes #10445

Print startup messages later so they can be suppressed if desired. Also simplifies the logic of printing them.

I tested on two Metro M0's: the messages still seem to be printed in the same order, and if I go into user-initiated safe mode, they are still the same. I also wrote a blink program on both and tested with USB power only but no data, and they still work. Also boot.py content is still the same.'

I am not sure why the original code was more complicated and wha...

tulip sleet
#

Here is the notes document for today's CircuitPython Weekly Meeting. It is at the normal time of 11am Pacific / 2pm US Eastern here on Discord. Add your hug reports and status updates to the document before the meeting. If you are unable to attend but would still like to contribute, feel free to add your notes and weโ€™ll read them off during the meeting. Hope to see you there! <@&356864093652516868>
https://docs.google.com/document/d/1I6ScV7AJUegswSvDbqqWlmBBlhH4vrt3IAdKHGIoLqI/edit?usp=sharing

candid sun
#

<@&356864093652516868> We'll have our weekly meeting in about 90 minutes from now in this text channel and in the circuitpython voice channel. Please take the time to add your notes in advance to the document: https://docs.google.com/document/d/1I6ScV7AJUegswSvDbqqWlmBBlhH4vrt3IAdKHGIoLqI/edit?tab=t.0

manic glacierBOT
#

@tannewt do you happen to have a CoreS3? If not maybe one of us should get one.

I don't believe I do. I'd rather leave this as community supported (aka we don't get one) because I'd like some pressure on m5stack to support their boards in CP. Maybe they'll be more open to it now that they are owned by Espressif.

Otherwise, I'd encourage folks to find other boards with the same issue. We can look into it if they are Adafruit boards.

strange pumice
#

Using > 32GB SD cards with CircuitPython might already work.

  • CIRCUITPY_FULL_BUILD=1 is the default for pretty much all but the SAMD21 boards that don't have extra flash.

  • That means ExFAT on SDXC/SDUC cards should at least appear and might be usable.

I'll give it a try.

strange pumice
#

SDXC 64GB card formatted as ExFAT

  • mounted with a Metro RP2350 running stock CP 10.2.1
  • passed through the MSC to the host OS and properly identified the FS.
  • Looks like there is some confusion about sector count (32-bit overflow from CP?)
    • CircuitPython reports to the USB host : 28.9 GB (CP block count reply)
    • Actual size (and Disk Utility agrees): 63.28 (boot record)

I'll open a PR.

tulip sleet
lone axle
strange pumice
#

@danh - same deal on Linux disk size shows up off.

Problem is with CSD v2- Card Specific Data in shared-module/sdcardio/SDCard.c

Works with cards < 32 GB.

self->sectors = ((csd[8] << 8 | csd[9]) + 1) * 1024;

Cards > 32G B cards need a 22-bit read.

self->sectors = (((uint32_t)(csd[7] & 0x3F) << 16 | (uint32_t)csd[8] << 8 | csd[9]) + 1) * 1024;

Will build and confirm.

tidal kiln
#

๐Ÿ‘‹

lone axle
#

Thanks for hosting Liz, have a great week everyone ๐Ÿ‘‹

candid sun
#

Here is the notes document for next Tuesdayโ€™s CircuitPython Weekly Meeting (next Monday is a U.S. holiday, Memorial Day). It is at the normal time of 11am Pacific / 2pm US Eastern here on Discord. Add your hug reports and status updates to the document before the meeting. If you are unable to attend but would still like to contribute, feel free to add your notes and weโ€™ll read them off during the meeting. Hope to see you there! <@&356864093652516868>
https://docs.google.com/document/d/1_EcnNpQROfkAGHc5f5uz8dGxVLD5RSqx-hUTrhGAnrQ/edit?tab=t.0#heading=h.jb0k8k2z2vqn

manic glacierBOT
#

SDXC cards larger than 32 GB were reporting roughly half their actual block count
over USB MSC. The CSD v2.0 C_SIZE field is 22 bits but only the bottom 16 were
being read โ€” the fix reads all 22.

Test results โ€” Metro RP2350, 64 GB exFAT SDXC

Before After
macOS disk size 28.9 GB 63.3 GB โœ“
Linux disk size 26.9 GiB 58.9 GiB โœ“

Regression tested with a 16 GB FAT32 SDHC card โ€” size correct on both platforms,
no impact on cards โ‰ค 32 GB.

Before:

$ lsbl...
#

Backport of #11012 to 10.2.x.

SDXC cards larger than 32 GB were reporting roughly half their actual block count
over USB MSC. The CSD v2.0 C_SIZE field is 22 bits but only the bottom 16 were
being read โ€” the fix reads all 22.

Test results โ€” Metro RP2350, 64 GB exFAT SDXC

Before After
macOS disk size 28.9 GB 63.3 GB โœ“
Linux disk size 26.9 GiB 58.9 GiB โœ“

Regression tested with a 16 GB FAT32 SDHC card โ€” size correct on both platforms,
no impact on car...

manic glacierBOT
#

i2sin-saleae-logic.zip

Here are my results from the logic analyzer. You can see the samples dropped from the left channel. I think they're related to a timing issue with BCLK. The last clock cycle of the left word after LRCLK transitions to high to indicate the right word is 500ns when it should be 700ns. This causes the bus to run closer to 44.6kHz rather than 44.1kHz. My audio codec (which has a 15 MHz MCLK driv...

manic glacierBOT
#

Each PIO program was missing a delay of 2 cycles on the first set instruction. Adding the delay in results in more stable and accurate I2S timing. I'm still getting some dropped sample frames, but not as frequently. I'll continue to diagnose this, but I can't see anything wrong with the BCLK and LRCLK signals at this time.

Btw, sorry for the repetitive comments. Just being thorough! ๐Ÿ˜

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

I tried the S3 Box build with recent builds, because it is vaguely similar, but it was fine.

Could you put a CoreS3 into ROM bootloader mode, run the esptool chip-id and flash-id commands, and post the output? This might reveal something different about these boards.

Also see if any of these builds work. Use the .bin versions and erase flash beforehand to avoid any possible effect by a UF2 bootloader.
https://circuitpython.org/board/espressif_esp32s3_devkitc_1_n8/ (8MB flash / no P...

manic glacierBOT
#

An LLM query suggests this might be a PSRAM mode issue (OPI vs QIO). Why this problem appeared when CircuitPython upgrade to v5.5.3.

LLM suggestions, which make sense to me.

Good QIO-PSRAM builds to try:

  1. circuitart_zero_s3 โ€” closest match I found: ESP32-S3, 16MB flash, 8MB QIO PSRAM
  2. espressif_esp32s3_devkitc_1_n8r2 โ€” ESP32-S3, 8MB flash, 2MB QIO PSRAM
  3. unexpectedmaker_tinywatch_s3 or bpi_picow_s3 โ€” also ESP32-S3 with QIO PSRAM, though only 2MB PSRAM
manic glacierBOT
#

Figured it out. The BCLK signal is inverted on the core module for raspberrypi.

Library: (LRCLK changes on falling edge of BCLK, correct)
<img width="486" height="644" alt="Screenshot 2026-05-19 at 8 34 26โ€ฏAM" src="https://github.com/user-attachments/assets/026649f7-e12b-424c-9452-f15ce666e6f9" />

Core: (LRCLK changes on rising edge of BCLK, incorrect)
<img width="326" height="656" alt="Screenshot 2026-05-19 at 8 31 36โ€ฏAM" src="https://github.com/user-attachments/assets/eee73ecd-1b65-...

manic glacierBOT
#

@FoamyGuy Inverting the BCLK signal making my codec completely stable now up to 48kHz. Unfortunately, the in pins 1 now samples on the falling edge which was causing incoming data to be corrupt. I've provided an updated i2sin.pio which uses nop instructions in place of in pins 1 and adjusts the delay timing. This results in correct timing and data sampling.

I've added in an extra nop at the beginning to make the clock stable when the bus first starts up. The wrap target will need t...

slender iron
#

is 10.2.x broken?

#

I don't know why mikey's SD card fix would cause the failures it is seeing

orchid basinBOT
#

Adds board pages for the 3 boards reported by tools/missing-boards.py after the 10.2.1 and 10.3.0-alpha.2 releases:

board_id Family First released in Image
adafruit_p4gpio esp32p4 10.3.0-alpha.2 unknown.jpg
espressif_esp32p4x_function_ev esp32p4 10.3.0-alpha.2 reuses espressif_esp32p4_function_ev.jpg
nhbsystems_jl401_4mbflash_2mbpsram esp32s3 10.2.1 unknown.jpg

Notes per board

  • Adafruit P4 GPIO โ€” ESP32-P4 rev ...
manic glacierBOT
manic glacierBOT
lone axle
#

Would it be feasible to have an end user configurable way to enable CPSAVES? Either options in settings.toml like the recent sdcard changes, or maybe as an argument to storage.erase_filesystem() or something?

manic glacierBOT
#

Summary

When the host has CIRCUITPY mounted over USB Mass Storage, the
CircuitPython side of FatFS sees STA_PROTECT on the block device,
and f_open(..., FA_WRITE) returns FR_WRITE_PROTECTED.

_write_file_and_reply in supervisor/shared/web_workflow/web_workflow.c
was lumping this into the generic result != FR_OK branch and replying
HTTP 500 Internal Server Error, which looks to clients like the
device crashed.

The other write paths in the same file โ€” DELETE, MOVE, and ...

slender iron
lone axle
slender iron
#

It'd need to be changed from a compile time CIRCUITPY_SAVES_PARTITION_SIZE to something in settings.toml. code size will increase a little but that'd be fine for those boards I think.

tulip sleet
#

if you turn it off and on in settings.toml, what happens to that part of the flash storage? Is it preserved? If not, turning it off or on will mess up the cluster count and FAT table for CIRCUITPY.

slender iron
#

I think it'd only actually be created on erase

#

the setting would just activate the code path I think

manic glacierBOT
#

@relic-se I think I got the PIO programs updated correctly based on your feedback. Let me know if anything seems amiss.

I re-tested this version on a feather rp2350 with multi-reactive audio demo and it appears to be working as expected.

It also occurred to me the sdcard recording demo can be adapted to use CPSAVES instead of sdcard and run it on a fruit jam. It seems like the writes to flash maybe take too long and introduce artifacts into the audio (same issue that raspberrypi port h...

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

@dhalbert

<details>
<summary>esptool chip-id</summary>

esptool v5.2.0
Connected to ESP32-S3 on /dev/cu.usbmodem2101:
Chip type:          ESP32-S3 (QFN56) (revision v0.2)
Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                44:1b:f6:e2:9a:8c

Stub flasher running.

Warning: ESP32-S3 has no chip ID. Reading MAC address instead.
MAC:                44:1b:f6:e2:9a:8c

Hard resetting via RTS pin.....
manic glacierBOT
#

Thanks! Could you also try this one? https://circuitpython.org/board/circuitart_esp32s3_zero/ ? That is 8MB PSRAM set up as quad, not octal data.

It is fishy that your esptool chip-id prints

Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz

When I try this on a Metro S3, which uses an Espressif module, I get:

Features:           Wi-Fi, BT 5 (LE), Dual Core + LP Core, 240MHz, Embedded PSRAM 8MB (AP_3v3)

But I am not sure how esptool is trying to detect the...

manic glacierBOT
manic glacierBOT
manic glacierBOT
slender iron
#

@tulip sleet updated breadboard.ing with my latest version

#

you should be able to delete stuff ๐Ÿ™‚

lone sandalBOT
manic glacierBOT
#

CircuitPython version and board name

Adafruit CircuitPython 10.2.1 on 2026-05-13; Raspberry Pi Pico with rp2040

Code/REPL

import time, board
import audiobusio, audiocore
import audiospeed

i2s_dat_pin, i2s_lck_pin, i2s_bck_pin  = board.GP22, board.GP21, board.GP20

audio = audiobusio.I2SOut(bit_clock=i2s_bck_pin, word_select=i2s_lck_pin, data=i2s_dat_pin)

wav1 = audiocore.WaveFile("amen1_22k_s16.wav") 
wav1adj = audiospeed.SpeedChanger(wav1, rate=0.5)

audi...
manic glacierBOT
#

CircuitPython version and board name

Adafruit CircuitPython 10.3.0-alpha.2 on 2026-05-15; Raspberry Pi Pico 2 with rp2350a

Code/REPL

import audiobusio
import audiomixer
import board
import synthio
import time

audio = audiobusio.I2SOut(
    bit_clock=board.GP20,
    word_select=board.GP21,
    data=board.GP22,
)
mixer = audiomixer.Mixer(
    voice_count=1,
    sample_rate=44100,
    channel_count=1,
)
audio.play(mixer)

synth = synthio.Synthesizer(
    sampl...
manic glacierBOT
#

Fix by setting "single_buffer = false".

When single_buffer = true, the DMA driver sets up a hardware loop that resets the read address back to buffer[0] at full DMA speed, never calling get_buffer again. This caused SpeedChanger to replay its first 128-frame output buffer indefinitely when connected directly to audioio/audiobusio.

Setting single_buffer = false enables the double-buffering path w/ DMA interrupts, which keeps calling get_buffer() so the phase accumulator can advance throu...

manic glacierBOT
#

I've been thinking about this quite a bit and I have an idea that would be a very useful feature.

So, here's the problem. Let's say you have 2 images that you want to combine together and one has anti-aliasing. For this example, I'm going to use some images from chess.com. The 2 images that I'd like to combine are:

and

With the way the tools available are now, you could define a single index color to skip. So, let's say we assign the most apparent color white as #FF00FF for index skip...

manic glacierBOT
#

I think a mask mechanism would be a nice addition to bitmaptools.

Worth noting though, Bitmap and Palette do currently support having multiple indices be transparent. This reproducer code demonstrates it:

import supervisor
import displayio
import bitmaptools
display = supervisor.runtime.display
bmp = displayio.Bitmap(10, 10, 5)

p = displayio.Palette(5)
p[0] = 0xff00ff
p[1] = 0x00ff00
p[2] = 0xffff00
p[3] = 0xff0000
p[4] = 0x0000ff
p.make_transparent(0)
p.make_transparent(1)
p.make_trans...
manic glacierBOT
#

CircuitPython version and board name

Adafruit CircuitPython 10.3.0-alpha.2 on 2026-05-15; Raspberry Pi Pico 2 with rp2350a

Code/REPL

import audiobusio
import audiomixer
import board
import synthio
import time

FILTER = True
FILTER_BYPASS = False

audio = audiobusio.I2SOut(
    bit_clock=board.GP20,
    word_select=board.GP21,
    data=board.GP22,
)

synth = synthio.Synthesizer(
    sample_rate=44100,
    channel_count=2,
)

if FILTER:
    import audiofilters...
manic glacierBOT
manic glacierBOT
lone sandalBOT
manic glacierBOT
#

A couple of related observations that I thought might be helpful for diagnosing this issue:

  1. I suspect that this is related to #10613
  2. Request failures seem to mostly happen when board is powered-up. In other words, when I first power-up the board I get repeated JSON and NTP connection failures. With persistence, I can eventually get the system to fetch JSON and update NTP. If I then restart code.py, all JSON and NTP connections succeed, until I power-down or restart the board, whic...
manic glacierBOT
#

CircuitPython version and board name

Adafruit CircuitPython 10.2.1 on 2026-05-13; Adafruit QT Py ESP32-S3 no psram wi
th ESP32S3

Code/REPL

# APDS9960 gesture sensing test
import board
import displayio
from adafruit_apds9960.apds9960 import APDS9960
from fourwire import FourWire
from adafruit_gc9a01a import GC9A01A
#
i2c = board.STEMMA_I2C()
apds = APDS9960(i2c)

displayio.release_displays()
spi = board.SPI()
# Set tft pins for QTPy EYESPI BFF on ESP32-S3
tft...
manic glacierBOT
#

Closes #11023

Adds an optional mask= keyword argument to bitmaptools.alphablend()
that scales source2's per-pixel contribution by an L8 bitmap (one byte
per pixel, 0..255). When mask is None (default), behavior is unchanged
from the existing alphablend() โ€” no breaking changes to current
callers.

Behavior

  • mask must be a displayio.Bitmap with bits_per_value == 8 (L8
    grayscale) and the same width/height as the destination bitmap.
  • For each output pixel, source2's ble...
manic glacierBOT
#

Bug

In shared-bindings/dotclockframebuffer/__init__.c around line 107:

mp_arg_validate_int_range(gpio_data, 0, (1 << (max_bit * 8)) - 1, MP_QSTR_gpio_data);

max_bit is computed earlier as gpio_data_len * 8 - 1 (the highest
valid bit index within the gpio_data field). The validator above
mistakenly multiplies max_bit by 8 a second time instead of using
gpio_data_len * 8.

For the common gpio_data_len = 1 case, max_bit = 7 and the upper
bound becomes:

(1 << (7 ...
#

CircuitPython version

10.3.0-alpha.2 (also reproduces on every release since v8.x โ€” bug
has been present since PR #8401 in September 2023).

Code/REPL

Any call to dotclockframebuffer.ioexpander_send_init_sequence(...)
with gpio_data_len=1 and a gpio_data value greater than 1
triggers the bug. In practice this happens during display init on
an Adafruit Qualia ESP32-S3 driving a 4" 480x480 round TFT via the
adafruit_qualia library:

from adafruit_qualia.graphics impo...
main furnace
#

| Adafruit CircuitPython 10.3.0-alpha.2 on 2026-05-15; Adafruit Feather ESP32-C6 4MB Flash No PSRAM with ESP32C6

Web Workflow is working. Was not the case with 10.2.1.

manic glacierBOT
#

In circuitpython 10.x / libraries is it not possible, to ask the wifi signal strength, especially when wifi is connected.

print(dir(wifi.radio)) gives following result:

['class', 'addresses', 'addresses_ap', 'ap_active', 'connect', 'connected', 'dns', 'enabled', 'hostname', 'ipv4_address', 'ipv4_address_ap', 'ipv4_dns', 'ipv4_gateway', 'ipv4_gateway_ap', 'ipv4_subnet', 'ipv4_subnet_ap', 'mac_address', 'mac_address_ap', 'ping', 'power_management', 'set_ipv4_address', 'set_ipv4_address_ap...

manic glacierBOT
manic glacierBOT
#

My few cents to the discussion.
I had similar symptoms (boot loop) with Waveshare ESP32-S3-Tiny-N8R8.
As this board+chip combo is not yet supported, I made a new definition, Tiny with changed FLASH/PSRAM sizes.
Spent a whole day trying to make it work.
In the end, turned out the issue was with PSRAM mode.

According to esp32, esp32-wroom and esp32-pico datasheets:

  • R2 are always Quad SPI
  • R8 and R16 are always Octal SPI

There are 7 boards potentially broken due to Quad SPI configured for...

#

The CoreS3 and the CircuitArt use external PSRAM chips, wired as QIO, not OPI. It's a bit confusing because the schematic of the CircuitArt says ESP32-S3(FN8), which would imply an in-chip-package flash chip. But the important thing is that there are boards that use QIO for an external 8MB PSRAM.

Why this used to work (or maybe it was just not recognizing the PSRAM?) I do not know yet.

manic glacierBOT
#

There are 7 boards potentially broken due to Quad SPI configured for large PSRAM:

$ git grep -l 'IDF_TARGET = esp32s3' | xargs grep -l 'PSRAM_MODE = qio' | xargs grep  'PSRAM_SIZE' | grep -v 2MB
boards/circuitart_zero_s3/mpconfigboard.mk:CIRCUITPY_ESP_PSRAM_SIZE = 8MB
boards/m5stack_cores3/mpconfigboard.mk:CIRCUITPY_ESP_PSRAM_SIZE = 8MB
boards/m5stack_cores3_se/mpconfigboard.mk:CIRCUITPY_ESP_PSRAM_SIZE = 8MB
boards/unexpectedmaker_feathers3/mpconfigboard.mk:CIRCUITPY_ESP_...
manic glacierBOT
manic glacierBOT
lone sandalBOT
manic glacierBOT
#

Scanning networks will yield the RSSI for each Access Point found.

While connected, wifi.radio.ap_info.rssi yields the RSSI of the Access Point. But it is currently implemented only for the espressif port, not for the raspberrypi port.

It is also possible (though a bit involved) to obtain RSSI for any active wifi device in the vicinity using https://docs.circuitpython.org/en/latest/shared-bindings/wifi/index.html#wifi.Monitor.

manic glacierBOT
manic glacierBOT
#

Thank you for the comments.

Yes, i talk about RSSI, the signal strength from the acces point. I want to see, how strong / good the connection to the acces point is. In my project are many pico2w's in many different networks and should report the quality of the connection, some are very good and some are a bit critical.

wifi.radio.ap_info.rssi would be my solution, so i hope, this would be implemented in the pico2-Port too.

I need the picos because Hub75 work with these much faster ...

manic glacierBOT
#

i tested the Matrixportal S3 again mit 10.2.1. Matrixportal was much slower than a pico2w, so i ditched it and tried it today again because of the 3,3-5V level shifters on board. The result is catastrophal. Flicker on 64x32 is clearly visible but acceptable, single panels with 64x64 or a chain 64x32 x 4 is absolutely a no go.

But other than circuitpython is actally no option for me.

Can you expand this issue to Matrixportal S3 or have i to open a new request?

manic glacierBOT
slender iron
#

It works!

modern wing
#

That's cool!

slender iron
#

it'll do things like commits, stars, forks, and releases I think

modern wing
slender iron
#

I haven't

modern wing
#

It's pretty straightforward -- and there's a free trial.

#

Save you from having a browser open with the docsets all the time

slender iron
#

does it do pdfs like datasheets?

modern wing
#

I don't think so, mainly HTML and other varients

slender iron
#

kk, pdfs are easy enough I guess ๐Ÿ˜ƒ

modern wing
slender iron
#

thats mostly what I have open

modern wing
#

I'm not familiar with all of those, but my gut tells me that PDF isn't going to be included.

#

Could be wrong.

slender iron
#

ya ya

manic glacierBOT
manic glacierBOT
#
[adafruit/circuitpython] New tag created: 1\.0\.0\-rc\.3
twin mica
#

@slender iron oh nice, thanks for making the 3dp channel!

slender iron
#

no problem! this is the circuitpython one though ๐Ÿ˜ƒ

twin mica
#

heh, I see that now. Getting used to this.

manic glacierBOT
manic glacierBOT
#

main.py output:
Traceback (most recent call last):
File "main.py", line 14, in <module>
OSError: 11

when running following (error on uart.read())

# Gemma IO demo #7 - USB/Serial echo

from digitalio import *
from board import *
import busio
import time

led = DigitalInOut(D13)
led.direction = Direction.OUTPUT

uart = busio.UART(D0, D2, baudrate=9600)

while True:
    d = uart.read()
    if d != None:
        led.value = True
        print(d)
        le...
drowsy geyser
#

With @river quest 's latest CircuitPython NeoPixel driver commit, I was able to port the Arduino strandtest Wheel() and rainbow() functions in order to cycle through the color wheel on two two-meter NeoPixel strips I have hanging on my wall. If anyone is interested in the code I would be happy to post a link.

slender iron
#

sounds awesome @drowsy geyser

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

OSError: 11 Is telling you to try again. You could then catch the exception with try except. However, it looks like most ports switch the mode to non-blocking mode where it would return None instead of an exception. I'll fix this up and close the issue with it.

read will read until the end of file so I recommend giving it a limit instead like read(1).

Another option that works will with GPS is:

# Gemma IO demo #7 - USB/Serial echo

from digitalio import *
from...
manic glacierBOT
manic glacierBOT
#
[adafruit/circuitpython] New branch created: mike\_test
slender iron
#

mike-test is going to be used for testing a CI called Mike which tests CircuitPython on actual boards

manic glacierBOT
drowsy geyser
#

What should I build today? Restless and my cold has made me unmotivated.... (I do have a list of projects to work on, though.)

tulip sleet
#

Random idea: wireless Firmata, over an ESP8266 or an RFM module. Python or use the Circuit Playground Classic Firmata impl

#

Or just a regular impl of Firmata, in Python. Probably already exists, just needs porting to CircuitPython.

#

Implement the Arduino Circuit Playground version of Firmata in CPy.

drowsy geyser
#

I've never looked at Firmata. What is it?

tulip sleet
#

The idea is that the slave is kinda weak in processing power. So you implement a simple protocol to turn lights on and off, get sensor data, etc. More powerful processing lives on the host. There are probably many RPi examples.

drowsy geyser
#

ah, cool, thank you!

slender iron
#

@drowsy geyser I know I'm late to the party but I recommend watching pycon2017 videos. The lightning talks are easily consumable.

manic glacierBOT
royal ridge
#

Hey @slender iron, does the circuit python keyboard emulation read the caps/num/scroll lock statuses returned from the host system?

tulip sleet
#

@royal ridge it's one-way only right now

royal ridge
#

@tulip sleet Thanks..

slender iron
#

we can always add it @royal ridge

royal ridge
#

Kinda wishing I knew enough at this point to make that happen.

#

I do not, however, grok USB enough at this point....

slender iron
#

you are talking to the right people ๐Ÿ˜ƒ

tulip sleet
royal ridge
#

@tulip sleet I have a project that I keep rebuilding that I'm A) currently stuck wihout those status indicators on anything but an AVR (and they'd be very very useful) and B) contemplating making my First Real Thing in CircuitPython.

#

( @slender iron Yes, the one you've seen)

tulip sleet
#

@royal ridge we use the Atmel low-level libraries to provide the HID devices, and it looks like they provide the status, so may not be too hard.

royal ridge
#

@tulip sleet could you point me at that code?

tulip sleet
royal ridge
#

Thanks, Dan!

slender iron
#

its a bit tough because we don't have a good callback story

royal ridge
#

"callback story"?

slender iron
#

sorry, I'm in like 5 chats

tulip sleet
#

no easy way to call back a routine when you get the status message. might have to do polling for now, I think @slender iron means

slender iron
#

yeah, basically, how do you get notified that the caps lock status has changed

royal ridge
#

Yeah, polling for updates is completely fine for my purposes

slender iron
#

ok, I've been biasing that way because its simple

#

maybe an attribute on the usb device would work

royal ridge
#

@slender iron I know you're a busy guy... s'what happens when you're everyone's favorite cheerleader ๐Ÿ˜‰

slender iron
#

then you could do led.value = device.caps_lock

slender iron
#

@tulip sleet I've been working on setting up some on-board automated testing

tulip sleet
#

I heard about that - it sounds great! We could really use regression testing. Do you run it locally or does travis talk to a local server you set up? (that would be fancy)

slender iron
#

my idea is to have it running on the pi and webhooks from github and travis coming in

#

I'm using ngrok to provide the http endpoint rather than poking a hole in my firewall

tulip sleet
#

Didn't know about ngrok but now I see what it is. Sounds very good. And will it be easy to run the tests locally as well?

slender iron
#

yeah, I think so

#

micropython has some mechanics for onboard testing already

#

I think I'll just add some ability for the test to detect the hardware setup and automate the reflashing

tulip sleet
#

as opposed to programmatically electrically doing a double-click from the Pi. sounds good.

#

I haven't tried to plug in multiple boards all being CIRCUITPY. On Windows they will get different drive letters. not sure on Linux.

slender iron
#

yeah, I'm tweaking it now so each volume has a unique volume id. fatfs does it based on size by default

#

right now it doesn't automount at all

#

for restarting to bootloader I'm going to do what arduino does with its magically 1200 baud connection

#

that way you can flash arduino over circuitpython without double clicking too

tulip sleet
#

and then copy a uf2 or do bossac?

slender iron
#

I'm thinking bossac probably. I'd love it if we could use it to test arduino as well

tulip sleet
#

re that SPI flash eraser in the forums: if I build a general version would you want to include a copy with the CPy releases? or somewhere else?

slender iron
#

Lets make a thread on the forum and pin it.

#

that should make it easy to link to

tulip sleet
#

sure

slender iron
#

dinner time, night!

drowsy geyser
#

Ok, just ordered all the bits for my CircuitPython robot kit/tutorial/attempt. ๐Ÿ˜ƒ

#

SAAH (Sent Adafruit Another Hundred) ๐Ÿ˜‰

arctic minnow
#

But you have a robot kit. You win.

drowsy geyser
#

True!

arctic minnow
#

I'll take that over a hundred bucks anyday.

drowsy geyser
#

LOL, me too!

arctic minnow
#

I got a circuitpython question. Is there a database import?

tulip sleet
#

@arctic minnow hi - what do you mean?

arctic minnow
#

Well, I'm currently reading about python and the book uses an import sqlite3

torn grail
#

Is there sqlite3 in micropython?

tulip sleet
#

Sorry, sqlite3 isn't available. There just isn't much room for many things. Regular python is "batteries included". CircuitPython and MicroPython are more like "one AAA battery included"

torn grail
#

Yeah, thats what I thought. Some of the more complex stuff is not i there.

arctic minnow
#

Oh Ohhhh, what about list comprehensions? Filtering with regular expressions?

tulip sleet
#

There's a reduced version of re (ure), and a few other general purpose modules. I'm looking for the complete list in the docs -- hold on. There should be ujson but I had some build problems with it.

arctic minnow
#

Can I aggregate Tuples?

torn grail
#

I was gonna make a joke about microfortran, but aparently, it actually exists!! LOL

tulip sleet
#

There are definitely list comprehensions. Most built-in language features are there: it's a lot of the libraries that are missing (csv, etc.)

arctic minnow
#

I'm building some high level data modeling algorythyms for a sentence builder based on percieved sentence input. No neural nets though, just relflex arcs to start with.

#

Ok, as long as dicts and lists with proper iteration. That's the jist of the code...

tulip sleet
arctic minnow
#

Oh, as in...

#

a, b = b, a

#

for a simple swap

#

Two lvalues, very unusual but....

#

Thanks for the link.

tulip sleet
#

The main issue is getting things to fit. You are not going to get more than a few hundred lines of code in. The 32k of RAM has 16k allocated to the stack and the rest to the heap and 4k of SPI flash buffer. When you import a module its bytecodes are stored in RAM, not SPI flash. For larger modules you may need to use mpy-cross to produce the byte-code version; otherwise you may run out of RAM while importing it.

#

that is, the .mpy or .py can be in SPI flash, but importing it will use up space in RAM.

arctic minnow
#

Well, I hear you, that's why I have a pyboard for thinking, an openMV with micropython for the vision, an Uno for voice rec. and text to speech. Many micros working together to create a perception of awareness from ROSIE. My Robot Oriented Sentient Interactive Entity. :))

tulip sleet
#

The pyboard has a lot more RAM. But there's no CircuitPython port.

#

There's a btree impl, but I'm not sure that's turned on in CPy.

arctic minnow
#

Right, it's strictly a python "Operating Environment".

#

But there are ways to communicate....

tulip sleet
#

Right. For now, I think the right way to think of it is "way easier Arduino".

arctic minnow
#

Ahhhh, not sure what you mean by that but python has such strength with its data types.

tulip sleet
#

Yes, I'm building something with dynamic arrays, dicts, and strings and I'd hate to do it in Arduino C++.

arctic minnow
#

No kidding eh?

tulip sleet
#

But I'm having trouble getting it to fit.

#

Just a few too many libraries.

#

The mark of a good programmer is constructive laziness.

arctic minnow
#

Selected I suppose as well eh? import .... from....

tulip sleet
#

Yep, there's just a little too much code: a char LCD driver, the HID library, some parsing code, and some data structures.

arctic minnow
#

Absolutely, CPMM, Copy, Paste, Meld, and Morph is what I alwys say.

tulip sleet
#

gotta say good night, but had a great evening on the chats

arctic minnow
#

Make a great day... Good night.

manic glacierBOT
manic glacierBOT
sick creek
#

Cython and CircuitPython what would happen when those meet?

slender iron
#

I don't know enough about Cython to say. What do you think @sick creek ?

sick creek
#

what i learned from PyData talk just moment ago it is closer to C from Python languages

slender iron
#

it does compiling before running right?

sick creek
slender iron
#

looks similar to micropython's ability to output machine code directly

sick creek
#

Jake vanderplas showed some of languages on his keynote in PyData

slender iron
#

@sick creek You'd probably like videos from PyCon 2017 too

sick creek
#

@slender iron he had that he did some speak in pycon too

#

@slender iron Parallar micropython as having multiple circuitpython devices what work together they tasks as TonyD did juniper with micropython demo one time

slender iron
#

is that a presentation at PyData?

sick creek
#

Channel9 livestream from PyData Seattle

slender iron
sick creek
#

the talk is going robust forecasting

#

next in the stream is Python and IOT

slender iron
#

nice! I'll have to watch the recordings

sick creek
#

as microsoft sponsor this pydata event

slender iron
#

ok thanks!

sick creek
#

adafruit board in python and iot talk

slender iron
#

nice1

#

!

sick creek
#

ESP8266 board

#

Feather Huzzah plus Lux Sensors from Adafruit

#

@slender iron this talk is so cool as Python, IoT, ML as controlling lights when not home as learning pattern when house have people and use it when people arent home

slender iron
#

cool!

sick creek
#

@slender iron have you done any mqtt wity circuitpython?

slender iron
#

nope, I haven't

#

its on my radar as something to focus on

#

will probably be around the same time as ESP32 work

sick creek
#

thingflow made it smooth code

slender iron
#

I've added it to my watch later playlist

sick creek
#

it is kinda evolution from it i think

#

@slender iron as with this he used raspi as well and lux sensor was hooked to it as well

slender iron
#

makes sense :-0

#

๐Ÿ˜ƒ

sick creek
#

PyData end of this year going to be held in New York

#

sponsored by Microsoft

#

PyData New York 2017 is end of November

slender iron
#

@sick creek I can only go to new york so often

#

I live in Seattle so I could have gone to this one easily

sick creek
#

it's still tomorrow

slender iron
#

yeah, I decided not to go

#

I prefer to watch conference talks online

sick creek
#

there is those 5min talks

#

could you have able to firetalk about circuitpython for 5 minutes?

manic glacierBOT
sick creek
#

so scott started to test breaks

sick creek
#

tomorrow have cool sessions on livestream

#

like barking habits detection

sick creek
#

@slender iron have you watched PyData?

slender iron
#

@sick creek not yet, I've been focussed on my work

sick creek
#

you can keep it in the background

slender iron
#

I can't do that and be productive

sick creek
#

I can do that and be productive

#

even i went to see Spider-man Homecoming and get lots of ideas during it

manic glacierBOT
sick creek
#

like wearables and such

manic glacierBOT
#
[adafruit/circuitpython] New tag created: 1\.0\.0\-rc\.4
sick creek
#

nice RC4

manic glacierBOT
#

Random wacky idea: This is probably not worth the trouble, but I thought it was worth writing down.

I mentioned above that the determination of FAT12 vs FAT16 is based on the number of clusters. So below a certain number, the filesystem must be FAT12. This would seem to preclude formatting, say, a 2MB filesystem as FAT16.

However, I realized it may be possible to fake this. The FAT table has a special value to mark bad clusters that should not be used. For FAT16 it is 0xFFF7. So one cou...

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
sick creek
#

@slender iron what bluetooth was coming to circuitpython?

drowsy geyser
#

FYI, I'm making good progress on my CircuitPython robot! The chassis is done, as is power management and drive train. I take no credit for this since I just used John Parks' Arduino101 bot tutorial, except I'm replacing the 101 with a Metro M0 running CircuitPython 1.0.0 RC4. And it'll have sensors instead of BLE to avoid running into things.

slender iron
#

@sick creek the nrf52840 is what we're looking to time it with. though there is this pull request for the existing nrf52s: https://github.com/micropython/micropython/pull/3137

#

looking good @drowsy geyser

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
#

That's indicating an error. You have a typo with baord instead of board.
On Wed, Jul 12, 2017 at 1:11 AM mindforger notifications@github.com wrote:

i just updated to 1.0.0 RC4 and wanted to take some measureing for power
consumption ... but i am unable to turn off the status LED

import neopixel_write
data = bytearray([0,0,0])
neopixel_write.neopixel_write(baord.D8, data)

it is just changing from green to white and then blinks blueish until it
repeats

โ€”
You are recei...

manic glacierBOT
manic glacierBOT
manic glacierBOT
slender iron
#

oh boy, my rpi test code safe moded all three connected boards

marsh mirage
#

In the words of Scrooby doo, Roh row

slender iron
#

I think it was a test that did it actually

manic glacierBOT
#

Scott- I tried you example on an M0 Express - 2 issues
I think the OUTPUT has t be Upper Case
Then the last line failed
This was with 1.0.0.rc4-1 adn the lastest librry bundle 1.0.0-rc2 release
Did I miss an update?

import board
import neopixel_write
import digitalio
pin = digitalio.DigitalInOut(board.NEOPIXEL)
pin.direction = digitalio.Direction.OUTPUT
pixel_off = bytearray([0, 0, 0])
neopixel_write(pin, pixel_off)
Traceback (most recent call last)...

manic glacierBOT
manic glacierBOT
manic glacierBOT
#

Sorry I'm going to be terse but I'm on my phone and then sleeping. I just
answered this on the forum:
https://forums.adafruit.com/viewtopic.php?f=60&t=120169

It also sounds like you aren't connected to the repl. Doing so should
provide more detailed error messages for you. More info here:
https://learn.adafruit.com/micropython-basics-how-to-load-micropython-on-a-board/serial-terminal

Thanks and good night!
On Thu, Jul 13, 2017 at 12:17 AM mindforger notifications@github.com
wrote:

i tr...

manic glacierBOT
manic glacierBOT
#

i tried using AVR gcc that i use for my normal ATSAM/feather stuff
VM is a nogo on this machine and cygwin clashes heavily with the AVR compiler
did not test yet with MinGW
Win 10 is not available only Win8 for the same reasons a VM is a no-go
dual-boot the same ... i could setup a RPi as building machine :D
will give it a shot this weekend ... until then i will have to think on how i can log my data with other hardware

manic glacierBOT
manic glacierBOT
#

I recommend ubuntu. Debian arm gcc is very old.
On Thu, Jul 13, 2017 at 5:23 AM Dan Halbert notifications@github.com
wrote:

I use Ubuntu, and use the xenial 16.04 long-term release. It's great.
Follow the instructions here
https://forums.adafruit.com/viewtopic.php?f=60&t=112975#p564651 re the
packages you need. Bash on Windows is Ubuntu, so the instructions are
identical.

To use screen /dev/ttyACM0 to talk to the REPL, you will need to change
some permissions. You can f...

manic glacierBOT
sick creek
#

@slender iron well having win8 machine still as win10 do drivers automatic so it is easier so any of those it could be that users need to install drivers manually

slender iron
#

I don't understand what you mean @sick creek

sick creek
#

@slender iron for the issue #165

slender iron
#

I understand thats what you are referring to. I don't know what you are suggesting as a fix

sick creek
#

well uninstall and install drivers for it is easy fix if it's driver issue

slender iron
#

ah ok. I'll let them know that if they post to the forum

timber mango
#
  1 #!/bin/sh
  2 # --- Linux - mount the M0 Express board, without using the GUI - reference system: Debian 8 (Jessie)  x86_64
  3 
  4 # /media/${LOGNAME}/cypthon must exist and can be any mount point
  5 
  6 # sudo mount /dev/sdb1 /media/${LOGNAME}/cpython -o rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2
  7 
  8 # sdb1 must be enumerated -- check dmesg for the assigned volume name (if not sdb1).
  9 sudo mount /dev/sdb1 /mnt/sdb1 -o rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2
#

This might be my first day using CircuitPython strictly from the Linux Virtual Console. ๐Ÿ˜‰

slender iron
#

@timber mango I've been using pmount to mount it without needing root access

timber mango
#

@slender iron thanks! Haven't tried pmount.

slender iron
#

np! (there is also pumount for unmounting too)

manic glacierBOT
#

If you don't intend on changing the CircuitPython core, then you can just use prebuilt binaries. Travis CI builds every commit and places them here: https://adafruit-circuit-python.s3.amazonaws.com/index.html?prefix=bin/feather_m0_express/ Just match up the commit hash with the commit hash you see in GitHub and you should be set.

I'm going to close this because there is no action to take for us. However, feel free to follow up here, on Discord (http://adafru.it/discord) or on the forums.

timber mango
#

If CSS is suppressed (FireFox) it's fine.

slender iron
#

Did you try scrolling the tables?

#

realizes is using a touchpad

timber mango
#

@slender iron Cannot scroll -- is visually truncated.

#

Like, cutting a photo down the right edge with scissors.

#

Probably a box that is too small -- or a margin.

slender iron
#

yeah, I understand what you are seeing. I'll think about a fix. Its a bit tricky because its hosted on readthedocs.

manic glacierBOT
slender iron
#

I made an issue to track it (above)

timber mango
#

_@slender iron> made an issue to track it
Bueno!

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
timber mango
slender iron
#

@timber mango there is a scrollbar now though

timber mango
#

No it's visually truncated. Nothing to scroll.

slender iron
#

no scrollbar on the bottom edge of the table?

timber mango
#

No, and wouldn't make a difference if there were.

#

It's not painted.

#

My screenshot (above) shows what it looks like visually.

#

I'll try aurora (sp?) browser on it.

slender iron
timber mango
#

@slender iron Four different browsers agree on this -- they're obeying some CSS directive to truncate.

slender iron
#

on brave, firefox and chrome it is truncated but the scrollbar is present now

timber mango
#

I'll look but if it's truncated, what is there to scroll?

#

Okay. When the window is dragged smaller, the truncation gets even narrower. But no matter how large the window is dragged to be, the truncation has a maximum it is willing to open to.

#

also it centers and begins to expand the left margin of the right-hand bounding box unreasonably wide.

#

The whitespace to the left of the words "All of the boards " expands by a lot.

slender iron
#

what browser are you using?

timber mango
#

Several. Firefox Midori Chromium Aurora.

#

They all agree on this.

#

Remarkably consistent.

#

I'll try a tablet and whatnot as well.

slender iron
#

well on chrome and brave (both chromium based) they show the scroll bar which shifts the table

timber mango
#

That's really cool what it does on the tablet.

#

It scrolls in a new way I haven't noticed before.

#

Lightning is a web browser under the f-droid repository.

#

If I only ran Lightning on this tablet I'd not know there was any issue.

#

@slender iron FireFox supports the same method on the desktop -- afaict the cursor keys are the way it was meant to be scrolled. No scroll bar -- but it scrolls graphically. /weird new thing

slender iron
#

I'm confused why I see a scrollbar and you don't

timber mango
#

Okay now I see a scrollbar. It's embedded way down there.

#

Never looked that far down.

slender iron
#

๐Ÿ˜‰

timber mango
#

I think this one's on me. /egg_Faced

#

The other browsers like it too. They all respond to the four direction keys to scroll the table on either axis.

slender iron
#

ok perfect ๐Ÿ˜ƒ no worries. I appreciate your time figuring out whether its working like it should

manic glacierBOT
timber mango
#

@slender iron Just as long as I'm not wasting your time. You must regard everything I say with suspicion: I may be bs'ing you, or I may just be bs'ing you inadvertently. ๐Ÿ˜‰ /stolen_quote

slender iron
#

@timber mango I'd rather hear about something solved than not hear about something unsolved ๐Ÿ˜ƒ

#

CI testing is totally worth it. I'm finding lots of bugs ๐Ÿ˜ƒ

manic glacierBOT
manic glacierBOT
sick creek
#

@slender iron CI tester build is good right

slender iron
#

yup yup good to have

manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
manic glacierBOT
timber mango
#
import neopixel,board;np=neopixel.NeoPixel(board.NEOPIXEL,10);np.fill((5,0,5));np.write()

<< compressed one-liner syntax example

rain island
#

greetings

#

i am still trying to figure out how i can store data on the SPI flash using circuitpython

#

is there anyone who can help m,e with that?

tulip sleet
rain island
#

thank you PC just update and shutdown yourself withoput asking while i am afk ..

#

sorry i just went offline accidentially

#

i tried to install the compiled versions but they fail on me in safe mode and i still can not import storage to do the remount

#

i jut found an SD carda adaptor in my box and now looking for an SDcard lib for circuit python

#

i just need it temporarily to give me an insight on my setup

#

wait ... there is no SPI modul implementation for the feather mo express yet in ciruitpython ?

tulip sleet
#

Do you want to do raw writes to the SD card, or write to SPI flash filesystem? You have a Feather M0 Express, right? I can do a build from the master (2.0.x) branch and put it somewhere for you.

rain island
#

i have both as equal options, either write onto the SPI flash filesystem to read them out via USB or the SDCard (prefereable in a windows readable format)

#

the travis builds fail with safe mode on my express

#

i just want to log some data over a longer periode of time and analyze them later

#

nothing that would not fit in 1mb

#

i can use the API bus and a sdcard library i think

#

SPI

#

whichever one is easier for you to achive

tulip sleet
#

Then try that with the remount Scott mentioned in the forums.

rain island
#

runs fine for me too

#

and storage is also available, thanks a lotz mate

tulip sleet
#

you're welcome; good luck!

rain island
#

and sorry for my typos i am already on my third cup of coffee

#

and kinda exicted

#

one thing i noticed, when i write a boot.py, it becomes ALWAYS corrupted after a reset

#

so i cna always just repair and write a new one

tulip sleet
#

Are you on Windows? NEVER press the reset button or pull the USB plug before doing an Eject either with right-click or by doing a "safe remove" from the taskbar USB icon. It can take Windows up to two minutes to write all the data to the drive.

rain island
#

even with write cache disablked ... windows is so bad with this

tulip sleet
rain island
#

that's typical windows ... "let me give you an option that i totally ignore and still doing bad things you don't want"

#

oh wow .. that article is really gory

tulip sleet
#

FAT12 was used for floppies and maybe this behavior made sense once upon a time. But I think it may just be a bug. I am trying to get MS' attention on this - have some inside tracks. But that won't fix all the existin Windows 7 etc. boxes. "gory" -- yah, so just be safe and do Ejects. So if you are willing to work on Ubuntu or Mac you will have a less painful workflow.

rain island
#

i was not able to find a working COM driver for the m0 express on my win8 machine that keeps the MSC open unfortunately

#

on my W10 it works just fine

tulip sleet
#

Did you try just uninstalling all the Adafruit drivers in Add/Remove programs and then reinstalling? I have had that fix things on Win7.

rain island
#

it worked on my win10 that way but not on win8

#

but i have to move my stuff over to win10 in near future so no problem with that

tulip sleet
#

right - if it hurts don't do that (unfortunately)

rain island
#

i wish they would have stood with win7 as long as possible but meh the IT world is stupid

tulip sleet
#

On win10 you don't need to install any drivers for the M0 boards, only for FTDI and CP2102. The latest Adafruit installer doesn't bother to install the usbser drivers on Windows 10.

rain island
#

i borked the FTDI driver on my system ... i got a lot to fix on this win10 machine soon ๐Ÿ˜„

tulip sleet
#

I'll be here on and off today.

rain island
#

i am just figuring out how to change the launched pyfile ๐Ÿ˜ƒ

#

oh it's still hardcoded for the m0 express

#

can i set some variable in the boot.py that i can check in the code.py later on ?

tulip sleet
rain island
#

i want to decide on a jumper if i boot readonly or rewadwritrer and decide which py to run to display the selected mode

#

*readwrite

#

oh ah i get it, gicing it a try

tulip sleet
#

Put your different functionality in different modules or functions, and just call them from main.py as appropriate. Main.py would just be a small top-level that calls other stuff.

rain island
#

that is exactly wehat i thought of ๐Ÿ˜„

#

hm .. did not work as well as i thought

tulip sleet
#

abstraction is your friend

rain island
#

it seems the variable is beeing reset

#

or did i misunderstand the article

tulip sleet
#

no, maybe that's true, on soft-reset the state is cleared. Can you check the jumper again in main.py?

rain island
#

made a globals.py with x = 0 in it, changed the globals.test = 1 in boot.py and rechecked the globals.test in the code.py

#

oh darn

#

i am stupid but why didn't it fail

#

oh wait i had a misreading ... globals.py: test = 0 .... boot.py: import globals globals.test = 1 ... and int the code.py i made a blinker setup that checks if globals.test == 1: blinkslow

tulip sleet
#

so it did work or didn't work?

rain island
#

did not work yet

#

let me check there is something wrong

#

it soft reboots on time.sleep(sleepval) sleepval = 0.1

#

code.py output:
Traceback (most recent call last):
File "code.py", line 12, in <module>
KeyboardInterrupt:
soft reboot

tulip sleet
#

I don't see that error with sleep() in the repl.

rain island
#

he just fired an keyboardinterrupt while in sleep

#

nope

#

still set in globals

#

how unfortunate

#

but if i remember right i have read in the change notes that there is a full reset after running the boot.py for reasons

tulip sleet
#

Python variables state is not saved from boot.py to main.py. But you can just read the jumper again in main.py, after you use it to choose RO or RW in boot.py.

rain island
#

i will double check with a print in the boot

tulip sleet
#

Any print in boot.py will go to boot_out.txt.

rain island
#

sure this would be my alternative plan but i wanted to do it properly ๐Ÿ˜„

#

yeah jsut double checked they are lost ... okay then will do the alternative way

#

thank you for your help

#

now i can log my data

tulip sleet
#

I have to go buy an office chair! bye

rain island
#

don't go cheap on that, you will regret it

tulip sleet
#

Exactly - we have one cheap and one OK. I need one without arms - I aggravate my cubital tunnel syndrome by resting my elbow on the arm.

rain island
#

aggravate ?

tulip sleet
#

the funny bone nerve area gets tender

rain island
#

ah okay sorry never heared that word

#

i planned to hand myself into surgery to fix that