#circuitpython-dev
1 messages ยท Page 10 of 1
@edgy edge if you can point to a repo with the code, that would give the most context
@onyx hinge originally I was missing MP_REGISTER_MODULE but fixed it last night. I'll clean up my repository and create a single commit isolating my changes for this issue
I should have been subscribed to these new repos automatically, sorry, I didn't see these. WIll take a look.
@onyx hinge could you take a look at this commit? Ignore the readme, it is a work in progress it will get updated once the process works.
@analog bridge I had some questions and passed the esp32-camera fixes to @onyx hinge.
The NINA firmware is only used on ESP32 boards that are used as "Airlift" co-processors to a non-wifi board, like a SAMD51, so not relevant to the espressif port which has native wifi. This would be an enhancement to the espressif port, which does not currently allow for a payload https://docs.circuitpython.org/en/latest/shared-bindings/wifi/index.html#wifi.Radio.ping
which "this commit"?
@edgy edge did you mean to submit a PR, or just point us to the repo?
I meant to point to the commit in my fork but generated an incorrect pull request by mistake
I looked at the diffs. In some places you use CIRCUITPY_AULITECH_NEUTONML and in others you use AULITECH_NEUTONML.
Sounds fair to me. :) Unfortunately I was out sick yesterday so wasn't able to vote, but since it wouldn't have made a difference, I'm ok with going with "External Display".
It will need to be updated in https://github.com/adafruit/circuitpython-org/blob/main/template.md as well. That's what the comparison is being made to for regular boards. For blinka boards, I just have values in the checks file until I think of something better.
I don't see the problem. I built the firmware and opened it in the debugger. the new module is listed in mp_builtin_module_table: ```(gdb) p mp_builtin_module_table
$1 = {{key = 0x156, value = 0x94a0c <mp_module___main__>}, ...
{key = 0x4416, value = 0xa052c <neutonml_module>},
...
}
If you didn't try "make clean", then try it now. This could be a class of change that is not correctly tracked by the build system's dependency management.
@edgy edge ^
but ```Adafruit CircuitPython 8.0.0-beta.0-53-g676aa321a3-dirty on 2022-09-20; Aulitech Cato with nRF52840
help("modules")
future board onewireio touchio
main builtins os traceback
_asyncio busio paralleldisplay ulab
_bleio collections pulseio ulab
adafruit_bus_device countio pwmio ulab.numpy
adafruit_bus_device.i2c_device digitalio rainbowio ulab.numpy.fft
adafruit_bus_device.spi_device displayio random ulab.numpy.linalg
adafruit_pixelbuf dotenv re ulab.scipy
aesio errno rgbmatrix ulab.scipy.linalg
alarm fontio rotaryio ulab.scipy.optimize
analogio framebufferio rtc ulab.scipy.signal
array gc sdcardio ulab.scipy.special
atexit getpass select ulab.utils
audiobusio io sharpdisplay usb_cdc
audiocore json storage usb_hid
audiomixer keypad struct usb_midi
audiomp3 math supervisor uselect
audiopwmio microcontroller synthio vectorio
binascii micropython sys watchdog
bitbangio msgpack terminalio zlib
bitmaptools neopixel_write time
Plus any modules on the filesystem```
i'll do another make clean ...
winner. Thank you @onyx hinge and @tulip sleet
yay!
It's a weakness of make that a change (like adding -DFOO=1 to CFLAGS) doesn't automatically cause targets that depend on the value of CFLAGS to be rebuilt.
yes, but I've been around long enough and should've known that. Sorry to waste your time
it's no problem!
How about "Display Capable" ?
Blinka now has a python wheel for download from PyPI ๐
actually, I don't know what this means vs the previous PyPi release ๐
Before only source distributions we're uploaded, so there was also the local build process after downloading. Python wheels (and wheels in general) cut that later part out. So for the most part only the download is required.
I don't think it's massively important for us, but for a package like numpy it's a game changer because a wheel cuts out a lot of the local building required if you download the source and have to do a local install process.
Still, time saved is always good
thanks!
In the long run, this functionality is probably better put in the usb module (which right now has a somewhat different charter), but we can do a transition for that across major versions.
@idle owl should this line be indented inside the if conditional?
https://github.com/adafruit/Adafruit_CircuitPython_seesaw/blob/6234787515e2f0ece40b6408722ff0b42824038e/examples/seesaw_rotary_neopixel.py#L51
Probably?
meh. it was related to something that ended up being soldering. but still looks odd. think it should be like the simpletest code:
https://github.com/adafruit/Adafruit_CircuitPython_seesaw/blob/6234787515e2f0ece40b6408722ff0b42824038e/examples/seesaw_rotary_simpletest.py#L34
yeah saving the "last value" is something I tend to do indifferently in or out of that kind of test
I am using a Magtag (with an esp32-s2) and the code that connects to my router with 7.3.3 will not connect with 8.0.0-beta. No network with this ssid.
When I look at some recent commits, I see some tinkering with the resetting (or not resetting) of wifi. Maybe this is the cause.
If you have a way to test it, feel free to update it. I'm not able to right now.
Or file an issue, I guess.
Label it "Good First Issue" if you do.
Because that's a pretty good one.
The documentation pages for _bleio don't clearly indicate that there is only partial BLE support for the espressif port. (Implementation is in progress and tracked by #5926.) This should be documented clearly in more places to avoid disappointing users who might purchase these devices hoping to have full BLE support in CircuitPython. I don't know offhand whether it will be easier to add a note to the support status of each board in the _bleio module or whether it makes more sense to add a...
Hello ๐โโฌ ๐โโฌ
I made the changes required by issue #5713 , following the pattern used with OnDiskBitmap.
WaveFile and MP3Decoder can now accept either an open file pointer, or a string file path as parameter.
Changes tested on the Adafruit Pygamer.
Please let me know if this looks good.
Instead of this, update the existing documentation:
- Make the type of the
fileparameter beUnion(typing.BinaryIO, str) - Change the
:param ... file:line similarly. For the explanatory text, probably say "The name of a wave file (preferred) or an already opened wave file" - Change the example to use
wav = audiocore.WaveFile("cplay-5.1-16bit-16khz.wav")since will be preferred
Thank you! This looks very simple and sensible as a change. I do have a note about the documentation -- I only added a single comment but it looks like it applies equally to wave and mp3 sections.
In addition to that, if it is easy can also see whether you can make assigning a string to the mp3.file property can be made to work? If it is not easy, we can leave it for a future PR.
Does anybody know if CircuitPython's serial speed is always 115200 (https://github.com/adafruit/circuitpython/blob/main/supervisor/shared/serial.c#L133-L135) or does it vary by board?
@gilded cradle looks like that line of code would be common to any board using uart as console, just based on the file path
Looks like it varies after doing a search.
Thanks @onyx hinge but it looks like it's constructed in UART.c
oh! hm. I love being wrong
@jepler
I made the requested documentation changes. I chose to leave both options in the example, to be clear that both can be used if desired (at least for now). I hope this is okay.
mp3 = audiomp3.MP3Decoder("cplay-16bit-16khz-64kbps.mp3") # preferred use
# mp3 = audiomp3.MP3Decoder(open("cplay-16bit-16khz-64kbps.mp3", "rb"))
I am a beginner at working with something like CircuitPython core (first core contribution actually), so I can't speak to how easy it would be to add ...
I think you might not be wrong. I'm still poking around, but other frequencies appear to reference the busio connection to other peripherals.
@onyx hinge is the Union(str, typing.BinaryIO) with () or [] ? My doc check failed ๐
it is with []. If you look in the readthedocs, there are a bunch of examples
Thank you!
I'm finding my way through first core contribution ๐
OOps, I may have given the wrong advice, thanks for working on it though!
We are getting incredibly short on space on the non-Express SAMD21 builds again, so when #6247 is merged, this is probably going to make some builds too big. This is true even though I disabled the bulk of #6247 on the small builds. With #6247, before this addition, the arduino_nano_33_iot ru build has only 24 bytes free.
One suggestion, otherwise these look ok to me. Thanks for doing this. I didn't concentrate on these when I squeezed the other messages because these are used (mostly?) on boards with plenty of flash.
address is not the name of the arg but we can use that qstr here anyway.
mp_arg_validate_int_range(value, 0x00, 0x7f, MP_QSTR_address);
Looking for feedback - if I'm going to show people how to get started with Hacktoberfest, is it better to do it from within Windows rather than Linux? I would guess that's what most people are going to use, but I have no idea. It's also my bias because I definitely did start there.
I imagine that showing people how to use GitHub Desktop might be more useful for a larger group of first-time contributors than using VS Code git window or command line...
well, they might have a Mac
For library work, it doesn't matter, for core work, I would rather recommend vanilla linux
maybe WSL
Good point. And in that case, GitHub Desktop is available for macOS as well
If your target demographic is beginners on windows Iโd recommend Mu and GitHub desktop. Canโt use pycharm in windows with serial. VScode GitHub setup is very intimidating.
Ah right, Mu is good
@bill88t Would it be helpful if I ran your WiFiTester script for the extra data? I tried running it on my Feather ESP32-S3 4MB Flash / 2MB PSRAM but I didn't know how to handle the .env part (forgive my ignorance on this).
Happy to try and help, just need a pointer or two.
This bug is totally stalling my project on the Feather ESP32-S3. :/ I don't seem to have the option for this platform to downgrade to CircuitPython 7.3.3 either. I've ordered a Feather ESP32-S2 to see if I can reproduce...
This pr is to try to get the Waveshare ESP32-S2 Pico boards to 7.3.x before the final release.
I do not know if this is the right way to do this, as I am still a newbie to git.
(I just copied the files from the one branch to the other)
I have built 7.3.x for the non-display variant, and it works just fine.
I assume the display variant will work similarly fine.
Would it be helpful if I ran your WiFiTester script for the extra data? I tried running it on my Feather ESP32-S3 4MB
@saketvora It would be useful to get a reading from ESP32-S3 as to confirm it's behaviour.
For the .env please take a look here
If the board has no CIRCUITPY usb access, you can from within the repl do something like:
>>> from storage import remount
>>> remount("/", False)
>>> a = open("/.env", ...
This issue most certainly though affects all esp boards. Someone should update the tags too.
@saketvora
This bug is totally stalling my project on the Feather ESP32-S3.
A temporary workaround would be to simply force the board to always .reset() upon code completion as this bug occurs only on soft reloads.
I don't seem to have the option for this platform to downgrade to CircuitPython 7.3.3 either.
You can try to build it if you'd like. Not gonna claim it will work, but you can try. Building
(mak...
How can I tag a circuitpython build to have a specific name?
I kinda need it to propely tag the picow builds as 8.0
because for some reason they are tagged as 6.0
even though they are 8.0
In the long run, this functionality is probably better put in the
usbmodule
Yeah, I think we discussed it in a line-comment thread above originally. It definitely would fit in a usb. namespace, but since the usb module right now is for a host api that would require some restructuring there and I'm not sure if and how PyUSB api-compatibility would work.
Hm? It used to build just fine what is the issue now?
Hm? It used to build just fine what is the issue now?
The board.c files have changed.
If you can use 8.0.0-beta.something on these boards, then we'd rather just push forward. We won't have a 7.3.4 unless we find a significant bug that we feel we have to fix in 7.3.x. In general we don't backport boards.
that's a problem with pulling the tags, how did you clone the repository/branch ?
Hello ๐
Could someone help me with my PR please? https://github.com/adafruit/circuitpython/pull/6931
After making the requested documentation changes, all the checks passed... except for one, that timed out after like 6 hours.
Thinking it was a fluke, I did a rebase to trigger the checks again ... this time there were 12 failed checks with the same error as in the pic.
I made another small change + commit ... now one failed again, in a different spot, with a different makes-no-sense-to-me error.
I'm lost!
looks like network errors on github's side, we can ignore it and merge if needed
Oh, okay... phew, thank you!
I didn't know what I was doing wrong, after the first commits went so well ๐
ah I know the issue, try that:
git remote add adafruit https://github.com/adafruit/circuitpython
git fetch --tags adafruit
The failed job was a CI failure (not your fault). GitHub Actions has been somewhat flaky the past few days. I am rerunning the failed job.
Thank you! It looks good now. Changing how the mp3decoder's file attribute works can be done later.
I just git tab -a 8.0.0-picow and it good now
Got it to boot ljinux btw.
But the wanna-be kernel module did not like the wifi driver lacking ssl.
I should add a failover for that.
Many thanks though!
@austere acorn well done on that PR to the core! ๐
Thanks for taking on this work! A number of people have asked for it.
I made some detailed comments. I would also note that we may want to get this to fit on the SAMD21 builds, which are very tight on code space for right now. If that's not possible, we need to make this optional to save the code space.
Since you here Jepler, this is a nice moment to thank you for your work!
I will go stress test what works on the picow.
oh, yeah, not much works and we're not ready for bug reports about it yet.
oh alright
but you're welcome
basically this is pre-alpha ๐
yea tbh
got mine connected, pinging both ways tho
its not insignificant
Wish I could actually help with the code..
My C is terrible though.
your testing is helpful, don't worry, there are many ways to help, and we appreciate it!
OK, will merge after the latest tweaks I made!
Tested this on Linux with a Metro M4, using lsusb. One interesting thing is that the manufacturer string is overriden by a known VID name. I had to try several before I got the mfr name I supplied to go through (e.g. try 0x0001 for the VID, and you'll get "Fry's Electronics")
Thank you @s-ol, and sorry for the delay!
@mdroberts1243 Closing this for now, please comment if you are still having this trouble.
Thanks for this! We want to make our API's be the same or a subset of what CPython provides. For that reason, could you make utime() take a 2-tuple instead of a plain int? Ignore one or the other value, I guess, or require that they are the same.
You can skip the ns argument support.
From https://docs.python.org/3/library/os.html#os.utime):
os.utime(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)Set the access and modified times of the file specified by path...
@onyx hinge @tulip sleet Thank you very much! ๐
If you have the time, could you give me a bit more details about what you asked for the MP3Decoder ?
I want to make sure I have the right idea.
Was it to add another MP3Decoder class property, like the file pointer, bits_per_sample, channel_count and so on? One that would store the file name and path as a string?
@austere acorn I'm not sure, that's why I suggested to postpone it. I know that existing code assumes the mp3file.file object is an open stream. so maybe a new method mp3file.open that takes a str...? My original mp3 project, jeplayer, uses the file property: ```py
def change_stream(filename):
"""Change the global MP3Decoder object to play a new file"""
old_stream = mp3stream.file
mp3stream.file = open(filename, "rb")
old_stream.close()
return mp3stream.file
Later it uses the tell method on that file to estimate the playback percentage: `playback_display.progress = mp3file.tell() / file_size`
so what if change_stream becomes: mp3stream.open(filename); return mp3stream.file? That seems like a nice improvement.
I think this is a more general problem of finding a consistent way of noting what is not implemented and what works.
In general we have noted these kinds of limitations in the Learn Guides for each board. Many pages are shared or "mirrored" so this does not make guide maintenance onerous as it sounds. Sometimes we forget to note such things.
We could make these notes in readthedocs, which comes from shared-bindings. But many beginners do not know about readthedocs. Or we could perhaps...
Oh, I see, so you could change the file used by the Mp3Decoder, without having to worry about closing the old file and opening a new one
And I'm assuming that same behaviour makes sense for WaveFile too
It's less important for WaveFile. It's important for MP3Decoder because MP3Decoder needs to allocate a few large chunks of memory. If you repeatedly construct your MP3Decoder within your program, you eventually get a MemoryError.
and because WaveFile is on even small devices like samd21 we don't want to unnecessarily add 'stuff' to it
so I'd do it only on MP3Decoder at this time
Okay, makes sense!
We can't tell whether USB is going to be available or not. When the board powers up, we don't wait for USB, since we might wait forever. It's just not available at the time the remount() runs, so the remount() succeeds. We probably don't want to restrict remount() to being in boot.py only, because there are use cases for being in code.py, on, say, a battery-powered device.
we need to maximize both memory and storage available for machine learning models. Would it be advisable to remove modules we're not using? Any red flags in this list? We are using the stock XIAO nrf52840 BLE SENSE. Would there be any significant benefit to including BLE and IMU in the circuit python build instead of as libraries? We do use the USB port for debug and file loading```
Remove
adafruit_pixelbuf audiobusio audiocore audiomixer audiomp3
audiopwmio bitbangio bitmaptools displayio fontio
framebufferio keypad msgpack neopixel_write onewireio
paralleldisplay rainbowio rgbmatrix rotaryiosd cardio
sharpdisplay synthio terminalio touchio usb_midi
vectorio
Keep
_bleio adafruit_bus_device aesio alarm
analogio atexit binascii boardbusio
countio digitalio dotenv errno
getpass json math microcontroller
nvm os pulseio pwmio
random re rtc storage
struct supervisor time traceback
ulab usb_cdc usb_hid watchdog
zlib```
The builtin modules are in C and cannot be loaded as libraries. So you'll just need to pick and choose what you'll really need. Can you store the models in the external flash
the display-related modules are probably not important to you and could be turned off
or at least some of them
would any of these be unsafe to remove? ```
adafruit_pixelbuf audiobusio audiocore audiomixer audiomp3
audiopwmio bitbangio bitmaptools displayio fontio
framebufferio keypad msgpack neopixel_write onewireio
paralleldisplay rainbowio rgbmatrix rotaryiosd cardio
sharpdisplay synthio terminalio touchio usb_midi
vectorio
do you have an attached display? If not, then they are fine to remove
keypad is useful if you have attached buttons
is there anything like a module dependency graph documented or derivable? It's hard to know where is something like terminalio is used
there are some dependencies reflected in the builds, but they are not complete. See py/circuitpy_mpconfig.*
terminalio is used for displaying the REPL on a display
no displays no buttons, nothing attached. Just onboard mic, imu and ble. would terminalio be used for USB serial debugging/ development?
Remounts in code.py should I not be mistaken are meant to be done only when one of the following is true:
- the board only supports web-workflow
- boot.py disabled usb access
In any other cases we should be getting a RuntimeError, yes?
If this is not the case it introduces a new issue:
We have no way of knowing if usb access is enabled from code.py.
It can take up to 3s for usb to init.
The code.py in that time cannot know.
And an early remount (even if used to test usb) can m...
You can use supervisor.runtime.usb_connected to check whether USB is available: https://docs.circuitpython.org/en/latest/shared-bindings/supervisor/index.html#supervisor.Runtime
no, only on the display
it's pretty easy to see when you have unmet dependency, because you will get a compile-time error
thanks. I was afraid of unresolved externals at run time that might not be caught easily
makes sense and perfect answer
is setting CIRCUITPY_<module> 0 in /circuitpython/ports/nrf/boards/aulitech/mpconfigboard.mk the correct way to remove from build? Or will I expect some trial and error to find other build dependencies?
That's exactly right. If you browse the other nrf boards you'll see various boards with things turned off (e.g. the satellite boards)
That is a different thing but fine.. (usb_connected != usb_enabled)
So are the early remounts (along with the read-only bug) the intended behaviour?
Thanks @DavePutz for diagnosis. The stack size on SAMD21 boards is very limited due to the limited ram (32kB). And if we increase the stack size, then some programs don't run because they run out of heap memory.
I incorporated the program into a single code.py and avoided the error. You can also put
import supervisor
supervisor.set_next_stack_limit(<4608 or larger)
in boot.py. This will cause code.py to run with the specified stack size.
See https://docs.circuitpython...
I am having a similar error but have the mentioned library in the lib folder on my Pico. I've also verified the init file is an .mpy and not .py. I saw that was an issue elsewhere.
Do we have a learn guide on dualbank module?
Nope!
So are the early remounts (along with the read-only bug) the intended behaviour?
We cannot tell whether USB connection is going to happen or not. So it's working as intended, but the usual idea is to do the remount in boot.py, not code.py.
huh funny, doing display.root_group.scale = 2 on a board with a builtin display, makes the scale keep growing on every reload
whoopsie ๐
it's a hack to begin with, but it's cool that it (kind of) works, might make it easier to show text on an M0 without using adafruit_display_text
(no idea if it's actually corrupting memory by writing "outside of the screen" or anything)
that's weird, what do you get when you print display.root_group.scale?
1
I used that to get a bigger terminal on my robot, but I didn't notice it growing every time, just once as you'd expect
maybe it's specific to a particular (kind) of display
seems like it's getting propagated?
something is doing scale = scale * new_scale ?
right, on the contents of the group, probably
if I change it in boot.py it's fine since it changes only once, but I suspect I need to use reset_terminal
or something
the REPL text goes outside of the screen
(I'm testing on 7.3.3 right now too)
the scale on root_group gets reset, but not on its contents, and when you set it to 2 again, it multiplies the contents again
I bet there is code that compares the old value and the new value, and updates the contents based on that
(just guessing, though)
I did not run into this when I did the same thing a couple of weeks ago. I will test with this code to verify - it's possible we resolved the issue in 8.x.
Pull request was closed due to lack of time to finish for now.
Hacktoberfest 2022
We believed this was fixed due to #6384.Feel free to re-open or file a fresh issue if you still encounter the problem.
Not (yet) supported:
- Various getters and setters of
wifi.radio listen,bind,acceptare not implemented (no servers)
Also these modules/features are not supported or enabled yet:
- ssl
- mdns
- web workflow
At this point, it passes a couple of very simple tests (ntp and plaintext http with adafruit_requests), but is probably not particularly robust.
A big shout out to pico-sdk for providing a great basis for work, and micropython for modlwip, large portions of w...
Once build artifacts are available on #6933 I welcome feedback about what is/is not working from others. Please keep in mind the caveats in the initial comment of that PR.
What format do I need to upload something to YouTube? MP4?
`Quick question, is ssl on the todo list? As you said, its rather important.
If anyone that run/records the meetings remembers their settings ๐
@tulip sleet do you want me to make the pico/picow share a USB PID/VID or do you want me to request a new PID from raspberrypi?```Running USB VID/PID and Creator/Creation ID Duplicate Checker...
Duplicate VID/PID usage found!
- VID/PID: 0x239A:0x80F4
Boards: raspberry_pi_pico, raspberry_pi_pico_w```
that is our VID (239a), so we can just assign one of own. It should definitely have its own PID
oh it is?
OK, in that case -- can you do that for me? or is it time for me to learn how?
it's easy - an internal repo
mkv works equally well.
Yup, agreed that ssl is important.
Also if using OBS, it gracefully handles crashes by closing the file when using mkv. MP4 does not.
Thanks!!
Yup, agreed that ssl is important.
also thanks for all your work! I'll be testing as soon the PR build worker has finished!
@tulip sleet for picow I need submodules that are current living inside pico-sdk. also those are needed ONLY for one board, not for the whole port.
What do you advise me to do in ci_fetch_deps.py for this?
jimmo noticed to me that micropython puts copies of those submodules under lib/ so they don't have any recursive submodules, should i do that? and just list it for the whole raspberrypi port?
separated submodules in ports/raspberrypi sounds ok to me, we just need to keep them sync'd up with the pico-sdk version
ideally in the long run I would like to see different options for different submodules: e.g. shallow for broadcom firmware, full for small repos, recursive as necessary ,etc. I think we could figure that out but not right now
we don't support raise ... from ... right ? Or more accurately it ignores the from part ?
it's used in the miniMQTT library and that kind of hides the original exception because of that
hi everyone, i'm using a QT PY ESP32 Pico and trying to subscribe to the adafruit MQTT broker. i'm following this Guide but when I try to run the code, I just get an exception and the exception doesnt Actually say anything.
it's used in a few libraries in fact, we should look into that maybe
ah there:
Exception chaining not implemented
https://docs.micropython.org/en/latest/genrst/builtin_types.html#exception-chaining-not-implemented
ah that doesn't mention "from" though, but same thing
Is there ANY way to get a Trinket M0 to act as an I2C "slave" with CircuitPython??? I got ten I need to talk to. Don't wanna use C. Teaching some students.
I don't think i2cperipheral (now i2ctarget in CP8) is implemented on SAMD21 at all
it's on SAMD51, RP2040 and Espressif
uart token ring? ๐
makes me think that I would like to make an addition to the support matrix, or an alternate page, with support by port/variant
(so if it's not implemented on M0 you don't go looking through the list of boards to see if one has it enabled)
Does somebody know offhand which source file sets the neopixel to indicate CP statuses?
Like when it drops to the REPL the pixel changes colors. Just blanking on where that is
oh the code that changes the color
This just means not implemented though, right? CircuitPython basically ignores the from error portion right?
Not that it's a switch to be turned on, rather checking that writing that doesn't cause an issue.
raise from is just an explicit way to do exception chaining, which is normally implicit when raising from an except, and exception chaining is not implemented
so yeah they allowed the syntax but ignore it
I don' think I ever realized it was implicit like that, thanks!
I didn't know either, the python docs mention it:
Exception chaining happens automatically when an exception is raised inside an
exceptorfinallysection. This can be disabled by usingfrom Noneidiom
>>> try:
... raise OSError("hello")
... except Exception as ex:
... raise ValueError("world")
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
OSError: hello
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 4, in <module>
ValueError: world
>>>
What is the best mapping in a shared-bindings implementation for a C library function with float *inputs parameters? Is mp_obj_get_array() the way to go? ```i
// CircuitPython
import neutonml
nml = neuton()
my_floats.tile(my_floats.float32(0), 10)
nml.set_inputs(my_floats)
// Shared-bindings/neutonml/Neuton.c
STATIC mp_obj_t neutonml_neuton_obj_set_inputs(mp_obj_t self_in, mp_obj_t inputs)
{
int len, status;
float items
mp_obj_get_array(inputs, &len, (mp_obj_t) items);
status = shared_module_neutonml_neuton_set_inputs(self_in, *items));
return mp_obj_new_int((mp_int_t)status);
}
// shared-module/neutonml/Neuton.c
int8_t shared_module_neutonml_neuton_model_set_inputs(neutonml_neuton_obj_t *self,
float inputs)
{
// call the C lib here
// int8_t neuton_model_set_inputs(input_t inputs);
return neuton_model_set_inputs(inputs);
}```
Built latest commit on my ovahclocked af Pi400, after tagging it 8.0.0-picow-01-887c259
Adafruit CircuitPython 8.0.0-picow-01-887c259 on 2022-09-22; Raspberry Pi Pico W with rp2040
The scans always find some networks duplicated:
Pi400
Pi400
Pi400
Pi400
Forthnet-AKzTk
Pi400
Feline34
WIND_2.4G_422DEA
COSMOTE-403528
WIND_C02F18
WIND_C02F18
WIND_C02F18
WIND_2.4G_9DE02B
WIND_2.4G_9DE02B
WIND_2.4G_9DE02B
WIND_C02F18
Created a [code.py](https://git.port...
Just saying: Displaying 333 boards. <= I know some in Adafruit are obsessed by numbers... so that is a number that talk to me. ๐
It is an Arduino-shaped esp32 dev board, and i use the the basic esp32 board when i use micropython.
I ended up rebasing it, was getting weird conflicts but they're gone now.
Anyone have a thought offhand on why when my ESP32-S2 custom board goes into the REPL all the pins seem to be set to high (the built in LEDs all turn on).
If I set up one of the pins as a DigitalInOut the pin gets set low
Yeah they are set in there. I vaguely recalled some change that they may be resting high now (didnt do that in 7.x when I last tried this).
oh in pins.c I did. I guess in board.c I could then default them low of course
Thanks @jaunty juniper. Defining the double tap pin also fixed the problem then of reset always going into boot mode.
Now just to figure out why it seems to exception into REPL after a reset IF I'm connected to a computer (vs straight power)
The scans always find some networks duplicated:
I agree, though I saw the same thing with the pico-examples network scan program. If this is a concern for you, you can report it upstream.
I'm trying to figure out the best way to wrap a 3rd party C library for circuit python. Almost done, but need to learn the best way pass arrays of floats. The library contains two functions that don't match any examples I can find: /// /// \brief Make a prediction /// \param index - pointer to predicted class variable (binary/multi classification). Can be NULL. /// \param outputs - float[] array of neuton_model_outputs_count() elements, contains predicted target variable /// (for regression task) or probabilities of each class (binary/multi classification). /// \return Zero on successful prediction. Result > 0 - model not ready for prediction. /// int8_t neuton_model_run_inference(uint16_t *index, float **outputs); /// /// \brief Set input values /// \param inputs - input_t[] array of neuton_model_inputs_count() elements /// \return Zero if model ready for prediction. Result < 0 indicates error, result > 0 - model not ready for prediction. /// int8_t neuton_model_set_inputs(input_t *inputs);
I ultimately hope to duplicate this functionality to SAMD51.
Yes, that would be great!
Also - not sure if that is already the case: Support for [ulab.numpy.ndarray arrays would be great, so that the fast Numpy-like methods could be applied to sampled data.
should i wrap the returned results in a python dict? like this```
STATIC const mp_rom_map_elem_t mcu_processor_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_frequency), MP_ROM_PTR(&mcu_processor_frequency_obj) },
{ MP_ROM_QSTR(MP_QSTR_reset_reason), MP_ROM_PTR(&mcu_processor_reset_reason_obj) },
{ MP_ROM_QSTR(MP_QSTR_temperature), MP_ROM_PTR(&mcu_processor_temperature_obj) },
{ MP_ROM_QSTR(MP_QSTR_uid), MP_ROM_PTR(&mcu_processor_uid_obj) },
{ MP_ROM_QSTR(MP_QSTR_voltage), MP_ROM_PTR(&mcu_processor_voltage_obj) },
};
STATIC MP_DEFINE_CONST_DICT(mcu_processor_locals_dict, mcu_processor_locals_dict_table);
const mp_obj_type_t mcu_processor_type = {
{ &mp_type_type },
.name = MP_QSTR_Processor,
.locals_dict = (mp_obj_dict_t *)&mcu_processor_locals_dict,
};```
CircuitPython version
8.0.0
Code/REPL
# none
Behavior
In https://docs.circuitpython.org/en/latest/shared-bindings/support_matrix.html the "array" module should be listed, but it's not.
Description
No response
Additional information
No response
Thank you @bill88t
Board: Adafruit ESP32-S3 4MB Flash 2MB PSRAM
Adafruit CircuitPython 8.0.0-beta.0-57-g32d8dd425 on 2022-09-16
WiFi network: 2.4GHz only, WPA2, Asus ZenWifi XT8 (mesh).
Location: 40ft from router through walls (i.e.., not close by or with line of sight)
Sorry, I just downloaded the latest WifiTester code from the GitHub link today but the results.json doesn't seem as well formatted for me. Here's the raw data:
`{"version": "8.0.0-beta.0-62-gb6f67be3e", "espmem_afte...
Hi @dhalbert ,
Thank you for your review and feedback! I have completed the changes to accept a Tuple[int, int], and ignore the second int. Please let me know if you have any comments.
As you anticipated, there are a few builds that get too big with this change. Please let me know if there is anything I can help with.
Thank you in advance!
Adafruit CircuitPython 8.0.0-beta.0-65-g5781bd318 on 2022-09-22; Raspberry Pi Pico W with rp2040
with requests.get(TEXT_URL, headers={"User-Agent": "๐ฅง๐ฎ",}) as response:
This is a test of Adafruit WiFi! If you can read this, its working :) ๐
@saketvora
The data is exported as a simple json by the wifi tester, I manually formatted them to be more readable.
Wait. "CompleteFail": 0 and PartialFail": 11???
So ESP32-S3 behaves differently..
The fact that CompleteFail is 0 means that at none of the 50 .env-less runs did it go blind.
So the bug's different there?
This bug is totally stalling my project on the Feather ESP32-S3.
From these results it means it can see at least some wifi's most of the times.
(Partial...
Just so I make sure Iโm clear youโre trying to return an array of floats from your function?
Iโm on my phone so canโt look up code easily but I believe you would create a Python array object and then fill it my mp_float objects.
Creating a float is something like mp_new_float(float f)
The array I canโt recall off the top of my head
i am getting an error trying to get the patch compiled
(.venv) ~/projects/circuitpython/ports/raspberrypi$ make -j4 BOARD=raspberry_pi_pico_w V=1
GEN build-raspberry_pi_pico_w/genhdr/mpversion.h
make: cmake: No such file or directory
make: *** [Makefile:95: build-raspberry_pi_pico_w/pioasm/pioasm/pioasm] Error 127
make: *** Waiting for unfinished jobs....
i am getting an error trying to get the patch compiled
(.venv) ~/projects/circuitpython/ports/raspberrypi$ make -j4 BOARD=raspberry_pi_pico_w V=1 GEN build-raspberry_pi_pico_w/genhdr/mpversion.h make: cmake: No such file or directory make: *** [Makefile:95: build-raspberry_pi_pico_w/pioasm/pioasm/pioasm] Error 127 make: *** Waiting for unfinished jobs....
Do you have cmake installed?
Is there a reason rainbowio is excluded? Just curious, since afaik its just a basic function?
i am getting an error trying to get the patch compiled
(.venv) ~/projects/circuitpython/ports/raspberrypi$ make -j4 BOARD=raspberry_pi_pico_w V=1 GEN build-raspberry_pi_pico_w/genhdr/mpversion.h make: cmake: No such file or directory make: *** [Makefile:95: build-raspberry_pi_pico_w/pioasm/pioasm/pioasm] Error 127 make: *** Waiting for unfinished jobs....Do you have cmake installed?
whoops... i thought that it was a part of build-essen...
Hm, my manual build has it. Perhaps he disabled it for rom storage?
I remember in another discussion that the idea was to implement something into circuitpython to pull this off? For my intents, I would be using HE-AACv2.
cmake is a new requirement. It's used to build pioasm from pico-sdk, which wasn't needed before.
Is there a reason rainbowio is excluded? Just curious, since afaik its just a basic function?
It's disabled for an obscure samd21 port, not for pico w.
CircuitPython version
This has been checked with:
- `adafruit-circuitpython-hardkernel_odroid_go-en_US-20220920-b6f67be.bin`
- `adafruit-circuitpython-hardkernel_odroid_go-en_US-8.0.0-beta.0.bin`
- a locally built version based on `b6f67be3e`
Code/REPL
# none, no REPL access, fresh flash without any file changes
Behavior
Running the various CircuitPython versions previously mentioned on my odroid go, I am unable to access the REPL via seria...
@codetyphon Hello.
Can you please let me know how you chose the USB VID:PID when creating this PR?
This PR should not be merged until https://github.com/creationid/creators/pull/20 is merged
If we want boards to be valid Python identifiers, we have more work to do and should do them all at once with a major release. Better to do it as soon as possible, or decide once and for all that board names are NOT required to be Python identifiers.
The following boards have hyphens in their names:
cp32-m4
kicksat-sprite
silicognition-m4-shim
ai_thinker_esp32-c3s
ai_thinker_esp32-c3s-2m
beetle-esp32-c3
lilygo_ttgo_t-01c3
lilygo_ttgo_t-oi-plus
morpheans_morphesp-240
raytac_m...
ah that bothers meeee
โฏ ag 'USB_MANUFACTURER *= *"Adafruit"' | wc
20 60 1967
โฏ ag 'USB_MANUFACTURER *= *"Adafruit Industries LLC"' | wc
45 225 4803
that too
ports/espressif/boards/adafruit_feather_esp32s2_tft/mpconfigboard.mk
4:USB_PRODUCT = "Feather ESP32-S2 TFT"
ports/espressif/boards/adafruit_feather_esp32s2/mpconfigboard.mk
3:USB_PRODUCT = "Adafruit Feather ESP32S2"
โฏ ag 'USB_PRODUCT = "Adafruit' | wc
4 27 482
I'm also super bothered by the upper cases in Seeed_XIAO_nRF52840_Sense
but that's because I have a script that lets me use tab-completion to build a board
Don't look in the ATMEL ports and see all the Adafruit boards with the "Adafruit_" leading them but the similar boards all have it
yeah Adafruit didn't put adafruit_ in their board IDs in the beginning, but at least it's lowercase ๐
I'm using a third-party C library for machine learning. This is how it would get called from C input_t inputs[] = { feature_0, feature_1, ... feature_N}; if (neuton_model_set_inputs(inputs) == 0) { uint16_t index; float* outputs; if (neuton_model_run_inference(&index, &outputs) == 0) { // code for handling prediction result returned in index and outputs } } but I will be calling it from python and I'm not sure how to handle pass by reference parameters in the shared-bindings code.
A recent module analogbufio is similar in taking an array of floats in for processing in the object BufferedIn. You create an array and pass it to the call
passing in the array is the easy part. I'm confused about returning the pass by reference results in index and outputs
instead of passing by reference would it be preferable to return an object { result: x, index: y, output : [] }
In Python you don't have to return the array I believe. You just fill it in with your values and that object will have them. If you look https://github.com/adafruit/circuitpython/blob/e045415f59526bd0ec0107e0308834031f453d20/ports/raspberrypi/common-hal/analogbufio/BufferedIn.c#L150 The DMA loads into self->buffer (if you look above that is the array). The function call does not return anything.
As you say the alternative is to not pass in an array and create one yourself and return that. That may be better if you want to size the array according to result yourself.
Just noticed this on my Android 13(?) phone
is that going to format an Adafruit device, or your phone? ๐
thank you for the pointer very helpful and very fresh
@austere acorn my device I'm sure
CircuitPython version
Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Matrix Portal M4 with samd51j19
Code/REPL
import ulab
Behavior
Adafruit CircuitPython 7.3.3 on 2022-08-29; Adafruit Matrix Portal M4 with samd51j19
>>> import ulab
Traceback (most recent call last):
File "", line 1, in
ImportError: no module named 'ulab'
>>> ```
### Description
7.3.2 contains the `ulab` module as does 8.0.0-beta.0
circuitpython.org ...
7.3.2 contains the ulab module as does 8.0.0-beta.0
circuitpython.org isn't listing the ulab module for the MatrixPortal 7.3.0:
<img width="643" alt="Screen Shot 2022-09-22 at 7 29 05 PM" src="https://user-images.githubusercontent.com/29906257/191881876-79bd6399-b6c1-410c-a20a-a3865a069536.png">
Yep that is intentional and was the subject of a discussion. I'm sure it can be revised.
https://github.com/adafruit/circuitpython/pull/6779
https://github.com/adafruit/circuitpython/pull/6809
Is there an alternative method for using ulab on the matrix portal. The software-based RGB brightness control library I wrote (PaletteFader) depends on ulab.
Thanks @Neradoc. I dropped a comment/question in https://github.com/adafruit/circuitpython/pull/6779
Wi-Fi promiscuous mode also seems to be broken, I can't get this code to output anything in 8.0 after the first run even after reboots:
import wifi monitor = wifi.Monitor(channel=1, queue=128) while True: packet = monitor.packet() if packet != {}: print(packet)
This also produces no output:
`for network in wifi.radio.start_scanning_networks():
print("\t%s\t\tRSSI: %d\tChannel: %d" % (str(network.ssid, "utf-8"),
network.rssi, network.channel))
...
As @Neradoc suggests, following are the two approaches for extending CIRCUITPY:
- Static Approach: Turn off
dualbank, removeota_1partition and extenduser_fspartition during build.
This is addressed in #6927. - Dynamic Approach: Add API to turn off
dualbank, combineuser_fsandota_1at runtime.
I believe we need both, the static approach can be for boards which have a large overflow and require either turning off multiple modules or just dualbank, latter look...
Now, if the i2c bus is locked, camera operations that might access the bus will raise an exception instead of using the bus without taking the lock.
Testing performed:
- ran a random demo on esp32-s3-eye
- in repl, verified that when the bus is locked the error is raised, and not otherwise
>>> i = board.I2C()
>>> cam = ...
>>> cam.vflip
False
>>> i.try_lock()
True
>>> cam.vflip
Traceback (most recent call last):
File "", line 1, in
OSError: [Errno 11] EAGAIN
>>> i...
Hi @idle owl ๐ (or anyone else who deals with the libraries ๐ )
I noticed that in this documentation https://docs.circuitpython.org/projects/charlcd/en/latest/api.html all the examples use lcd = character_lcd.Character_LCD_I2C(i2c, 16, 2), even those for character_lcd.Character_LCD, character_lcd.Character_LCD_Mono, and character_lcd.Character_LCD_RGB that all have a different set of parameters defined.
Is this a mistake, or am I missing something ?
@proven garnet I'd like to point out that Blinka does indeed work on a pico:
https://learn.adafruit.com/circuitpython-libraries-on-micropython-using-the-raspberry-pi-pico
(not that it's in anyway clear what that person in the GPS library issue is actually doing)
Ah gotchya, thanks for pointing that out. So downloading MicroPython firmware + Blinka libraries is valid use?
yeah
the person is linking to a MP forum discussion that doesn't seem to use blinka though, so ๐คท
@skickar can you file a separate issue for monitor? (I haven't yet tried anything past 7.3.x.)
Gotchya, updated the comment. Thanks for correcting me!
(if the comment is still wrong let me know)
it's a MP question, let them deal with the MP forums I say ๐
setting the clock from a source is an interesting use, maybe we could implement an rtc module in blinka just for that
Haha fair, I thought it was a running code locally on the computer or something. But yeah, looking more at it, I see that now. It was clear they had an interpreter, so now I see it with all the puzzle pieces that it was the MicroPython one haha.
it's tech support, people rarely start by saying what board they are using, what software, and volunteering the full code from the get go, instead... screenshots ! (Do they know we can't use the scrollbar in the picture ?)
Is there an alternative method for using
ulabon the matrix portal? The software-based RGB brightness control library I wrote (PaletteFader) depends onulab.
As per the discussion we had at the time, we figured if anybody needed it, a custom build of CircuitPython would work (though you'd probably have to disable BLE in its stead). Perhaps when https://github.com/adafruit/Adafruit_CircuitPython_PortalBase/issues/59 is addressed (depending on results), it might be able to get optimize...
Thanks. Good to know. Iโll stick with 7.3.2 and will place a note in PaletteFader to warn users. A note in CircuitPython.org would be helpful to bring attention to the one-off incompatibility. Is there a possibility of creating a ulab library instead?
This is great, actually useful already! Do you want to hear about issues yet at this very early stage, and if so... where?
e.g.,
โข doing socket operations (NTP, HTTP) in a loop every minute or two works fine, but if the loop delay is longer, say 5 minutes... OSError: [Errno 118] EHOSTUNREACH (NTP) ...device still has an IP address
โข intermittent [CYW43] got unexpected packet -9 pop up, even when code is not running (just chillin' at the REPL prompt)
Iโll stick with 7.3.2 and will place a note in PaletteFader to warn users.
This discussion reminds me of https://learn.adafruit.com/ocean-epoxy-resin-lightbox-with-rgb-led-matrix-image-scroller/circuitpython-code -- it was coded before matrixportal, but does use ulab & rgbmatrix together.
This discussion reminds me of ...
... and was the inspiration for the palette calculation portion of PaletteFader. Thank you @jepler and @ladyada!.
Also, ulab was fundamentally useful for the bilinear interpolation method in https://learn.adafruit.com/improved-amg8833-pygamer-thermal-camera.
Does the FatFs library used in CP provide functionality to re-size partition without loosing data?
The behavior below is correct, but the Exception type / error message could be more helpful.
Example problem code and results
Adafruit CircuitPython 7.3.2 on 2022-07-20; Adafruit QT Py ESP32S2 with ESP32S2
>>>
>>> import wifi
>>> import socketpool
>>> from secrets import secrets
>>> wifi.radio.connect(secrets["ssid"], secrets["password"])
>>> pool = socketpool.SocketPool(wifi.radio)
>>> server="nosuchhostname"
>>> pool.getaddrinfo(host=server, port=443)[0][4][0]
Traceback...
Hi @jepler ! ๐โโฌ ๐โโฌ
Based on our discussion in #6931, I added a method that takes a mp3 file name as input, opens the mp3 file, and replaces the old opened file in the current MP3Decoder object.
Please let me know if this is what you had in mind, and it looks good.
Thank you!
@jepler
This seems to be more of a mode of use problem, than an actual bug.
I think one way to definitively solve this is to turn MP3Decoder into a singleton, and not allow multiple instances of it.
Would this be possible / desirable in CircuitPython ?
I seem to have seen this a lot (or a very similar pattern).
I wonder if it could be the issue of Thonny reading the status/mounting of the CIRCUITPY volume?
When I tested it, first time around it seem to fail but (at my end) will work if I manually mount the CIRCUITPY volume in a file manager and re-run.
I asked the dev. about it here
I don't think it's a mistake... But I'll be honest with you, this library isn't in my wheelhouse. I don't know it well enough to definitively say one way or the other. I assume each type of display is different, and therefore has different parameters, but that's only a guess.
I asked because the examples in the code folder https://github.com/adafruit/Adafruit_CircuitPython_CharLCD/tree/main/examples are different, using the correct parameters, but the documentation is not consistent.
yeah all the inline examples for the base class (which takes pins) are examples for the I2C subclass
The docs in character_lcd.py are not consistent
It's entirely possible that the docs are not correct. But I would want verification on that from someone more familiar with it than me before saying that.
If it's helpful, I could open an issue, or straight up do a PR with the changes, and have someone verify and confirm?
If you don't mind the possibility of doing the work and then having it not be necessary, please do put in a PR with the fixes. If you'd rather avoid that, file an issue. Both allow for discussion and verification, but the PR route would be more forward effort on your part. (Unless Neradoc has an explanation as to why it's currently correct. They are typing, and I don't know whether it's a response to you or not.)
nah
Wanted to make sure I wasn't stepping on anything!
@austere acorn In that case, what I said stands. Completely up to you, but one or the other would certainly be helpful.
the examples are correct, but they are for a subclass of the class they are written in, which is a little weird, but you can't put them in the subclass, since the methods don't exist in the subclass docs
Huh.
I don't care much for examples in the methods documentation anyway
Fair enough.
Wow.
maybe it can detect if there's an error signaled with the path of a known module, and put a link to the docs
like, wrong number of arguments in neopixel.py ? here's a link to the docs !
Oooh. That would be brilliant.
@onyx hinge Since you're the only one around, I'll mention it to you. I'm going to put in a PR to reorder the pin names on the Metro M4 Grand Central. PhilB is doing the PrettyPins, and it came to my attention that the far less-used feature pin names are first in the list. So dir(board) is showing those, not the silk D names. Doing this before Phil did the PrettyPins would have been super helpful to him, but it is what it is. I still think it should be updated to match the now-updated PrettyPins, and to make the more likely-used pin name first in the list. Any objections?
I think the dynamic approach is a great solution - as it's something users can just do (be pointed to when they query the limited about of flash available), rather than depending on the build system to make multiple versions.
Thanks for jumping on this @MicroDev1 :)
Hi everyone, I'm working with MQTT and had some implemention questions
When we run the MQTT loop, is there continuous polling happening in the background or is there an actual event driven things happening?
I'm trying to conserve battery and would like to implement something that isn't wasting battery by continuously polling for data
Since wifi is expensive battery wise
@onyx hinge Nevermind. Looks like CircuitPython lists both the silk pins and the PCC pins in dir(board) which seems weird to me, but there it is. I thought it only listed the first instance of the pin name in pins.c? Which is why we swapped the order of LED and D13 on all the boards. Anyway, apparently no PR is needed.
it lists them all, I believe in the order they are in pins.c
That did not used to be the case, I thought.
which is why we put the preferred name first
oh actually no it doesn't change the order, it changes which is the default
by which I mean:
>>> board.D13
board.D13
>>> board.LED
board.D13
because:
{ MP_ROM_QSTR(MP_QSTR_D13), MP_ROM_PTR(&pin_GPIO13) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO13) },
OH..... right.....
yeah.
Ok.
I knew that.
What is that from? It should be LED first, lol.
Thanks for reminding me of what I apparently forgot.
it might change the order the underrated help(board)
D12 -- board.D12
D13 -- board.D13
LED -- board.D13
that's the Feather RP2040
@pine tartan polling via .loop(), see: https://github.com/adafruit/Adafruit_CircuitPython_MiniMQTT/blob/main/examples/native_networking/minimqtt_adafruitio_native_networking.py
Makes sense, feel free to tag me for reviewing, but I'll not look at it tonight
Okay I'll forget it then
I have been playing with an esp32 proS3 and wifi has been almost completely unusable BUT only when I have the board connected to my desktop via the usb-c cable. At first I thought it was because I was screened into the board's terminal but it didn't matter in the end.
Using the same code, without change, it connects to WiFi almost 100% of the time after reboots. I have an ssd1306 connected which display the wifi status, which is how I confirm its connection (ip address) in addition I keep ...
@MicroDev1
I upstreamed my local changes
I am not quite sure on how to stress test this..
Do you want me to expand, fill the storage and then md5 all the files?
Boots just fine on my waveshare_esp32s2_pico with .uf2
No data loss.
The Dualbank is effectively undocumented.
Do I take the .bin?
Does it work with tinyuf2?
How am I meant to know the offsets?
Assuming it's functionallity is as written in the docs, it seems pointless to have the partitions "split" by default.
From my point of view, it would be best if the dynamic system was implemented, but "expanded" being the default.
99% of users will prefer the lots of storage instead of the bank switching.
Build Artifacts can be found here.
Testing the artifact on waveshare_esp32s2_pico.
After a nice swift backup of the current ljinux installation, I ran the commands specified.
After CIRCUITPY came back up, I restored the ljinux installation and powercycled the board.
First 500kb wget:

Matches with my Pi400:
,1)
BASE_CFLAGS +=
-Wno-strict-prototypes
-Wno-missing-prototypes \ why was leaving to play with the last minute percent nice 96% OK we're leaving in commensurate
-Wno-float-equal
else
-Wstrict-prototypes
-Wmissing-prototypes
-Wfloat-equal
endif```
@edgy edge headers for third parties should be in paths that are included by -isystem, not -I or -iquote. That stops any messages that would occur directly in the headers (so probably the strict-prototypes diagnostics would be fixed this way)
You can place your own correct prototypes for functions in header files you control, which will fix missing-prototypes.
If you determine that float-equal is a mistaken warning, you can disable it on a per file basis by putting a line in the file at the top: #pragma GCC diagnostic ignored "-Wfloat-equal"
You can also apply CFLAGS on a per-file basis, like so: py/py.mk:$(BUILD)/extmod/ulab/code/%.o: CFLAGS += -Wno-missing-declarations -Wno-missing-prototypes -Wno-unused-parameter -Wno-float-equal -Wno-sign-compare -Wno-cast-align -Wno-shadow -DCIRCUITPY
If you want to do it just for a region of code you can use #pragma GCC diagnostic push/pop.
and of course you should consider whether you can contribute improvements to your upstream's code generator to make it better
Thank you! Another great answer
The newer build doesn't work with psram so I cannot test.
esp32s2 has basically no ram without psram.
I may try on c3 in the next few days.
I thought maybe this would be mp3file.open, open_file feels a bit like a redundant name.
Thanks! I have some feedback. I also didn't do any testing. If you did test, it would be helpful to say what you tested.
can skip this check. Passing the wrong type will be detected inside mp_builtin_open_obj, with a message like TypeError: can't convert 'list' object to str implicitly.
Can skip this check, it's guaranteed that the file was just opened in byte mode by the arguments to mp_builtin_open_obj.
Thank your for the feedback, I am learning the project structure and macros, so this is very helpful.
I will make the changes you requested.
I forgot to mention in the original text, but yes, I did test the code, on the Pyportal Titano, and PyGamer.
Seems to be working correctly, replacing the file in the MP3Decoder object, and play file works as expected.
18% of adafruit_requests.mpy (1580 bytes) is due to static typing! https://gist.github.com/jepler/9ae2dbe8fda6ee5ff9e9360efe3bc157 is my newest idea of how to address it. The idea is, we'd astrogate the .py file to fix the static typing additions, then mpy-cross the result.
for instance in adafruit_requests.py, it replaces the line 'if sys.implementation.name == "circuitpython": with 'if 1:', which allows mpy-cross to eliminate the 'if' test itself as well as the whole 'else' branch. A couple of other idioms I identified are supported as well, and in particular you can write ```py
from future import annotations
try:
from typing import TYPE_CHECKING
except:
pass
if TYPE_CHECKING:
you can write a novel here, it's OK
If you need
```py
try:
from typing import TYPE_CHECKING, cast
except:
def cast(t, v): return v
the overhead seems to be 22 bytes, after it's transformed to def cast... inside an if 1:.
(you can also write except ImportError: to placate pylint and it's the same zero/low overhead in mpy-file-size)
it's called "astrogate" because it uses python's Abstract Syntax Tree, a parsed form of the Python code, to reason about what to do
Build failure in build-doc is:
Warning, treated as error:
Using the :property: flag with the py:method directiveis deprecated, use ".. py:property::" instead.
Error: Process completed with exit code 2.
Bad edit, and fixed another issue too. Thanks.
what is that ??
>>> sphinx.__version__
'5.2.0.post0'
make html throws an error in the template because of that I think: too many values indeed
File "/Volumes/CaseSensible/circuitpython-dev/venv-test/lib/python3.9/site-packages/sphinx_rtd_theme/layout.html", line 13, in top-level template code
{%- set (_ver_major, _ver_minor, _ver_bugfix) = sphinx_version.split('.') | map('int') -%}
ValueError: too many values to unpack (expected 3)
(and that's after I sorted out the new :property: error)
Wow that has to come from a sphinx related update, I didn't get that locally.
Now when I try to make locally with a fresh venv I get that:
WARNING: Using the :property: flag with the py:method directive is deprecated, use ".. py:property::" instead.
WARNING: Using the :property: flag with the py:method directive is deprecated, use ".. py:property::" instead.
WARNING: Using the :property: flag with the py:method directive is deprecated, use ".. py:property::" instead.
WARNING: Using ...
so if I pip install sphinx==5.2.0 it's fine
Ok this time the CI does give the same error I get locally:
An error happened in rendering the page BUILDING.
Reason: ValueError('too many values to unpack (expected 3)')
This is a sphinx-rtd-theme issue:
https://github.com/readthedocs/sphinx_rtd_theme/issues/1343
We can temporarily set the sphinx version to 5.1.1
Anyone know what this error means in core PR checks ?
@jepler
I made the requested changes.
There is one failed check, I don't know what that error means.
it looks like it's complaining about the docs in imagecapture using / (declaring arguments before it as positional only)
but why did that never come up before ??
I can only reproduce it locally by running python 3.7
No idea... as far as I know, I didn't change anything there. I just made some required changes in my PR about MP3Decoder
also I see in your PR:
//| def open(self, str) -> None:
it should be something like:
//| def open(self, filepath: str) -> None:
but that's unrelated
It looks like there are some funky things affecting the documentation build right now, we'll get it sorted out. I'll ping you on that PR if you need to take any action
We can temporarily set the sphinx version to 5.1.1
Mind adding that to this PR? If you do please tag me for reviewing.
Okay, thank you! ๐
My PRs do seem to find **all ** the weird CI errors... ๐
@jaunty juniper I don't know if you are working on that PR fix, but the recommendation is sphinx!=5.2.0.post0, which seems good to me (rather than pin to 5.1.1). If you don't have time to do it now I will push a new commit to your PR.
doing it now
@tulip sleet we may need to also pull that fix back to 7.3.x
though I guess we are not otherwise planning a future 7.3.x release atm
maybe it will get fixed before we do any more 7.3.x releases
if any is right, I have nothing in the pipeline for 7.3.4
Pushed the workaround:
sphinx!=5.2.0.post0
weird, this next error ... https://github.com/pandas-dev/pandas-stubs/issues/296 links to several bugs reported against mypy about it, and .. they fixed it by pinning python back to 3.10.6? https://github.com/pandas-dev/pandas-stubs/pull/298
Describe the bug I have a project running mypy on panda-stubs. To Reproduce See https://gitlab.com/biomedit/sett/-/jobs/3016695046: $ mypy /usr/local/lib/python3.10/site-packages/pandas-stubs/_conf...
mypy fix <https://github.com/python/mypy/pull/13500 > not yet released: https://github.com/python/mypy/issues/13385
yes I should have linked that too. still don't grasp why a python upgrade would have triggered any difference though.
I didn't spot any further problems, but I didn't test either.
oh this is why: https://github.com/python/cpython/issues/94996
If this finally builds it's good to merge. I added the 3.10.6 python pin for the doc build
Hello all,
I have been working on porting CircuitPython to a Nucleo-64 development board from ST (https://www.st.com/en/evaluation-tools/nucleo-f446re.html).
The Dev board has a STM32F446RE MCU, that comes with 512 KB of flash and 128KB of SRAM. Maybe not enough to run applications that require a GUI, but enough to run apps that use SPI, I2C, ADC or USB protocols.
Also supports USB composite device (serial + mass storage)
I made a screenshot with the serial console over USB, with a ...
Unless you were being paid by Adafruit industries for this work, don't write "for Adafruit Industries" here. The same comment applies through the rest of this PR.
Some small notes. I didn't spot any other problems, but the CI process may find additional items to address. Note that right now we're having some trouble in the CI process due to some recent updates to other packages so a failure result may not indicate you have to take any action.
I think these may all be unnecessary since 4cb69a51d5a51d27d92f2be24e248da1f14c87e8, please remove and verify it still builds.
Over in #6944 we temporarily worked around https://github.com/python/mypy/issues/13499 by using an older Python.
Remove this workaround once mypy has released their fix: https://github.com/python/mypy/issues/13385
How did you select these IDs? It appears that this is allocated by Adafruit for a different product under the Arduino programming environment, so it may not be appropriate for this board.
The failure is an unrelated doc build problem, so I'll merge anyway.
OK, looks good, thanks for this cleanup and space saving!
@skickar To avoid an error: TypeError: unsupported types for __mul__: 'NoneType', 'int' I use the following code:
n = wifi.radio.ping(ipaddress.ip_address("8.8.4.4"))
if n:
print("Ping google.com: %f ms" % (n*1000))
else:
print("Ping to google.com failed")
because when the result of the call to wifi.radio.ping() is 'None' (which happens) your code is trying to multiply 1000 with None.
As with all 'critical' calls it is be...
I tested the pull request build artifacts with the ble_adafruit_clue.py example on a Clue and confirmed that the Tone service now works from the iOS Bluefruit Playground client. (It did not work with previous CircuitPython 8.x builds.)
Hmm - I thought I had merged #6800 (which was added to 7.3.x) into main, but I maybe I didn't? Anway, glad it fixed the Tone Service in 8.0.0 as well.
Why do a hard reset in erase_filesystem()? Can't we just re-mount the new filesystem and soft reload?
void common_hal_storage_erase_filesystem(void) {
#if CIRCUITPY_USB
usb_disconnect();
#endif
mp_hal_delay_ms(1000);
(void)filesystem_init(false, true); // Force a re-format. Ignore failure.
common_hal_mcu_reset();
// We won't actually get here, since we're resetting.
}
Running into this issue on a brand new Feather ESP32-S3 using https://learn.adafruit.com/adafruit-esp32-s3-feather/circuitpython-internet-test. Doesn't work when plugged into my computer's USB port but works on battery (and via 5V power from the Matrix Featherwing
Yesterday I was testing "CircuitPython's Web API" and it had a very modern looking user interface. Latter in the day the user interface was changed. What is going on?
there is a simple web page hosted on the board, kept simple for size, but it can load an advanced interface from code.circuitpython.org if it has internet access, so that might be what you saw
you can access /fs/ or /serial/ for the basic access or /code/ for the enhanced version
Not sure if it was related but I tried the web interface for the first time yesterday and received the simple interface, though the board had internet access. Maybe something was up.
But honestly I forgot to just try the code.circuitpython.org url.
>>> import board
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: no module named 'board'
```well that's a curious error
"are you sure you didn't mean beard?"
@idle owl if you get a sec sometime can you create a repo under adafruit for https://github.com/FoamyGuy/Adafruit_CircuitPython_DisplayIO_FlipClock This was my latest project from Limor and I think it's pretty much ready to publish / add to the bundle.
Thanks so much -- I tried /code/ and it worked.
<@&356864093652516868> the weekly meeting is set to occur in about 2 hours from now at 2pm Eastern / 11am Pacific US time. If you plan to participate you can add your notes to the shared doc here: https://docs.google.com/document/d/1eqMwdLfb53MKA5T1Ck5D1lJQCDSs7naD7hZwnAid0-c/edit?usp=sharing We look forward to catching up with everyone participating.
CircuitPython Weekly Meeting for September 26, 2022 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...
One of the rare meetings I can talk!
okay. would remove the functions. thanks
CircuitPython version
Adafruit CircuitPython 8.0.0-beta.0 on 2022-08-18; Adafruit Feather ESP32S2 with ESP32S2
Board ID:adafruit_feather_esp32s2
Code/REPL
https://github.com/adafruit/Adafruit_CircuitPython_BME280/blob/main/examples/bme280_simpletest.py
import time
import board
from adafruit_bme280 import basic as adafruit_bme280
# Create sensor object, using the board's default I2C bus.
i2c = board.I2C() # uses board.SCL and board.SDA
bme280 = a...
It was because it's possible/likely we need to re-enumerate USB, and that the host might be confused. It was designed to be used for repair.
I have looked at the other boards in the stm port. All of them had the USB_VID=0x239A (Adafruit) and for USB_PID I have picked up one unused ( I taught :) )

Maybe it should be the VID from ST since it's a development board from them ?
@tulip sleet can you advise on #6945? ^
Unless you have a reason to keep the repository local to you, you can instead transfer ownership to the Adafruit org, and then it appears as-is on the Adafruit repo list. If you prefer to keep the original on your account, I can create a repo for you.
I forgot about transfering repo's being an option. I gave that a try using this screen in the settings (pic)
But afterward it reports this error to me (error pic)
@lone axle Transfer it to me first.
I'll transfer it to Adafruit.
Always worth trying, but if it fails, do the intervening transfer first. ๐
looks like that one did go through
I can answer re policy
thank you Dan
Thank you! I'll get RTD set up for it this afternoon. iirc I am able to do that and transfer it over to the acct with the rest of the library docs on it.
and PR the bundle.
Pretty sure you can do RTD, but there's one step you might not be able to do. Ping me while you're doing it do I can verify the steps you're taking, and if needed, complete the final step.
I think the hook is still good if you do it before transferring too, for future reference. I tested it on the iBeacon library and it still seemed to work after transferring over.
We'll fix it in prod!
๐ uff. Terrible!
good to know, thank you. I had assumed it needed to be set up after transfer.
twitches
@onyx hinge @tulip sleet I want your thoughts on the current pin situation on the Grand Central. Not sure it's worth putting in the weeds. Might make more sense to save it for later here.
We used to give out Adafruit PID's (we have an internal master list), but we stopped doing that a while ago for various reasons. Now if you need an independent VID/PID, we suggest you go to https://github.com/pidcodes/pidcodes.github.com if you cannot get one from the manufacturer. There is some discussion of ST sublicensing PIDs here: https://www.google.com/search?q=st+get+usb+pid+site:community.st.com, but I don't see it as a simple process. Does the board identify in any way with an ST VID...
sure, can ask later; I think it may have a straightforward answer
pidcodes may not be appropriate unless the board's open source .. or am I confused?
hmm, yes, though I'm not sure what else to do in this case
pid.codes on second thought may not be the best choice, since it is directed to open-source hardware. ST is the best source. Could you do some more research on that? If it seems like a dead-end I will consult internally about assigning an Adafruit one.
I see you just pushed an ST PID. Where did you get the PID from?
@jepler @dhalbert I replaced the USB VID and PID with the ones generated by STM32CubeIDE, and it seems to work.

The name has been selected (it is still possible to change it) but more importantly the board that need it have been tagged with PR such as #1030 and #1029 .
@lone axle time codes
https://towardsdatascience.com/python-3-14-will-be-faster-than-c-a97edd01d65d (I think it's tongue in cheek)
negative seconds ๐
A browser-based IDE for CircuitPython supported microcontrollers. No installation needed. Handy and powerful.
Yay to new reviewers! ๐ฆ
thank you.
Tekktrik!
I thought so but I wasn't sure in the moment ๐
Easy to do when you have a home field advantage ๐ Thanks!
And thank you for being here part of it @idle owl ๐
@idle owl this community we've built together has become the one I measure all other communities against.
thank you for being such a driving force
At the risk of referencing internet memes/lingo, "this so much". There's so much that this community does right.
Admittedly I do the same. ๐
I was away from the computer, so late thank you for the hug report, @tulip sleet !
And thank you everyone else as well for being so awesome! ๐
I never dared to contribute to open source before.
@austere acorn keep it up! we can always use more help
August 18 so a bit past 1 month at this point
(djdevon3's pcb)
What a "the silkscreen is free real estate" chad
@onyx hinge if you didn't come across it, check out LibCST. It works with visitors the same way I believe ast does, but as a concrete syntax tree it can keep track of things like whitespace and comments.
Those NeXT keyboards were so great!
Since it's a development board from ST, then VID can be the one from ST.
The PID should be the one that ST uses for a USB device that exposes itself as CDC (communication device class ) + MSC (mass storage class), but I can't figure out how to generate one.
The PID I used is the MSC generated by the STM32CubeIDE, and the board with my CircuitPython port is recognized on both my linux, and windows machines, so it's seems to work.
not out yet, don't ask?
Ok, and there is a RP2040 feature I did not understood.
They will find it from the guide I guess.
learn guide I mean.
Sounds fine with me
@proven garnet So basically like this? py mqtt_client = MQTT.MQTT( broker=secrets["broker"], port=secrets["port"], username=secrets["aio_username"], password=secrets["aio_key"], socket_pool=pool, ssl_context=ssl.create_default_context(), )
Yup!
Ok, rad. The main guide for MiniMQTT does it like that. I see what you mean.
Maybe in the "support matrix"?
USB Host on RP2040 is like that.
Wifi support in some board where there is a wifi chip but no support are like that too.
Could be in the release notes? Because it change from version to version... But no one is reading the release note before buying.
100% what Kattni said, I saw people complaining about it
Sometime I know about a limitation because I follow those meeting... but sometime I was surprise even with my involvement.
Warning the product page is only for product from Adafruit or resell by Adafruit.
We need a "pretty pins" or badges approach to included features and CircuitPython modules.
in general the shop page should also say "Circuitpython support is in alpha there might be missing features and isntability" on S3 and C3 and such, like it used to say on the feather STM32
Don't forget the non Adafruit board...
Implementing what CGrover said would also help with the M0 limitations
That's harder for us to control.
I see a lot of people trying to use M0 boards, and getting frustrated when they get the memory errors
We don't have those boards, so testing the features on all of them is not possible.
Since they don't know CP is limited
Yeah, we're doing our best to push folks towards other MCUs. But as long as we're selling M0 boards, folks will buy them.
Badges like bluetooth, wifi, LCD screen onboard, stemma qt, etc..
Thanks
... and expect to use all the CP libraries at once too ๐
Thanks!
Exactly!
Thanks!
Thanks, everyone!
That one we've gotten through to most folks, but it's not 100% prevented. Intermittent new folks still try to use the whole bundle.
You mean an M0 board doesnโt have a terabyte of flash? ๐
Was text only, but had a question I think was talked about during in the weeds: the BLE support on espressif is not fully complete? Was briefly looking at it last night and wanted to confirm
it doesn't support starting a service, which is most uses
I did see someone complaining that it's like 90's limitations in MCUs, why don't they just add more memory ๐
So if you have badge, you need a badge that say "no support" another one that say "full support" and one that is "partial".
want an HID device ? start a service. Want to be able to connect from the Bluefruit app ? start a service !
โWhy donโt they just add more memory? But I still want the board to only cost $3โฆโ ๐
So I think S3 has limitation.
but it can send advertisements and connect to existing services
dangit I used to study french and I still never made the Glaude / Chaude connection
for example the adafruit_ble_radio library works fine between an S3 and a C3 board
or you can connect an S3 to a NRF52 running a UART service
(I did that as a demo for a reverse USB-BLE-UART adapter)
Thanks. I noticed I couldn't create an UART service and then saw it wasn't implemented. Wasn't sure how much was done. Probably don't have time to play with it now anyways
That is going to help me explain. Or "Claude Francois" if that singer is know in the English Speaking World? (also Claude is a first name, so frequently I have to explain it is with a G, that is why I write David GLAUDE so that I try to make it obvious where is the family name).
I will say this is one frustration Iโve had when starting projects - itโs hard sometimes to figure out which boards will support all of the things I need for a given project. But short of building a web app that lets you pick the specific capabilities and bundle libraries you want to use and then tells you which boards support those features and have enough flash for the libraries, I donโt know how youโd solve it. And building/maintaining such a configurator app is a substantial undertaking.
Back the "caveats" (is that the name), the first thing would be to list the most common mistake/complain from people that buy a board to later discover what they want to do is not supported.
Yes, caveats is correct.
The badge idea, I suggested that to the support for sensor, to have an Arduino logo and/or a CircuitPython logo. Because I have a very few number of I2C sensor not supported yet, or not supported at acquistion time. But if I had listen carefully (and not forgotten) to Limor video, I would have know.
For the "WIO terminal"(?), I made the edit to the board to put a warning on the absence of Wifi support. But despite that, I had a friend that got it and was "sad" it was not there.
I have been thinking for a while of adding an automatic list of supported features per port to the matrix (or a new matrix) by parsing what modules are on each board for this port and then showing "all" "not supported" or "some", this could be added to the modules list already computed on every release and shown on cp.org
And I was thinking of adding a manual list of caveats/additional info to that, so that each module can be indicated as full or partial support (and "more info" on things like the alarm module limitations on pull ups vs down etc.)
So you have caveats per MCU: "On that chip we cannot do X (totally/partially/at all)."
it only sunk in when I heard how David pronounced it; somehow i thought it had a Germanic pronunciatiation for the "au"
the problem being maintaining the manual part
Then you have caveat per "module" where a module is not 100% full on some platform. (BLE is there, but not X or Y).
I think itโs a good idea. Just challenging to keep up to date on the caveats.
we could parse for .. note or .. warning or some other stock thing in the rtd docs
But maybe itโs a case where imperfect information is still better than no information.
Yeah, it must be automated and I think in the Download page of CircuitPython.org, a bit like the support mattrix. Also see: https://github.com/adafruit/circuitpython-org/issues/1052
Maybe oversimplification but even looking for the Not Implemented exception being in a shared-module folder would be a strong hint
that would make the relevant info closer to the problem, and easier to maintain
the rtd text would have a standard way of of listing the flagged ports and or boards, using the standard names. I don't think we have to specify what's missing in the circuitpython.org lists -- that will be in the doc when you link to it. Just flag that you should take note
because the actual restrictions can be complicated
Sometime the "Not Implemented" is missing like: https://github.com/adafruit/circuitpython/issues/6527 but if there is a Not Implemented in the module, I guess that is true.
Based on meeting discussion on 20220926: Less than 1% of the board have a camera, and if someone want to use a camera in CircuitPython (s)he will have read one learn guide that explain the working board, the working camera and the limitations. So adding that as a feature is not a big win.
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/1p3AthJvTLLbLhqsiL6_ZHBQkj7CUSQ_IOJdc9Dnu4Hw/edit?usp=sharing
CircuitPython Weekly Meeting for October 3, 2022 Welcome to the CircuitPython Weekly meeting notes! Feel free to add your Hug Reports and Status Updates early. During the meeting, we go through them as a round robin sorted by username. If you canโt make the meeting and would still like to part...
@lone axle - are you working on the Newsletter PR?
pushed the changes and then didn't make the PR. Sorry about that. It's created now: https://github.com/adafruit/circuitpython-weekly-newsletter/pull/384
thanks!
@onyx hinge @tulip sleet Will you both be around tomorrow?
There are several of us waiting for ESP32S3 BLE support. It's been a very long time coming...
Good support requires changes in the nimble library we use internally. So it's not as straightforward as one would like.
@idle owl yes should be available most of the day
Scott alluded to having NimBLE people working on adding dynamic service start to it, I don't know if that's a thing that is happening ? ( @tulip sleet @onyx hinge do you know ?)
I didn't get into this until a bit later than I had imagined. RTD Project is created: https://readthedocs.org/projects/adafruit-circuitpython-displayio-flipclock/ and I added adabot as a maintainer. From this guide: https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/sharing-our-docs-on-readthedocs it looks like the last step is the webhook which I don't seem to have access to settings page in order to set up, I must have been remembering one of my own community bundle repos for the ones I'd done before.
I think it's ready for the webhook setup. If there is anything else I need to do still let me know once you have a chance to get into it.
I will take care of the webhook. I think I have a backlog of projects needing it, so I'll try to get through them this week.
Neither here nor there, but if there are any other folks here who looked forward to the PyDev of the Week posts that get linked in the newsletter. There hasn't been a new one for a few weeks but author indicates on Twitter that the posts will be returning, perhaps next week. https://twitter.com/driscollis/status/1574498928019415040
@MakeMyAndroidAp Yes. I have enough of a lead now that I am starting them up again next week
I still need more though. The holidays are always hard to get through
Is there a pure python wheel for Blinka? Big news for pyscript.
Is there any reason Circuit Python would not work with the SAME51J20A Curiosity Nano Evaluation Kit? I have not tried, but was thinking of purchasing the kit esp if it can do circuit python.
he was discussing that with them, but I don't know how far it's gotten
It would work, but would require a custom build, though it would not be hard to make one.
Thanks, good to know. I will consider buying it, if nothing else there are the regular methods of programming it, just looking forward to circuit python on it for some of the apps already available. ๐
Not there yet.
Couldn't find a pure Python 3 wheel for 'adafruit-platformdetect>=3.13.0'.
Thanks, Dan. ๐
Hey folks, the September Melbourne MicroPython Meetup is on tomorrow evening (in Australia, 6:30pm AEST), I think some of you may like some of the content!
On the meetup page you'll find an agenda and links to the zoom stream, MicroPython discord and a site that displays the meetup time in your local timezone.
We will record and publish the sessions in case you can't make it. Hope to see you there!
This reverts commit 645cb6c2a591c49b9473b6fd182e5acd51b11a68.
Closes #6946
These are treated as warnings by extract_pyi, so they don't stop the build process. It's still good to fix them!
Thanks! Style is to put a space after the :, and spaces around the =.
This seems fine to me, especially for a dev board. Thanks for finding out about the PIDs.
Some small notes. I didn't spot any other problems, but the CI process may find additional items to address. Note that right now we're having some trouble in the CI process due to some recent updates to other packages so a failure result may not indicate you have to take any action.
Thanks ! Impl looks good. I still need to figure out how to make this fit, so I will leave it open for now.
As an alternative to #6950 arrange to run black on each "//|" stubs block within bindings and shared-bindings, so that the formatting is made consistent at every commit.
Reasons not to do this right now: It churns a LOT and I was not attentive enough to review everything.
that causes a bit of churn.. 228 files changed, 1411 insertions(+), 2027 deletions(-)
I think this is a good idea, since it canonicalizes the documentation.
One thing I do not understand is the removal of blank lines. Are you running black on the entire extraction of //| lines in each .c file?
Here's a typical set of changes, where blank lines between the defs are removed. This is not what black would do if they were all in one file:

Running black manu...
@tulip sleet @onyx hinge So, Grand Central pin names. Turns out most of the pins are the D-names first (which has me confused about a different thing, but that's... a different thing). There is a chunk that is not. I'd prefer them to match the silk as the primary pin. I guess I wanted your opinions on it. This is what is affected. ```>>> board.D14
board.TX3
board.TX3
board.TX3```
I think it's a total of 6 pins.
@idle owl if it's more consistent, go for it
agree - make it like the silk. The order was probably done long ago before we realized what the order should be.
Krad. Thanks!
@tulip sleet I run black on each individual snippet of //| code, then string the results back together, so black doesn't have its normal memory from block to block that lets it know to add a newline between two 'def's
But also .. black has a distinct style for .pyi files!! ```jepler@bert:~$ cat bloo.py
class K:
def enter(self):
...
def __enter__(self):
...
jepler@bert:~$ black --pyi - < bloo.py
class K:
def enter(self): ...
def enter(self): ...
reformatted -
All done! โจ ๐ฐ โจ
1 file reformatted.
jepler@bert:~$ black - < bloo.py
class K:
def enter(self):
...
def __enter__(self):
...
All done! โจ ๐ฐ โจ
1 file left unchanged.
it squishes things differently
๐คฆ oy
so you can run black on a def inside a class definition and it indents properly??
I did see that it folded the ... onto the same line in a few cases. I didn't review all the files, but I reviewed about 50
if the first line of the /|| region starts with whitespace, I add an if 1: to black's input, then take it off again
nice hack
by the way, is there a reason why we don't use pyi files?
seems like it would be a much better way of avoiding the annotations getting in the way than the import shenanigans
- Fixes #6892. Simplifies internal logic for writing out status bar and controlling the writing to display or console. Prevents partial status bar writes when serial is at first disconnected and then connects in the middle of a status bar write.
This isn't necessarily less code than before but it's easier to understand.
Tested on an ESP32-S2 TFT. Further testing welcomed if you feel so inclined.
oh, in libraries? yeah, that might have been a better way to go...
From @jepler in discord:
I run black on each individual snippet of //| code, then string the results back together, so black doesn't have its normal memory from block to block that lets it know to add a newline between two 'def's
But also .. black has a distinct style for .pyi files!!
Also added some spaces in to differentiate pin groups more clearly.
@timber mango so do you mean removing the annotations from the actual source and just doing them in a .pyi?
yes
or at least putting them in pyi files from now on for new code
is that technique used by other projects to avoid adding annotations to source? I don't know of another use case besides ours
I know you are not fond of annotations
mypy supports it
I run each 'section' through black, so black has no section-to-section memory to draw on.
After Dan's earlier comment I revised the script so that it includes a blank "//|" at the end of each block of "//|". This reduces the churn somewhat, in raw lines of code.
Here are the differences to the generated stubs from this branch:
diff -rU1 circuitpython-stubs-old/audiomixer/__init__.pyi circuitpython-stubs-new/audiomixer/__init__.pyi
--- circuitpython-stubs-old/audiomixer/__init__.p...
I think that jedi -- and thus also jetbrains editors -- supports it too
@tulip sleet @onyx hinge PR is in.
not sure what visual studio uses
but considering how many python devs work at microsoft now, I would expect it to do the right thing too
I am very fond of annotations, when they are used where needed, and when they are correct
@onyx hinge I am still seeing removed blank lines in cases like this?
@tulip sleet that removal is the "pyi style" mode of black. should I turn that off?
I apologize if I misunderstood you; I thought you didn't care for them
I would use the "standard". As long as it doesn't affect the readability of RTD, I don't mind.
@tulip sleet so, remove the "--pyi" flag?
no, I mean I would try to do what is done normally. If we are producing .pyi files, then --pyi makes sense.
sorry, no offense taken
I thought I guessed that ... would trigger pyi mode or something. Do you know why it's different?
no reason to be sorry, it was probably an incorrect memory of mine from discord
https://github.com/psf/black/issues/207 @tulip sleet I only know that there is a "--pyi" flag.
Black automatically formats *.pyi files in a package in addition to *.py files Stub files mostly follow the same convention with a few changes, as follows: If the body of a function or class is just ..., don't put it on a separate line, but just put it after the : Don't put blank lines between methods or functions, or between classes with an empty body Only put one blank line between other classes. Potentially allow longer lines. Typeshed's coding conventions currently allow infinite-length lines, but I'm not sure we should keep doing that.
I tend to argue about such things in emotional way, I'm working on that
they don't give a ref for such differences, maybe just to be more compact? Not sure why anyone would care, since it's mostly programs that ingest .pyi's; I don't know that humans read them very often
If we don't want the pyi-style that's fine, turning it off might be a bit less churn-y
https://peps.python.org/pep-0484/#stub-files says:
Stub files are files containing type hints that are only for use by the type checker, not at runtime. There are several use cases for stub files:
we could run the generated .pyi files through black after they are generated, when we build the stubs
Could you add a blank line between each set of aliased pin names? I've done that elsewhere and I think it's a bit easier to read
@tulip sleet For the GC pins PR, you want each pin that has an alias to have space between it and other pins? Want to make sure I understand before heading down that path.
yes, when there are multiple names for the same pin, group them together, and put blank lines before and after
Got it. Will do.
maybe try turning it off; I don't have a strong opinion on this; what do you think?
I don't have a strong opinion either
lol
I don't care about the churn; i am more interested about making it easy to write doc for a new module
@dhalbert Spacing added as requested.
Which one makes it easier?
Which direction I mean
what do you mean by direction?
Which choice. Maybe I misread, but it seemed like there were a couple of choices here to choose from.
To black with or without --pyi? I do not have a strong opinion, except that the non-pyi style is closer to what we have today which means less re-learning
Does running it with make it easier in the future though?
but I have a feeling most people editing these docs will have changes that are caught by pre-commit. if they can run it locally then it's easy to apply the fixes..
it's like every other kind of 'black thing', it always just changes it for you .. if it's set up right
https://github.com/microsoft/vscode-python/issues/13341 is an example of .pyi file editing using black --pyi (that's how they fixed the bug)
Right.
ok, let's go with --pyi, since they are .pyi files, at least in some sense
๐ (I'll pretend I helped.)
OK thank you for deciding!
it will enforce whatever we choose, so ultimately doesn't matter ๐
Hah ok
the whole goal here is to NOT have to spend 2 minutes changing whitespace like Dan requested I do on a PR ๐ so now, 5 hours later, ....! ๐
That's how to use time!
I revised this further, based on discord discussions:
- Get heading/trailing lines closer to what they were before
- but use black's "pyi style" in the formatted code, which notably removes blank lines between
defs
@onyx hinge, ok now I am going to quibble about the trailing blank lines which you preserved ๐ If black --pyi would remove them, then let's remove them
๐คฃ
I think you can just roll back the last commit?
otherwise we are inventing our own style
Anyone want to come solder this quad alphanumeric backpack for me?
just make sure it is not upsdie down; I did that once
I triple checked that ๐
There's writing on the front of the backpack, and they're supposed to be upright with that. Display decimals on the bottom.
There are also dots on the backpack, that you're supposed to line up with the decimals, but there's only two, and they're not actually lined up with the decimals. So... it kind of works?
So many pins though.
i missed the decimal dots, yeah
Also I have to clean off my work table to even get to my iron. ๐
It never remains clear for long.
Mostly because I haven't organised anything in here, and so it's all shoved off camera so it looks really nice in here, but really it's a monstrous mess.
sometimes there is a lot of stuff on the floor behind my chair, you can't see that, or on the sides of the desk on the floor
Right? The off-cam areas of this room are pretty much jam packed with stuff. Not much more can be stashed.
OK I should really go deal with this. I'm close to having everything together for this guide update, but one of those things is actually testing the code. Can't do that without an assembled backpack. So here we are.
.. updated again to ditch the trailing blank lines.
CircuitPython version
Adafruit CircuitPython 8.0.0-beta.0-30-g14498f793 on 2022-09-04; Adafruit Feather ESP32S3 4MB Flash 2MB PSRAM with ESP32S3
Code/REPL
import asyncio
from asyncio import Lock
async def task(i, lock):
while 1:
await lock.acquire()
print("Acquired lock in task", i)
await asyncio.sleep(0.5)
lock.release()
async def main():
lock = asyncio.Lock() # The Lock instance
for n in range(1,...
Something very strange with 7.3.3 on a QT Py M0: ```>>> import random
random.random()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 15, in print_repl_value
OverflowError: small int overflow
print(random.random())
0.411096```
Why does it OverflowError in the REPL??? What is that line number 15 in print_repl_value? So many questions... Does that deserve an issue?
well, if you don't have bigint enabled...
@proven garnet For your example that was added to the HT16K33 library, I see where you got the wonky licensing at the top of your example, but you should be using the SPDX format. Please update the existing SPDX to be you (not ladyada), leave it as MIT, and remove the "Author:" and "License:" lines. While you're at it, please change the example explanation comment to a docstring. Thank you!
Is there a way in CircuitPython to cycle through a series of characters and numbers without adding them all individually to something? Use case: 14-segment display backpack example, where it scrolls the alphabet, 0-9, and maybe some special characters. Arduino has a feature that does this, evidently. No idea if CP has anything.
@onyx hinge Is this ^^ a thing?
you mean like for c in "0123456789abc":?
Um.... Maybe, but that's still typing them out individually.
This is what Arduino has: ``` for (uint8_t i='!'; i<='z'; i++) {
alpha4.writeDigitAscii(0, i);
alpha4.writeDigitAscii(1, i+1);
alpha4.writeDigitAscii(2, i+2);
alpha4.writeDigitAscii(3, i+3);
alpha4.writeDisplay();
delay(300);
}```
I was basically asking if this concept exists in CP.
well, you can do that, but... it's ugly for c in (chr(i) for i in range(ord('!'), ord('z')+1)):
Harder to read as a comprehension, I suppose.
you have to explicitly convert between chars and ints, in C++ they are the same thing
Ah fair enough.
@stuck elbow so... I tried to make it work, and it's displaying 1. only. I'm clearly missing something.
>>> for c in (chr(i) for i in range(ord('!'), ord('z')+1)):
... print(c)
...
!
"
#
$
%
&
...
works for me
huh.
Not in the display code, it works for me too.
This does not work. py for c in (chr(i) for i in range(ord('!'), ord('z')+1)): display.marquee(c)
Hmm. Checking.
Tried adding sleep, no change. Tried adding a delay using the parameter to the marquee line, no change.
There's no show type thing being called in the existing example.
maybe you want display.marquee(''.join(chr(i) for i in range(ord('!'), ord('z')+1)))?
Hey!
Even uglier, but it works!
@stuck elbow The chr and ord bits are built into CircuitPython through Python? i.e. should I be looking in the Python documentation for an explanation of what they are doing...
โค๏ธ Thank you!
sorry, wrong lang
Oh! Wrong that way. I thought you meant wrong programming language, and I was deeply confused for a moment.
Yeah, I would have struggled a bit to sort it out in French.
no idea why the search engine gave me links in French
Hmm. marquee seems to be a permanent loop. So you can't use it twice, apparently?
I guess I could use print and scroll together for the first one. The first one is a string.
That failed.
In a few ways. Sigh.
Code in play here: py display.print("Hello, world!") for count in range(7): display.scroll(count) time.sleep(0.2)
First, no matter what I provide to scroll, it results in this: code.py output: Traceback (most recent call last): File "code.py", line 27, in <module> File "adafruit_ht16k33/segments.py", line 220, in scroll File "adafruit_ht16k33/ht16k33.py", line 164, in _get_buffer IndexError: bytearray index out of range
Second, there appears to be no way to slow down the scroll, it jumps directly to rld!.
To clarify, line 27 is display.scroll(count) right now.
I tried it as py display.print("Hello, world!") display.scroll(various-values-here)
Same results both in the code failure and the display results.
It feels like scroll should have a delay parameter. Unless it's designed to jump to a different location.
Oh, hah. marquee has a loop param that takes a boolean, and if set to False, does not loop indefinitely. Which means I can do it twice.
Still want to know how scroll is supposed to work. ๐
Will do!
@idle owl for marquee, you can pass optional parameters to not have it do a permanent loop.
I did finally see that.
Let me take a look at scroll. I can't remember what that did...
Thank you!
@idle owl maybe you wanted something more like this:
display.print("Hello, world!")
for count in range(7):
display.scroll()
time.sleep(0.2)
OK, that made it not crash.
But... it's still jumping right to the end.
Oh. Let me try that.
Still w/o the 1, jumps to the end.
Oh, if you have auto write off, it will appear to do that unless you call display.show() at each step
Oh so there IS a show()!
yeah
Does auto_write need to be off for marquee to work properly?
Oof, adding show into that for loop made it display weirdness.
I'm not sure. It might handle that automatically.
It's still not working how I picture it should. Instead it jumps to the end, then posts a bunch of ! before moving onto the marquee.
Basically what marquee does. But maybe print and scroll aren't meant to work that way?
I want it to print Hello, world!, and then, scroll to the end of the phrase.
Thought it would be nice to show other features too.
Ah, yeah. It never worked super well, which one of the reasons I wrote marquee
๐
Thanks for looking into this with me!
No worries
OK, this example is good.
@idle owl a quick hack might be to add a bunch of spaces at the end of the string
Eh, I don't want to point folks towards something that doesn't play nice.
Ok, cool
Showing how to create two marquees together, with the first one not looping is a good one to show.
Yeah
Let me ask you another thing.
My main claims to fame with the segments part of that library are the marquee and adding multiple display chaining
sure
This snippet writes 0 0 0 0 on each of the segments. py display.set_digit_raw(0, 0x2D3F) time.sleep(0.2) display.set_digit_raw(1, 0b0010110100111111) time.sleep(0.2) display.set_digit_raw(2, (0b00101101, 0b00111111)) time.sleep(0.2) display.set_digit_raw(3, [0x2D, 0x3F]) time.sleep(0.2)
Why are they written in such different ways?
Oh and I added the set_digit_raw()
How is that all doing the same thing.
Excellent claims!
It's to show different ways to use the function, but you don't need to have that.
Thanks
Maybe it needs some comments added to make that clearer
That property is confusing to me.
The set_digit_raw because I'm no good at binary or hex.
That's why I have a diagram in the guide
Oh, fair enough. That makes sense
I got more confused when I saw this code using it. Because each of those results in the same thing. ๐
Hehe, I forgot about that
I think it was to show 4 different ways to do the same thing
๐
How would you comment it?
Best I can do is "This is four ways to display 0. It displays on each of the four digits" or some such.
In order: 16-bit Hexadecimal number, 16-bit Binary number, 8-bit Binary Tuple, 8-bit Hexadecimal List
Hold on, I'm editing...
Ah ok
Ah. I never would have noticed! ๐
@gilded cradle Thank you so much for your help with this. I'll add the comments to this new example, and I'll go back and include them in the simpletest example as well. Already making changes in the repo, easy to make more.
Cool. You're totally welcome.
Oh, two quick things. I'll tag you on the eventual PR. And Limor wants you to QA this guide update before she does. I'll ping you when I'm ready for that.
Ok, sounds good.
Thanks again!
you're welcome
@gilded cradle Here's the PR. It's getting pretty late here. I still haven't eaten. So I'm heading out. I can fix any change requests tomorrow. https://github.com/adafruit/Adafruit_CircuitPython_HT16K33/pull/107
Ok, I'll take a look
@stuck elbow Optional static typing has at least two purposes. One is showing the contract that you, as a library, propose to the library's user. The other is in type checking all or substantial parts of a whole program to "prove" (term used loosely) that type errors will not occur at runtime. I think separate ".pyi" stubs only do the first of those two things.
CircuitPython version
Adafruit CircuitPython 8.0.0-beta.0 on 2022-08-18; Adafruit QT Py ESP32-S3 no psram with ESP32S3
Adafruit CircuitPython 8.0.0-beta.0 on 2022-08-18; S2Mini with ESP32S2-S2FN4R2
Adafruit CircuitPython 7.3.3 on 2022-08-29; S2Mini with ESP32S2-S2FN4R2
Adafruit CircuitPython 7.3.0-rc.1 on 2022-05-18; Adafruit QT Py ESP32-S3 no psram with ESP32S3
Code/REPL
import time
import wifi
import ipaddress
from secrets import secrets
ip_to_ping...
@anecdata It did not enter safe mode, as can be observed, it just restarted.
Yep, this is a dupe of 5980, with the only addition is that it is still a problem in 8.0 and on ESP32-S2 and ESP32-S3.
I will close this issue. Apologies, I didn't search hard enough in existing issues before submitting this one.
Tod would you mind commenting with the updated findings?
There's an older ping issue on Espressif, but it's closed https://github.com/espressif/esp-idf/issues/5202
You mean leave a comment in 5980 with 8.0 & S2/S3 info?
Please, yes, that would bring the comments up to date.
Support has been added - but no builds yet until the next version of 8 kicks off:
https://circuitpython.org/downloads?q=tinypico
I think we can close this now @dhalbert, cheers :)
Ran into this issue recently and saw it on both 7.3.3 and 8.0.0.beta0 on both ESP32-S2 and ESP32-S3.
Specifically the versions and hardware were:
Adafruit CircuitPython 8.0.0-beta.0 on 2022-08-18; Adafruit QT Py ESP32-S3 no psram with ESP32S3
Adafruit CircuitPython 8.0.0-beta.0 on 2022-08-18; S2Mini with ESP32S2-S2FN4R2
Adafruit CircuitPython 7.3.3 on 2022-08-29; S2Mini with ESP32S2-S2FN4R2
Adafruit CircuitPython 7.3.0-rc.1 on 2022-05-18; Adafruit QT Py ESP32-S3 no psram with ESP32S3
...
CircuitPython version
Adafruit CircuitPython 8.0.0-beta.0-67-gd44edc4a0 on 2022-09-25; FeatherS3 with ESP32S3
Board ID:unexpectedmaker_feathers3
# Hard faulting board, connected via USB
Adafruit CircuitPython 8.0.0-beta.0-72-ga7b10d41b on 2022-09-26; Adafruit Feather ESP32S2 with ESP32S2
Board ID:adafruit_feather_esp32s2
# Attempting to work with this board on different project
Code/REPL
[Contents of my Feather S3](https://github.com/DJDevon3/My_Circ...
Thanks, @todbot
I couldn't find any related open issues in the Espressif esp-idf, though there was an older closed issue regarding ping crashes.
I think the contract is the responsibility of documentation, type annotations are not sufficient for this. And since the documentation tools read pyi files, the information from them is included, so they do contribute to the documentation of the contract.
#6952 should fix this, on boards that have native USB. The status bar is not written out at all if, when the write starts, the serial connection is not available.
On boards that have an on-board serial-to-USB converter chip, the USB status pins on that chip may not be connected to anything, which is often the case. In that case, there is no way to know if the host is connected via USB, so there may still be situations where the first part of the status-bar write is missed, and the rest app...
ฮ do not have any boards that require serial-to-usb so I cannot test that, however I will test the pr artifacts on my beetle-c3 and pico and provide any findings (if any) on the pr thread.
(Re Re stdin:

n = runtime.serial_bytes_available
if n > 0 or self.stdin is not None:
i = None
if self.stdin is not None: # fake stdin
i = self.stdin # fake stdin
...
Result of overnight ping DNS & ping test:
55864 Resolved google as 142.250.191.206
55864 Ping google.com [142.250.191.206]: 47 ms
55865 Resolved google as 142.250.191.206
55865 Ping google.com [142.250.191.206]: 40 ms
55866 Resolved google as 142.250.191.206
55866 No response
55867 Resolved google as 142.250.191.206
[...]
55901 Resolved google as 142.250.191.206
55901 No response
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "do_dns...
@onyx hinge I am going out for a daily walk, but considering 8.0.0-beta.1, would you want to merge any part of the picow work in? Advantage is more testers, disadvantage is more testers ๐
@tulip sleet mostly the state of it seems to be "it works fine for awhile, then it stops working". You can do useful stuff with it if you do the "reset when socket stops working right" dance, which is pretty much inevitable for socket code in CP anyway. I wish I would have time to rebase out all the commits that say "WIP" and might not even compile ๐ but it probably won't happen
also I would want to get inhttps://github.com/adafruit/circuitpython/pull/6952. I am not trying to do this in the next hour or two, but I may start on the release notes (which take an hour or two to do and can always be added to easily).
I should review that ๐ not enough hours in the day
I think a simple squashing in rebase -i would be quick and safe
I know -- if you are on a roll, take your time. could wait for a few days
those are two things I think would be nice for beta.1 ; there's nothing else I see that is knocking at the door urgently
OK. I just figured out one big "it stops working" cause so that's grand
now the ntp test goes for >500 iterations instead of stopping after 8
is that related to the thing where internet stops working if you don't do it often enough?
I ping once a minute so that the once-an-hour http works
I rebased this to have a prettier history (intermediate commits may still not build, I didn't test this). The original history is preserved as https://github.com/jepler/circuitpython/compare/picow-v1?expand=1
I fixed a bug which caused open sockets to not be correctly tracked. As a consequence, things would stop working after 8 sockets had been opened, until reboot.
Tests performed:
- dns & ping test (>50000 iterations)
- ntp test (>500 iterations)
- http test (>800 iterations)
...
@crimson ferry no, it would not help with that.
@crimson ferry can you do me a favor and see if that problem reproduces in micropython?
yeah, I have one set up, haven't done much uP but will give it a shot
that'd be quite helpful, thanks
Thanks! The logic changes make sense. I didn't test.
@tulip sleet should I merge that or do you want some actual testing done too? I don't know what to do to trigger the problems that were being reported in #6892 (I feel like there's a terminology problem or I'm mis-interpreting what I'm reading)
well, I'll let you decide now that it's reviewed
thanks for all your hard work its greatly appreciates! Next is ssl and server support I presume?
Using artifact https://github.com/adafruit/circuitpython/actions/runs/3138352211 on raspberry_pi_pico

The bug is still there. It took 20 tries before I got it to show up.
It occured on a late connection.
In raw repl:

While it is still bugging, it doesn't go in stdin
I will re-test on RPi Pico now that it's merged.
@tulip sleet Does it seem right to say that M0 boards don't have the adafruit_bus_device module included? I almost forgot to check this and would have not included it as a necessary lib in the guide. Or, looking at the dynamic screenshots, it's on there, so I probably would have remembered.
It would be nice to be able to filter the support matrix by boards that don't have a particular module.
No idea how to implement that. But it would be convenient.
Some do, some don't. The M0 express boards mostly do, so do the RFM non-express boards. but not Gemma, Trinket. Some Trinkey boards do also
I saw there was a Trinkey with it. Ok, duly noted. So I need to note it in the guide regardless.
I'll be Neradoc could do that. Could open an issue on that
Ok, I'll open an issue, thanks for the suggestion.
@jaunty juniper Is this something you'd be interested in doing?
I'm filing an issue, and could assign it to you if you're interested. But I don't want to do that if you're not so much.
it's implemented, just add - in front
Oh seriously?
I didn't document it because I don't know where to
I planned to come back to it but...
it also doesn't filter the regexp, since modules only contains letters and _, so you can put a RE
I would say add another paragraph at the first arrow, or mention "-" in the gray text in the box
Paragraph seems better to me.
Wow I am inordinately excited that I know this feature now.
that's my favorite kind of feature request
thanks for including that -- I will use it!
apt-get always requires sudo?
Are these temporary or permanent for mpy-cross?
This looks very nice! I didn't look at the network code in great detail.
Submodules that need updating to what is in adafruit/circuitpython main, it It looks like:
frozen/circuitpython-stageports/espressif/esp32-camera
Guard with CIRCUITPY_CYW43 so it's completely not there if compiling for regular Pi Pico?
Guard with CIRCUITPY_CYW43 so it's completely not there if compiling for regular Pi Pico?
Yes, you are installing things to the system directories
@idle owl there is only one Adafruit ESP32-S3 Feather guide right ? It should be updated to mention the 2 different models, I'll leave feedback to mention that, but I am not missing a "ESP32-S3 Feather with PSRAM" guide ? (the issue discovered in #help-with-circuitpython is that it links to the CP.org page of the nopsram version only)
Ah fair enough. I didn't remember ever typing it without sudo but wanted to make sure we weren't telling folks to do unnecessary sudos.
You are correct, one guide.
I saw that go by in the other channel.
ugh I clicked on a sub link in the page and I think I left the feedback on the wrong guide ๐
I thought the best kind of feedback is when people thank you.
General feedback, yes.
close second
But guide feedback is a whole other beast.
@hyx0329 I'm interested in taking this on
This code is copied pretty much verbatim from micropython. I don't know why they did it like that. The indentation is forced by uncrustify, I can't change it.
Question about CPY core module i2cslave. In the list of core modules in https://circuitpython-jake.readthedocs.io/en/latest/docs/index.html is listed 'i2cslave'. However in the flashed version of CPY: 'Adafruit CircuitPython 8.0.0-beta.0-49-g14fc4a079 on 2022-09-14; Adafruit PyPortal Titano with samd51j20' there is no module i2cslave, but there are i2cperipheral and i2ctarget, both with the same named attributes. Someone can elaborate me on this?
ESP32-C3 and RP2040 don't have the required 'regex' library.
This change has the effect of disabling checking the hostname format on esp32, esp32-s2, esp32-s3. Better would be to wrtie a check that uses the "re" module's code.
not possible at this time. commented.
@onyx hinge thanks to the BOT showing here activity of you. I opened this: https://github.com/adafruit/circuitpython/pull/6933#pullrequestreview-1124233781 and I learned something from your code, especially the 'Test script do_dns_ping.py. I had some code for ping'ing that never worked, however I implemented that part of your example mentioned (especially ```
info = pool.getaddrinfo("google.com", 80)
addr = info[0][4][0]
print(f"Resolved google as {addr}")
ipv4 = ipaddress.ip_address(addr)