#circuitpython-dev
1 messages · Page 36 of 1
I used -j successfully for a while but stopped when I started having weird issues building and just haven't returned to using it. Though I have seen others report issues different from what I was experiencing
do you have to pass a number to scan?
my scan function expected a self thingy, but it's unused, so passed junk
is there a "most simple version" of wifi scanning somewhere?
Ljinux.
# iwctl
[iwd]> station wifi scan
[iwd]> station wifi get-networks
ah I think I deleted that (the self). but since you all are getting different results I'm paranoid that I messed it up
I mean even more basic
like the scan by itself in a basic wifi learn guide or something.
or docs for the wifi module perhaps?
this runs on a circuitpython device? or in linux on something else?
ljinux
I don't have it loaded on the s2 now.
Hi
I am using your library to connect VL53L1x to an ESP32
After connecting the sensor to the ESP32 I upload your library with no error message, but I can't get any measurements.
I am connecting the SDA to GPO21 and the SCL to GPO22 and of course the V5 and the GND
I can't figure out what is wrong. Do I have to declare the IC2 different in your library?
Can you please give me some advise
I'm not familiar with it, but It looks interesting. I'll have to learn a bit more about it. For now I'm trying to eliminate as many layers and variables as I can.
This is very odd. With the scanning script that anecdata posted I am also seeing consistently just the one network that isn't mine.
@opaque kelp #help-with-circuitpython is the best channel
Kind of random.. but I don't know beyond shots in the dark at this point. Could the DBG pin being connected to an FTDI cable somehow interrupt or influence the scan?
@opaque kelp best to post your code, and the full text of any exceptions
or a feather tripler, or neopixel featherwing? I'll try to remove those shortly.
@crimson ferry thank you
it's conceivable something is interfering hardware-wise, but why it works in non-debug and not in debug with all other things equal is... odd
Yea, but just on s2 tft?
I'll build specifically for S2 TFT
s2 tft is the only one I've tried so far. But I do have an s3 I could try albeing need to solder pins.
I do have 2 S2s as well so if I'm still geting weirdness eventually I'll get one in debug and one in normal at the same time to compare directly.
oh -j 2 works, but not -j 8
no soldering needed just to load a debug build (and scan)
12 also works here, so..
well, if it works on mine, and doesn't on yours, we can determine the cause being the networks
but DEBUG...
It's related specifically to the DBG pin being connected to FTDI
I closed the tio connection to the FTDI, the issue remained.... I unplugged the FTDI connection with the scan loop still running and now it sees more networks.
including the real ones that I am trying to use
Both FTDI and the Feather were plugged in to the same USB Hub. I'll try to move cables around and determine if the hub is part of the problem, or perhaps just not enough power on that USB controller or whatever (electricity also mostly magic to me still)
it is a serial TX pin as far as I know. I use it by hooking up an FTDI cable to GND, 3.3v, and DBG pin and then plug into USB and open tio connection with it to monitor the output.
If you can make it hard crash with everything set up you'll get an encoded stacktrace that you can decode using a tool in the core repo.
I can reproduce it, by just hooking it up to my pi400's gpio.
It can do serial & jtag from it's gpio
Used that while debugging pystack.
it is bizarre that it is so good at finding the 1 network that isn't mine when all of that is plugged in.
CIRCUITPY_ULAB = 0
CIRCUITPY_AUDIOBUSIO = 0
CIRCUITPY_AUDIOBUSIO_I2SOUT = 0
CIRCUITPY_AUDIOBUSIO_PDMIN = 0
CIRCUITPY_AUDIOCORE = 0
CIRCUITPY_AUDIOIO = 0
CIRCUITPY_AUDIOMIXER = 0
CIRCUITPY_AUDIOMP3 = 0
CIRCUITPY_PS2IO = 0
CIRCUITPY_ANALOGBUFIO = 0
CIRCUITPY_RGBMATRIX = 0
for s3 tft
I think specifically the 3.3V connection is the problem. I've moved the FTDI usb to another port on a different part of the tower. At first I still had the same issue (only see the 1 network that isn't mine.
I unplugged the FTDI power <-> 3.3V connection and now I see the more full list including my networks.
Maybe I just never should have been connecting power on the FTDI to the feather? Tio seems to work without that to read data from the DBG pin.
now my S2 TFT is hosed... I get the RGB bootloader screen, but drop a UF2 and can't get out of FTHRS2BOOT
I have found myself in that scenario a few times, and a few more than I care to admit were copying wrong UF2. Triple check that the one you're copying is what you expect.
yeah, I've done the same, but it's def an S2 TFT (not reverse), and the UF2 is right, I probably need to erase flash and start over
Is it drawing too much current? Or is it providing power?
The general idea is we have seperate circuits for this.
even for rp2, power it via usb, and the only connect tx, rx, gnd
gnd is required cause there will be a voltage difference.
got debug on s3 tft, it works alright.
hopping onto pi400 now
Honestly I couldn't say for sure. I have only a very loose understanding of the electrical side of things. The software side is where I am more experienced.
The power pin can power the feather when I had it connected that way. i.e. I can have the ftdi plugged in with those 3 pins and the feathers main USB unplugged, but it will still be powered on.
That doesn't strike me as particularly "good" because AFAIK the 3v pins are meant to be outputs from the feather's perspective. But it hasn't seemed to cause any damage that I can tell so maybe it's okay?
perhaps your ftdi dongle can’t provide the power required
It doesn't seem necessary at least though. Now that I have the power pin disconnected, everything else appears to be working as intended (including the wifi scan)
a tft feather alone draws 0.11 amps at 5V
Thank you to both of you for helping me figure it out and trying out on your end. 
Neat. Is that like a USB power pass-through multi-meter ish thing?
yes
it’s like 3€
can’t expect it to be accurate, but yea
it’s just very bulky
as to why debug does cause this, I have no idea still
I definitely know the root technical cause. But I do think generally the power coming from the FTDI is "interrupting" it's ability to complete a good scan.
I don't know how the power circuit works or if it switches back and forth between the FTDI and the USB when I hotplug or unplug. The device kept running, so it can do this quick enough to stay alive if so.
I wouldn't be surprised if your guess about the FTDI not providing enough current is correct. So when it's driven by that source it can't complete a full successful scan for whatever reason.
Or if it doesn't really switch sources like that I could see it being the case that having power coming in from both the FTDI and the regular USB were "not playing nicely" together.
having 2 ‘sources’ is a really bad thing
If there is even a slight voltage differential (3.30V vs 3.33V) it could mean a lot of heat and power loss.
I'll unplug the red jumper from the FTDI so I don't forget. I haven't done debugging at this level frequently enough to recall the process fully each time. I should record a video showing the process even if just for myself to refer back to. Maybe that would help others too.
Whats the easiest / safest way to force a hardfault in the core? could I add divide by zero or some other such basic error somewhere to force one in order to capture for illustration purposes?
You could probably do so, if you manage to compile it.
<@&356864093652516868> Weekly meeting in about 1.5 hours. Add your notes to https://docs.google.com/document/d/1xektzKK1vh8mua913H68WG-104GH4q00L6EmL87ZRGE/edit?usp=sharing
You could access non-existent memory *0x77777777 = 0 or something like that
Thank you.
Tried compiling picow on arch-latest
In file included from /home/bill88t/git/circuitpython/ports/raspberrypi/sdk/tools/pioasm/pio_disassembler.cpp:10:
/home/bill88t/git/circuitpython/ports/raspberrypi/sdk/tools/pioasm/pio_disassembler.h:16:25: error: ‘uint16_t’ was not declared in this scope
16 | std::string disassemble(uint16_t inst, uint sideset_bits, bool sideset_opt);
| ^~~~~~~~
/home/bill88t/git/circuitpython/ports/raspberrypi/sdk/tools/pioasm/pio_disassembler.h:1:1: note: ‘uint16_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’?
+++ |+#include <cstdint>
1 | /*
Am I doing something wrong, or do we have a gcc change?
I haven't touched picow in quite a while now.
there's always https://github.com/adafruit/circuitpython/pull/7594 but then I seem to be the only one who doesn't enjoy building locally
Ah
It's 10 times as slow with x86, and 3 times as slow as doing it on a literal pi400.
yeah, but then I also can't do much -j either
I should make a circuitpython-builder docker container.
That has the exact build-env premade, and only needs a repo bind.
Fixes #1199. Apparently in the previous releases it was called adafruit_feather_rp2040_epd, but in future releases will be called adafruit_feather_rp2040_thinkink because of https://github.com/adafruit/circuitpython/pull/7927. I had to change it to adafruit_feather_rp2040_epd for now, but it will need to be reverted on the next release.
Yeah RP2040 seems to give me a different error, however I think I'm getting the gist of what you wrote and whats been written:
Circuit Python Serial Monitor
Traceback (most recent call last):
File "main.py", line 55, in <module>
File "adafruit_airlift/esp32.py", line 199, in start_bluetooth
_bleio.BluetoothError: Timeout waiting to write HCI request
Good afternoon y'all -- happily lurking today.
meeting starting shortly - just finished internal meeting
Yes, I agree there must be some issues with vscode-circuitpython. But I am just curious why that serial monitor only works with verson 8.0.5.
I tried putty again but this time it stucks, displaying nothing at all and no responding to any keyboard input. I connected with correct COM port and BAUD rate 115200. There is some information on the top bar of the window.
300 boards wasn't even that long ago..
Want to add your CircuitPython or Blinka board to CircuitPython.org? Here's how.
Pasadena is a nice place
Introduction Customers ask how they can get started with AWS IoT using the devices and languages they are familiar with. To help address this need, AWS has published tutorials such as connecting a Raspberry Pi and creating a virtual device with Amazon EC2 in the AWS IoT Core Developer Guide. This blog walks you through […]
gah, wrong input. should work next time I need to speak
Woah that went up by 19 boards this week. Very nice!
5 new ones last week and 14 this week
ChatGPT == Spicy autocorrect
Do not forget that.
Bravo to Melissa on board updates
No worries. @lone axle. I originally wrote the marquee and had a bug related to the dots sitting there for a while.
yey for more silly projects!
This one is ultra silly.
the more ridiculous the better!
Basically, it's a 5.7" 7-color eink display on a board, that you put in a waterproof container where you can see the display, put it on a tombstone, and then code it so visitors can leave memes for you after you're dead. 🤣
that's not silly at all, that's amazing ❤️
Oh I love that!
That was to fix all the new Pylint and Black errors!
Yup
Non-blocking ht16k33 examples will be a welcome sight
Synthio ❤️
Did you ever figure out how to play the Enterprise game?
- A tiny disco ball: Hidden under the yellow rectangle is a 2x2" disco ball, ready to bring the party to your Arduino projects. Watch as your microcontroller board lights up with sparkly reflections and groovy tunes.
- A secret compartment for snacks: Arduino knows that coding can be hungry work, so they've included a hidden compartment under the yellow rectangle to store your favorite snacks. Never worry about low energy levels during your programming sessions again!
- A miniature catapult: Who needs conventional ways to launch objects when you have an Arduino microcontroller board? Underneath that yellow rectangle lies a mini catapult, perfect for launching small projectiles across the room. Be careful where you aim!
- A built-in karaoke machine: Arduino understands the importance of combining coding with fun, so they've hidden a karaoke machine beneath the rectangle. Sing your heart out while your microcontroller board hums along to your favorite tunes.
- An embedded bubble blower: Get ready for some whimsical coding sessions! The yellow rectangle conceals a bubble blower that will fill your workspace with a flurry of bubbles every time your microcontroller board runs a program successfully.
- A teleportation module: Unleash the power of science fiction! Beneath that yellow rectangle lies a top-secret teleportation module that can instantly transport your microcontroller board to any location in the universe. Ready for some intergalactic coding adventures?
- A popcorn dispenser: No movie night is complete without popcorn, and Arduino knows it. Hidden under the yellow rectangle is a popcorn dispenser that pops a fresh batch of popcorn every time your microcontroller board completes an operation.
- A mini weather station: Get real-time weather updates right on your Arduino microcontroller board. Underneath that yellow rectangle is a hidden weather station that predicts everything from rainbows to snowstorms, all in a compact form factor.
- A built-in confetti cannon: Celebrate your coding victories in style! The yellow rectangle obscures a confetti cannon that explodes with colorful confetti whenever your microcontroller board successfully executes a program. Bring on the party vibes!
- A coffee-making module: Arduino understands the need for caffeine during long coding sessions. Concealed beneath the yellow rectangle is a coffee-making module that can brew your favorite java with just a few lines of code. Now you can stay energized while you code!
I can't ever remember: Where do I get the build assets from a PR on GitHub?
My friend Steve was at an estate sale that had some pretty cool old computing
stuff. (there had been an IMSAI priced at $300 but someone else bought it)
He invited me to go back out the next day, wh…
@idle owl find the "checks" tab on the PR, then click "build ci", then scroll down
Is there an issue on it with the code? I have a QT PY S2 can test with.
@midnight ember seemed like the s2 was just less reliable, with intermittent socket errors that weren't seen on the s3
I click around in there for ages, and never scroll. 🤦🏻♀️
ok socket errors are over my head, i can only confirm how it fails as a beta test.
belated hug report for scott picking up and running with an idea I mentioned off-hand months ago (the json thing)
I'm still happy to have someone else test it.
Means I don't have to 😄
having another set of eyes never hurts.
It involves a NeoPixel 5x5 LED BFF, but you can fill in the LED changes with prints so you know it's happening, and not actually put a BFF on it.
I had to do some JSON streamed parsing in CPython for loading multi-gigabyte JSON files into a database recently.
That wasn't what was failing anyway.
was it multiple pings in quick succession?
Do you have Adafruit IO?
Only with the Adafruit IO receive time code included. The ping code alone was fine.
yes, i don't have the 5x5 though, just give me a script to test and will do
Keen, will do.
@tulip sleet I think we'd chased down and banished all the "starts pinging as often as possible" bugs and kattni was still seeing errors on the s2 that went away on the s3. to my knowledge, both of those boards have "ping too fast" problems, it's a general problem with the espressif ping implementation.
Nice work on adding all the new boards Melissa. 🎉
however it occurs to me that since the "ping too often" problem is about resources in use, it could just be a RAM amount difference between S2 and S3?
idk
Ping code works alone though.
what library did you use to do it?
Thanks!
Thanks!
Thank you for hosting @tulip sleet
should have called it ijklm, iterative json key loader module
👍 that was my other option.
Let me know if you have any questions, it's mostly commented though.
I've managed to reproduce what I think may be the same error as this with a minimal HTTPServer test and capture the backtrace from it.
Here is the decoded backtrace:
❯ python tools/decode_backtrace.py adafruit_feather_esp32s2_tft
adafruit_feather_esp32s2_tft
? 0x4009a033:0x3ffdca00 0x4009d3bc:0x3ffdca20 0x3ffdca4d:0x3ffdca50 |<-CORRUPTED
0x4009a033: mp_obj_is_subclass_fast at /home/timc/repos/circuitpython/circuitpython/ports/espressif/../../py/objtype.c:1435
0x4009d3bc: mp_execu...
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/1sH6HBDsm_YgHLivi139diXzgmZpUEelixI6saqFGOvA/edit?usp=sharing
May I request the circuitpythonistas role?
I'm fine merging as-is. I don't know a ton about the LWIP internals either but if it works, then it should be ok.
Yep, you're all set with it now.
Thanks!
It is a board sold by Adafruit (here), but somehow doesn't have CircuitPython support.
The work-in-progress PR I made is here.
We don't necessarily add CircuitPython support for all boards we sell. Generally it is only ones we design and make.
The work-in-progress PR I made is here.
Thanks! I'd prefer to merge once the CI is hap...
Alright then, I will just add the camera pins as regular gpio and continue the rest of the port.
Are you hoping to update CircuitPython over the air or the Nina firmware?
Ya, it could be. I'm not sure what the advantage is though.
Could we make a system to allow for name changes? Dan and I were talking about changing some older board names to include manufacturer. It'd be cool to redirect from the old name to the new and manages the download link based on version.
I used to be called adafruit_feather_rp2040_epd but will be thinkink in the next update.
The whitespace here is inconsistent: some tabs, some spaces. Doesn't matter that much, but might look different in different editors.
This change makes it consistent with the rest of the file, which is tabs.
Why are we in the modern era not using 'soft tab: 4' for everything?
This is a Makefile which uses tabs explicitly for ".RECIPEPREFIX" by default.
It exits seeminly immediately, but should fix #7906.
@anecdata Please test it in your application.
@idle owl ```py
Adafruit CircuitPython 8.0.5 on 2023-03-31; Adafruit QT Py ESP32S2 with ESP32S2
Board ID:adafruit_qtpy_esp32s2
Rad. It is not my board.
You have to be running absolute latest CP
To not hardfault.
There's a fix for that at least.
Which should get you the same nonsense I was getting, but I am pretty sure what happened to you is exactly what was happening to me.
should i update to lastest and run it again or does this give you the info you need?
I think this gives me what I need. There is definitely an issue that needs to be addressed.
@onyx hinge Have you tested stopping the picowap since the sdk was updated?
@brazen hatch no, I have been working on other areas like synthio
Alright, I will check on it in the following days, thanks!
The code blob is left there, so it just has to be uncommented and tested.
https://github.com/adafruit/circuitpython/pull/6037 has finally been merged! 🥳 A couple changes for this request and then hopefully it'll be official official!
I've managed to trigger this bug with this code
import displayio
import adafruit_displayio_sh1106
import time
import busio
import board
def setup():
print("initialising i2c")
i2c = busio.I2C(board.D8, board.D7)
print("initialising bus")
bus = displayio.I2CDisplay(i2c, device_address=0x3c)
print("initialising display")
disp = adafruit_displayio_sh1106.SH1106(bus, width=132,height=64)
time.sleep(0.1)
displayio.release_displays()
i...
The ap code still doesn't work, but micropy's does.
They moved the files, so I just have to find them.
I've submitted a fix for this, and now my code works as expected:
code.py output:
loop 0
free: 140176
initialising i2c
initialising bus
initialising display
loop 1
free: 140144
initialising i2c
initialising bus
initialising display
loop 2
free: 140128
initialising i2c
initialising bus
initialising display
loop 3
free: 140112
initialising i2c
initialising bus
initialising display
loop 4
free: 140080
initialising i2c
initialising bus
initialising display
loop 5...
Possibly related to https://github.com/adafruit/circuitpython/issues/7459. I had corrupted backtraces too. A rare one was uncorrupted, but DEBUG apparently masked the original root cause.
bruh micropy's source is so convoluted.. I have been crawling it for the picowap code for 15 minutes.
I can work on creating gc_allow_free if there is an appetite for it
The changes are isolated to the affected API, so there should be minimal risk to code not using the wifi.radio.set_ipv4_address_ap API (or for some other reason trying to stop DHCP and restart it).
I realized I didn't put in the #if CYW43_NETUTILS conditional that is in the georgerobotics cyw43 driver. Not sure if that's expected to be replicated at this level.
Could we make a system to allow for name changes? Dan and I were talking about changing some older board names to include manufacturer. It'd be cool to redirect from the old name to the new and manages the download link based on version.
Not easily, but probably. The Liquid language that Jekyll uses generates static pages based on the info in the .md files. The pages that appear to be dynamic such as the unknown page and the installer are done purely with JavaScript. To have it deal with...
Attempt at fixing RP2040 initial 0 byte I2C write has potentially problematic behavior #7955
I think this may be linked to #2204 - I would expect it to crash when you add a fourth display - I've put a PR in to fix this
This switches from hard coded tremolo/vibrato, to allowing much more control via nestable LFOs.
The new LFO object's API is like so:
class LFO:
"""A low-frequency oscillator
Every `rate` seconds, the output of the LFO cycles through its `waveform`.
The output at any particular moment is ``waveform[idx] * scale + offset``.
`rate`, `offset`, `scale`, and `once` can be changed at run-time.
An LFO only updates if it is actually associated with a playing N...
Please explain what the bug is. It isn't immediately obvious to me.
Fixes the name of the Jetson Orin Nano and removes a board that was accidentally added to Blinka (0xCB Helios). It also checks that the blinka flag is set to True for Blinka boards to help mitigate this from happening again..
MicroPython seems to have it figured out entirely, I can open and close the ap just fine in it, but I can't find the source file.
I am giving up for now, I will look at it later.
Before this PR:
wifi.radio.start_ap() will fail with
RuntimeError: Wifi is in station mode.if it immediately followswifi.radio.stop_station().about 10% of the time.
(re-verified the issue using current build)
With this PR:
Adafruit CircuitPython 8.1.0-beta.2-32-g3ff7fa5d8 on 2023-05-15; Raspberry Pi Pico W with rp2040
Example code from the issue has been running successfully for >125 iterations. LGTM, thanks!
I will use line numbers from the original source code
gc_never_free will crash the fourth time it is called.
- First time it is called the
permanent_pointersitem ofmp_stateis set to null.
The while block on line 1017 is skipped andnext_blockis allocated - a set of four pointers
The if statement on line 1029 evaluates as true and line 1030 executes, correctly storing the address ofnext_blockinpermanent_pointers
the pointer passed into the function is stored in in...
My fix keeps a record of the previous current_record_block so we can assign the next block into it correctly.
I believe this may be an implication of bug #2204
gc_never_free crashes on the fourth time it is called and the IS31FL3741 code calls gc_never_free twice for each display
@FoamyGuy I wonder if issue #2204 (fixed by #7983) may be responsible for the hard faults here?
I pushed the requested updates by @rcarteraz as this is pretty stale. I also fixed some other spelling issues.
Looks good with the fixes I pushed.
Looks good with the fixes I pushed.
Thank you! 🥳
Wait no. Apparently it includes a year's worth of fixes. Need to rebase...
Looks good with the fixes I pushed.
Fixes #1110 by adding a check to ensure the blinka filed is true, which makes it so the CP downloads don't show.
For the RP2040, this sounds like a support problem. Could you open a thread in https://forums.adafruit.com/viewforum.php?f=60 ? Include the simplest program that causes the error -- it sounds like either the firmware on the AirLift is out of date or there is a wiring problem or a pin setup problem.
Also in the support thread we can discuss the Espressif issue: it turns out getting AirLift _bleio working on Espressif is not so easy.
@FoamyGuy if you speed up the GET requests does it fail faster? Sounds reproducible but it would be nice to get it to happen faster. Are you trying it with a local server which won't complain if you speed things up?
OK, I could have sworn I was seeing spaces on some lines, but I don't see that now.
I think just 500 would be OK? Are you getting a compile error otherwise??
const size_t timeout_ms = 500;
There is a reused bitbangio I2C object in self. Lines 1750-180 in the original code set up the pins to use that object instead of re-creating the object each time. Could you explain your goal in creating a new object? Could you reuse the existing object? If not, it should be removed from the rest of the code.
Looks good, but I did not test.
The timeout only exists as a last resort, so that the board doesn't hang.
500 as a value is just what I feel is best.
Doing = 500 is fine, my brain just passively copy-pasted without thinking.
Before this PR:
wifi.radio.start_ap() will fail with
RuntimeError: Wifi is in station mode.if it immediately followswifi.radio.stop_station().about 10% of the time.
(re-verified the issue using current build)
With this PR:
Adafruit CircuitPython 8.1.0-beta.2-32-g3ff7fa5d8 on 2023-05-15; Raspberry Pi Pico W with rp2040
Example code from the issue has been running successfully for >500 iterations. LGTM, thanks!
@dhalbert speeding up the requests does not seem to appreciably speed up the hard fault occurrence. After your comment I started this running again with only a 1 second interval (10x faster than before) I'm not sure if it's actually keeping at 1 request per second exact, but it's up to 4718 completed requests already and no hard fault. I'll try to let it keep running until it does to see if there is anything different that can be gleaned from it's backtrace
@furbrain I've confirmed that your fix resolves my issue. I'm able to get both displays running on the same bus with different images. Not sure if it's related, but when ever auto-reload kicks in, it crashes on boot. Hitting the reset button does get it back going again, but I just wanted to mention that in case it might be a side effect of the fix.
@furbrain Thanks for this change. Just wanted to confirm here that this change resolves #7974 . The only possible side effect is that auto-reload crashes, though pressing reset does bring it back. Again, I can't confirm that this fix has anything to do with that, but just something to keep an eye out for.
@bablokb just to chip in on this, the draft PR I raised for Yukon uses ATTRTUPLEs to achieve similar to the Keycodes idea @jepler suggested. https://github.com/ZodiusInfuser/circuitpython/blob/yukon/ports/raspberrypi/boards/pimoroni_yukon/pins.c
Here's the relevant parts if you wish to give it a try.
STATIC const qstr board_slot_fields[] = {
MP_QSTR_ADC1_ADDR,
MP_QSTR_ADC2_ADDR
};
STATIC MP_DEFINE_ATTRTUPLE(
board_slot_obj,
board_slot_fields,
2,
M...
I left it running last night. It completed 8781 requests (at ~1 per sec) and then hard faulted sometime before the next one could be completed. Speeding up the requests does not seem to influence it to hard fault faster unfortunately.
The output on DBG pin and decoded backtrace are the same as before.
The decoded backtrace:
❯ python tools/decode_backtrace.py adafruit_feather_esp32s2_tft
adafruit_feather_esp32s2_tft
? 0x4009a033:0x3ffdca00 0x4009d3bc:0x3ffdca20 0x3ffdca4d:0x3ffdc...
Enabling this is not simple, due to the way py/circuitpy_defns.mk. The Makefile logic there assumes that the port-specific implementation of a native module is in ports/*/common-hal/<themodule>. HCI _bleio is special-cased as being in devices/ble_hci/common-hal. But in Espressif, there is a native _bleio under ports. So the logic around SRC_PATTERN gets confused, and both sets of files get compiled, causing linking issues later.
SRC_PATTERN is also used to pick up `shared-bin...
0x00000000: ?? ??:0
The fact it tried to run 0x0 is really sus. Like, how did this even happen?
I would have to guess it moved to an incorrect mem address and treated it as a pointer, and it happened to be 0x0.
It is unclear to me whether this is due to updating the ESP-IDF or due to some CircuitPython core change from 7.x.
I was thinking of trying to pick up the latest ESP-IDF v4.4 changes, because as usual there are wifi fixes (some of which are in non-open-source code). But it's somewhat painful to do that. And for CircuitPython 9.0.0, we are going to try to switch to ESP-IDF V5 anyway.
We could try instrumenting the socket code and the Python more thoroughly to narrow down where the proble...
For these tests the server is running on the microcontroller and the client is a CPython script running on my PC using requests module to send the requests. All requests are HTTP only.
Yep, I can start it up with a larger response body.
I am willing to have an esp board up 24/7 to test this.
I have way too many at this point.
And excluding h2 & c6, I have all the socs.
I have plenty also -- the problem for me is not resources for testing, but time to failure and the debugging cycle time.
notices that CPU frequency doesn't reset on program exit
Hmm is that what we want?
@tulip sleet do you have an opinion if CPU frequency should reset to nominal when code.py exits?
in my quick test on rp2040, usb kept working
>>> microcontroller.cpu.frequency = 125000000
>>> t0 = time.monotonic_ns(); _=[mkfilter.brf(48000,4800,17,3600,27) for i in range(100)]; t1= time.monotonic_ns(); (t1-t0) / 1e9 / 100
0.0040625
>>> microcontroller.cpu.frequency = 180000000
>>> t0 = time.monotonic_ns(); _=[mkfilter.brf(48000,4800,17,3600,27) for i in range(100)]; t1= time.monotonic_ns(); (t1-t0) / 1e9 / 100
0.00282227
>>> microcontroller.cpu.frequency = 250000000
>>> t0 = time.monotonic_ns(); _=[mkfilter.brf(48000,4800,17,3600,27) for i in range(100)]; t1= time.monotonic_ns(); (t1-t0) / 1e9 / 100
0.00203125
```which was handy, as i wanted to benchmark a function at various clock speeds
I dunno about if it would affect enumeration, what I answered is different than what you asked.
i was worrying if it was going to mess up the USB peripheral clocking to change the CPU frequency. That was a worry in https://github.com/adafruit/circuitpython/pull/7430
Making it sticky is not terrible, but it should be documented one way or the other. @slender iron might have a comment later, esp based on experience with other chips
it does affect the frequency of a running PIO peripheral, I just tested that
USB may be clocked by the host. But RP2040 USB host might end up being wrong
yes there's a special "always 48MHz" clock in rp2040, clk_usb.
in MicroPython on RP2040 it is sticky. https://github.com/micropython/micropython/blob/3229791b60185faa47d87af80b6a8ccbb34d15e5/ports/rp2/modmachine.c#L102-L117. In MicroPython it is sticky. Notice they reset the UART when it changes.
I think changing "cpu frequency" actually changes clk_sys.
and often a reason to change "cpu frequency" would be to clock pio faster so that's fine
I wonder if spi runs off clk_peri or clk_sys in CP
Do you folks have an intuition that #7459 and #7582 are the same issue?
@onyx hinge @tulip sleet my assumption was that it'd be sticky
resetting it would be tricky with any spi or i2c for displays that stayed around
We could consider abandoning Jekyll and Liquid all together. I think the static site generation options got much more flexible with GitHub actions.
I can work on creating
gc_allow_freeif there is an appetite for it
I'm happy to review if you think it'll help these situations.
Thanks for the fix!
(and the thorough explanation.)
I can work on creating
gc_allow_freeif there is an appetite for it
After reviewing the PR, I think it'd be better to remove gc_never_free() and have the display code manage collecting those pointers through displayio_gc_collect().
I was looking at this, but since it's documented in the sections of Python library ports, is the solution to move it into the core modules section?
@tekktrik Yes, that makes sense. The shared-bindings list is generated by a script, right? Note that errno and other "library" modules are already accessible in the Module Support Matrix, so this might be a simple change to the script.
thanks @furbrain! did you encounter this problem "organically" or did you go looking for it?
@furbrain I am closing all the issues you think are related. Let us know if you think not.
Probably fixed by #7983. Re-test.
Probably fixed by #7983. needs re-test.
Probably fixed by #7983. Needs re-test.
@furbrain - I marked them as "needs re-test" instead.
Sounds good! I'll take this and make the relevant change!
We could consider abandoning Jekyll and Liquid all together. I think the static site generation options got much more flexible with GitHub actions.
Hmm, I'd be ok with that. I'll need to take a look at the other options to see what would might meet our needs better.
hey @tulip sleet / @slender iron have you seen this samd21 dfu bootloader that only takes up 1kB of memory? https://github.com/majbthrd/SAMDx1-USB-DFU-Bootloader
I wonder if it could be modified to do MSC without taking up too much more space to free up some resources on the samd21 boards.
I know it doesn't solve RAM issues
I doubt it. 8k is pretty small already
thought it was interesting at least. I'm making a samd11 board (not for circuitpython) and thought this was of maybe a little bit of interest.
I wanted to make a little pass through programmer, some really simple light control
tiny projects that don't do very much more than a single task
yeah
set some jumpers to swap between i2c/spi/jtag programming. might just keep it to spi and i2c
spi would have to be bitbanged on the samd11 though
well, not really but if I can't share ports.. anyway fun little project
👍
@slender iron @onyx hinge I wrote draft release notes for 8.1.0-rc.0. The only remaining 8.1.0 issues are the Esoressuf HTTP server crashes after a while. They are a regression from 7.x.x, not 8.0.x, and I think we could push them forward But they are mysterious.
@slender iron woot! thanks
https://forums.adafruit.com/viewtopic.php?p=972587#p972587
I'm ok pushing forwards too. I really dislike fixing crashes like that and it could be an IDF thing that will go away.
Do you folks have an intuition that #7459 and #7582 are the same issue?
It does seem possible to me that they are the same or related root cause.
I could be trying to read too much into it, but I noticed that some of the register dump values shown in the debug logs in that issue are similar (but not exact same) as some of the ones in my dumps. That could be an unimportant detail that I honed in on though.
It does sound like a similar time frame for reproduction and symptoms obser...
@slender iron I can do the rc.0 NOW then. @onyx hinge do you have anything you want to get in before 8.1.0 final? Are there further synthio tweaks in the works?
Issue
Users want to implement Mouse firmware with horizontal scrolling, and back and forward buttons, but the default Mouse HID Device has a report descriptor without them
Solution
Add a 4th default HID device. It's a Pointer with a similar report descriptor as the Mouse, with the addition of Panning, and Forward and Back
The 5th byte in a report is for the Panning value. The 6th byte has 1 bit for Forward, 1 bit for Back, and 6 padding bits.
I chose to implement as a new D...
There is a draft synthio PR that is probably worth waiting for
since it switches stuff to generic LFOs
Hi, we want to keep the native set of devices minimal, so that the HID implementation will fit on the smallest processors. For instance, we had a gamepad device, but removed it.
Since you have figured out the report descriptor, you can use the custom HID device capabilities to define and your new device in boot.py. Have you seen https://learn.adafruit.com/customizing-usb-devices-in-circuitpython/hid-devices ?
@tulip sleet yeah I'll still be making potentially incompatible changes but that's OK, we marked it experimental
shall I wait for your draft PR to be merged?
no, I don't want to hurry it or delay you.
got it, we can always do an 8.1.1 or point synthio users to Absolute Newest
one thought I had about the stacked LFO's is that it's very flexible, but it also loses the named functionality of tremolo or vibrato (e.g. stacked LFO's is the assembly language of synths). A helper library might be convenient in the long run
@jepler I encountered it organically - I have a display that i need to regularly power down and then reinitialise and was encountering this bug.
@tannewt I agree - I think you said that only one display is actually used by CP internals for displaying error messages etc - so may be better just to keep a reference to that one display.
hi @dhalbert, thanks for taking a look!
I did start out implementing a custom HID device in boot.py, and then decided to try contributing it back to circuitpython because I know others want horizontal scrolling. I also want to contribute a change to kmk firmware that involves horizontal scrolling. kmk currently doesn't depend on boot.py, and i was hoping to keep it that way.
I see what you mean about keeping the core minimal so it can fit on ...
kmk currently doesn't depend on
boot.py, and i was hoping to keep it that way.
The reason we added dynamic HID support is to allow more unusual devices, such as horizontal scrolling mice, absolute pointing devices, or particular gamepads. We'd like to keep the basic devices vanilla and small. There are many such devices that people have asked for.
kmk doesn't have to depend on boot.py. This could be an optional thing that could be tested for via some flag setting or similar (consi...
do we have example code to use the picodvi library with the DVI picowbell or the breakout ?
a guide is underway
It is similar to other framebuffer displays. @devout jolt was doing this I think
ok
ah interesting
640x480??
1 bit
the breakout uses different pin names than the library D0+, D0-, CK+, CK-, D2+, D2-, D1+, D1-
The button is connected to GPIO4.
Note that it's not available in older versions of the board so I don't know if we should do it differently, and what solution will result in the lowest amount of support questions.
I think 0, 1 and 2 align with R, G and B
I think this is fine. It's documented in the board Learn Guide. Maybe the Learn Guide should have a caveat about older Feathers (how can they be identified?), but we should definitely define it.
It is on Rev D or later boards. I will add a note to the guide.
Thanks @luisan00 !
Thanks to you @dhalbert 🙌
The Feather RP2040 has two buttons.
The BOOTSEL used to enter the bootloader. To enter the bootloader, press and hold BOOTSEL and then power up the board (either by plugging it into USB or pressing RESET). The bootloader is used to install/update CircuitPython.
On Revision D and later of the Feather RP2040, the BOOTSEL button is connected to GPIO4 for use in your code. The revision letter is in a circle on the bottom of the board.
Alright, thanks for explaining further. I think I'll write the KMK change to fall back to the default Mouse Device if a custom Pointer isn't provided
Automated website update for release 8.1.0-rc.0 by Blinka.
New boards:
- adafruit_feather_rp2040_thinkink
- imxrt1015_evk
- imxrt1040_evk
- imxrt1050_evkb
- lilygo_t_display_rp2040
- pimoroni_badger2040w
- pimoroni_inky_frame_5_7
- pimoroni_pico_dv_base
- pimoroni_plasma2040w
The fomu CI builds have started failing because of an expired certificate:
ERROR: cannot verify static.dev.sifive.com's certificate, issued by ‘CN=Amazon RSA 2048 M02,O=Amazon,C=US’:
Issued certificate has expired.
@proven garnet maybe you would be able to look into this (at a reasonable time of day) https://github.com/adafruit/Adafruit_CircuitPython_MIDI/pull/53
pre-commit has an error I hadn't seen before
Error: pylint (library code)....................................................Failed
- hook id: pylint
- exit code: 2
pylint: Command line or configuration file:1: UserWarning: Specifying exception names in the overgeneral-exceptions option without module name is deprecated and support for it will be removed in pylint 3.0. Use fully qualified name (maybe 'builtins.Exception' ?) instead.```
@onyx hinge yes! I actually have a patch for this in review now.
great, thank you.
It's new with the pylint update, I guess they want some changes to .pylintrc to be more specific about that parameter.
Interestingly, it only seems to be raised if other things went wrong, or I've seen it if there are tests for the repository that go through pylint
@dhalbert Retested and works fine with #7983. I have new things to troubleshoot, but that will most likely be a different issue.
It looks like this one (and others in this section) are could be moved over to the Core Modules section, but I'm not sure I could put it in order alphabetically. Would it be work combining the "MicroPython libraries" section entirely into the "Core Modules" section?
Mainly typos, I also added a silabs entry to the supported ports. Let me know if anything should be reworded. Thanks!
I saw the use of Ampy here, it's currently maintained by @scientifichackers but the attached learn guide seems outdated. Not sure if there's anything we can do here.
Here are the things that I need feedback on:
I renamed this based on the Welcome to CircuitPython guide
Minor spelling/grammar issue.
CircuitPython version
Adafruit CircuitPython 8.0.5 on 2023-03-31; Raspberry Pi Pico with rp2040
Code/REPL
import usb_midi
import usb_cdc
import usb_hid
import storage
usb_cdc.disable() # Disable both serial devices.
usb_midi.disable() # Disable mini
usb_hid.enable((usb_hid.Device.KEYBOARD, usb_hid.Device.CONSUMER_CONTROL)) # Enable just KEYBOARD and CONSUMER CONTROL
Behavior
...
Description
I have a project using circuitpython ...
Following
esp-idfcomponents are now now deprecated and the switch to new APIs can be carried out in a phased manner.
The #7527 i2s API is related to this too.
This could be based on the existing Arduino Nano 33 BLE definition, just with definitions for board.MICROPHONE_CLOCK and board.MICROPHONE_DATA which are connected to the PDM mic on the board. Probably something similar to the nRF52 Sense Feather since they are both similar ideas, and maybe a modified version of the guide could go with it. I've actually discussed this with an old account at https://github.com/adafruit/circuitpython-org/issues/410.
Most of the 'stable' ports have some sort of hardware accelerated cryptography that implements one of these primatives:
- The SAMD51 has the Integrity Check Monitor for SHA1, SHA224 and SHA256. The SAMD21 doesn't have any of this.
- The ESP32-S2 has a SHA Accelerator and an HMAC Accelerator
- The nRF52 has ARM's TrustZone CryptoCell 310 which has SHA and HMAC acceleration
- And the STMF415xx/7xx has SHA1 and HMAC acceleration.
Related: #4504
The Integrity Check Monitor (ICM) built into the SAMD51 doesn't support MD5 and neither do the chips I mention in that latest post.
If you'd like to contribute a board definition, that would be great. In the other issue you mentioned you don't own the board. Do you have one now?
When connect a linux host (raspbian rpi4) at boot, the device is detected however doesnt function as a keyboard. Removing the usb connection and replugging back in, the device works as expected.
Could you describe the problem in more detail? What errors do you see? Sometimes a delay of a few seconds in your code.py is needed when the board powers up before you try to use an HID device, because the host computer (RPi in this case) is still enumerating and setting up the presented USB de...
raspberrypi stable
silabs alpha
stm ``F4`` stable | ``others`` beta
unix alpha
Thanks @applecuckoo, a minor suggestion, alphabetize the ports.
That’s fine, to best steer my efforts, what’s under active development. I’m
new to open source development and want to contribute.
Best regards
On Mon, May 15, 2023 at 21:42 Dan Halbert @.***> wrote:
@.**** requested changes on this pull request.
In ports/raspberrypi/common-hal/busio/I2C.c
https://github.com/adafruit/circuitpython/pull/7984#discussion_r1194510821
:
// Create a temporary bitbangio.I2C object
...
Thanks. A lot of the text for the boards comes from copy/pasting on the internet and fixing obvious things, so contributions like this are very helpful.
It sounds like this is still a work in progress, so I'm converting to a draft for now.
Thanks. A lot of the text for the boards comes from copy/pasting on the internet and fixing obvious things, so contributions like this are very helpful.
Of course! After they caught my eye, I saw the edit button and figured that's what it's there for. Happy to help! :)
There does appear to be a plugin for adding redirects in a simple way. no idea if it works. https://github.com/jekyll/jekyll-redirect-from
Good to know for updating the epd board back to thinkink, but it could cause things to get complicated if we overuse it.
Thanks for adding the issue. We would need to look into static website generators. Jekyll is the generator and uses Ruby as the language and Liquid as the template engine. We are probably not taking advantage of all of its features since I don't know Ruby and my only experience with Liquid is from working on this site and documentation for Jekyll/Liquid isn't the best.
It would be nice to use something most people who would contribute to the site know better like Python as the language. Th...
It's hard to say. Could be the same root cause. Likely to be some IDF change? I haven't seen a safemode in over a week with several eligible devices running projects, but other times they have been more frequent. I do reload and reset liberally in code.py when various exceptions happen, so that could be preventing some safemodes. I've also backed away from some of the more complex projects that were causing the most trouble. I'll try to set up a few dedicated devices with test code and DEBUG ...
It might be useful to find all of the limitations and hard edges we run up against to make sure most of the requirements are met on a new static generator. What are the limitations with the current site with jekyll?
It would be nice to continue without using react or any javascript frameworks. cp.org is very fast as a static site and is still fairly simple for most any user to contribute to. It should work with javascript disabled right now (missing a few features, of course) and doesn't u...
@dhalbert No, I don't own this board. I could probably start from the existing definition, but I should probably get my current PR (#7989) merged before I start work on this.
For devices with a build-in SDCard onboard would it be possible to have them (attempt to) initialize and mount the SDCard inside the core the same way that builtin displays are initialized? So that user code could start interacting with with files in /sd/ without having initialize it
It might be useful to find all of the limitations and hard edges we run up against to make sure most of the requirements are met on a new static generator.
Yep, definitely.
What are the limitations with the current site with jekyll?
With Liquid (Jekyll's template language), I'm having trouble when I try and do more complex things like display for instance, I was trying to modify the downloads page, which shows all the boards that are in the _data/files.json folder where the board...
I found Liquid to be a difficult template language to use. It was both awkward and weak. (I could use stronger words.) It's also hard to set up Ruby properly on Ubuntu now, for some reason.
Ya, code in board_init() should be able to
Has anyone tested the STRAP_JTAG_SEL fuse of s3?
I kinda feel like burning it.
It would allow me to jtag using the pins on demand (gpio 3)
Or would the fact the pins are repurposed cause CP to error out?
@lone axle The dynamic screenshot generator needs to be updated to include settings.toml I think. CP autogenerates it, but maybe only for boards with WiFi? So now I'm not certain how to make the screenshot generator know when to include it.
@slender iron Is settings.toml generated by CP for all boards or only WiFi boards
Oh. Do you know, then, if it's WiFi boards only?
I think it is ESP only. so yes
Ok. Got it. Thanks.
You could just "never_reset" them in your board build so that CP doesn't touch them
@lone axle Yeah it's ESP boards only. I don't now if we can make the generator check for import wifi or some other indicator that it should be present...... I'm reaching here, I have no idea how it works to begin with. Except for the libs it uses.
Okay, I'll try to tinker with it to get it to draw a settings.toml file>
As for the logic behind when it does draw it, I don't know if there will be a 100% perfect way to be sure. But keying in on wifi, or other certain library imports should get pretty close. I think this same idea was discussed at some point in the past for secrets.py, but I'm not sure if or what approach we ended up taking with that. I think some Learn projects include a "dummy" settings file in the repo and it will draw into the screenshot if you do that I believe.
Ohhh, right.
Well even a dirty not-100% way of doing it automatically would be nice.
Thank you!
Is there a way to instruct the REPL not to show on the built-in display? For the InkyFrame that takes a few seconds to refresh() it might be nice to be able to tell it not to show the REPL output so that you can start executing statements without waiting on it to render.
Ah, sometimes when spamming ctrl C I'm quick enough to skip it actually.
It also does return and start allowing execution before it's fully finished as well, but does block for a few seconds before that.
Currently on ESP32-S3, to debug the board, you have 3 options:
- print spam
- The board's built-in JTAG adapter. It comes with the downside that you can't use the usb com port for anything other than serial + jtag. It effectively becomes a esp32-c3 in that mode. CircuitPython doesn't use this mode but instead provides the CIRCUITPY drive.
- The pins 39-42. This requires the espfuse
STRAP_JTAG_SELto be burned. The downside to this approach, is that you actually have to use an efuse, f...
I added a thing to skip it if it is reloading
in other news, c3 is actually decent now.
It can also be debugged very easily.
it's the only esp board I can debug.
🥲
For anyone who needs it.
sudo openocd -f interface/esp_usb_jtag.cfg -f target/esp32c3.cfg
Doesn't matter the board, it will work automatically, no settings necessary.
Just make sure you are using openocd-esp32
Tried adding a delay of 10seconds in code.py, but still same issue. SO, from power up, the boot process seems to run as per normal, just not functioning HID keyboard device. dmesg output from the boot process shows:
[ 2.734495] usb 1-1.3: new full-speed USB device number 5 using xhci_hcd
[ 2.881691] usb 1-1.3: New USB device found, idVendor=239a, idProduct=80f4, bcdDevice= 1.00
[ 2.881714] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2.881732] u...
CircuitPython version
n/a
Code/REPL
make -C mpy-cross
Behavior
% make -C mpy-cross
Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.
mkdir -p build/genhdr
GEN build/genhdr/moduledefs.h
QSTR updated
Traceback (most recent call last):
File "/Users/tod/projects/adafruit/circuitpython-adafruit/mpy-cross/../py/maketranslationdata.py", line 30, in
import huffman
ModuleNotFoundError: No...
Hello...
I am running into an issue attempting to fetch submodules on a fresh fetch of circuitpython from github
when running make fetch-submodules it will barf on this (with a list of files)
Please move or remove them before you switch branches.
Aborting
fatal: Unable to checkout '3fbadf9fb4e904fd8ed087642a41762b833ae0fe' in submodule path 'ports/silabs/gecko_sdk'
git submodule deinit --all -f iirc and then run make fetch-submodules again.
I get the same error on a fresh checkout
ah yea forgor git-lfs
that also was missing on my arch installs
CP has a lot of different types of dependencies.
passed some point we should have a script
CircuitPython version
Adafruit CircuitPython 8.1.0-rc.0 on 2023-05-17; Adafruit QT Py ESP32S2 with ESP32S2
Code/REPL
import alarm
import board
print(alarm.wake_alarm)
touch_alarm = alarm.touch.TouchAlarm(board.A2)
alarm.exit_and_deep_sleep_until_alarms(touch_alarm)
Behavior
The code runs, but does not wakeup upon pin touch.
Description
Forum thread based on example [Ada...
The abs function from numpy would be nice to add to ulab.numpy. There is a lot of numpy functionality missing for good reason but this function feels particularly fundamental and it would be convenient to have it built-in. Thanks.
This doesn't work (yet) on my inky frame.
I've verified via the printf below that the startup commands match what's being sent in my micropython branch (which does work). I even went so far as to partially properly implement the busy pin that's hooked up via a shift register. It only affects the send command, I hope to eventually be able to change the other busy checks to support the new callback structure to remove all the "dumb timeout" refresh blocks.
Another thing, this display tak...
@tannewt Here's where I got so far with comment. Not sure what I'm getting stuck on.
I've specifically changed the scope of this issue to focus on the newer Rev 2 version of the board since the existing definition incorporates the sensor pins in pins.c, as seen here:
https://github.com/adafruit/circuitpython/blob/f2bfced4079389c71cbdcf7d69e16d41f0e3dc98/ports/nrf/boards/arduino_nano_33_ble/pins.c#L51-L55
There are a few differences between the two revisions pin-wise, here is a list of them that I've picked up:
- The LPS22's interrupt pin is now connected to the board at P0...
Consider adding the esp32-s2 label?
Could you post your code.py, or the simplest version that reproduces the problem? Thanks.
Heads up @v923z - the "ulab" label was applied to this issue.
Here is the CircuitPython level driver I did with the waveshare breakout for the 7": https://github.com/adafruit/Adafruit_CircuitPython_ACeP7In/blob/main/adafruit_acep7in.py
I see a couple little differences in the sequences but it is mostly the same.
This appears to have stopped working between 7.1.0 and 7.2.0. I'll bisect.
It's a good day when
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
espidf.IDFError: Requested resource not found
We use an in-tree version of huffman but I don't remember why. This bit of code is meant to add it to the path: https://github.com/adafruit/circuitpython/blob/main/py/maketranslationdata.py#L26-L30
Try building from the mpy-cross directory.
Heeeeyyyyyy
Pins needed to be ordered low to high.
This stuff should be documented somewhere.
It was a pain to guess.
It works.
I saved an image.
Yea, the only difference is setting the screen rotation 0 (this) vs 180 (adafruit_acep7in). I'm not convinced that it's the sequence.
I'm a SW guy and only occasionally HW. I don't have scopes which would be ideal. I can only thing to add some printf debugging to the SPI / fourwire classes to make sure the pin and their settings are as expected. Just comparing more things from my MP fork that works vs the CP that doesn't.
Other than that, I'm really not sure what else there is to check,...
a = espcamera.Camera(data_pins=board.CAMERA_DATA, pixel_clock_pin=board.CAMERA_PCLK, vsync_pin=board.CAMERA_VSYNC, href_pin=board.CAMERA_HREF, i2c=board.CAMERA_SSCB_I2C(), external_clock_pin=board.CAMERA_XCLK, external_clock_frequency=20_000_000, powerdown_pin=None, reset_pin=board.CAMERA_RESET, pixel_format=espcamera.PixelFormat.JPEG, frame_size=espcamera.FrameSize.QXGA, jpeg_quality=2, framebuffer_count=1, grab_mode=espcamera.GrabMode.LATEST)
Is way too long.
Perhaps I should remove the CAMERA_ from the pins.
It's not like they are used for anything else or exposed.
It's a camera-specific board.
cd mpy-cross && make does indeed work.
I guess https://github.com/adafruit/circuitpython/blob/main/BUILDING.md
and https://learn.adafruit.com/building-circuitpython/build-circuitpython#build-mpy-cross-2986721 should be updated then?
oh wait no cd mpy-cross && make does not work.
for some reason make fetch-submodules does not pull in "tools/huffman". I had to explicitly get it with cd tools/huffman; git checkout
Apparently due to 13db65566d590fea872121d51eeacfc5d2d612a2:
Pin reset is now changed to the IDF default which pulls the pin up rather than CircuitPython's old behavior of floating the pin.
So we need to special-case the touch pins
I have fully commented the port definition and it's almost done. It should serve as an example for future porters.
Update port for Pimoroni InkyFrame 5.7".
Some notes:
- fix frozen modules (remove unused module, add support for builtin hardware)
- use standard pico-w board-LED as
board.LED: having an additional LED is always useful (I use it for technical information) - configure enable-pin as DigitalInOut. This is to keep compatibility with the Badger2040W port and to how Pimoroni uses this pin in their MicroPython version
- optimize parameters:
refresh_timeadds a useless wait after _...
Nevermind I got it working.
I have left adequete commenting in this board's pins.c for future boards with cameras.
Made a creators pr. https://github.com/creationid/creators/pull/40
The CircuitPython pr is also now ready for review. https://github.com/adafruit/circuitpython/pull/7941
Perhaps as a hack we could try flashing a 2mb partition on a 4mb board.
That should work.
Like, just setting 2mb on the .mk should be enough to test it.
The power button is attached to GPIO37 according to the schematic:
But cannot really be used.
It doesn't matter how I read it, be it analogio or digitalio, the value is always the same, no matter what I do.
GPIO37 is an input-only pin with no pulls available to it.
I will not include it in the board definition.
With that out of the way, the definition is complete.
I don't get why the power pin is like that.
It's behind a diode that goes against it..
There is no backfeed into it.
Double checking. You can't call a function before it's created in a Python program, right?
Before the loop.
Nope. You can not.
Yea this ain't C.
It's supposed to be interpreted.
just curious have you tried pulling gpio37 high/low in code?
no sw-defined pulls on 34-39
it stays None in code
so you can't output a 1 or 0 on the pin?
digitalio always False
analogio does something 2800 no matter the status of the physical button
input-only
can't .switch_to_output()
Not that we want that, we just want to read it.
I see, with that diode there doesn't look like it would be an input pin, but possibly output... Guess not.
I want to flip it just to see. But it's tiiiny.
Regular diodes are supposed to have no backfeed and it's not a Zener. It would have the Z instead of the I there.
I know very little about this stuff. A diode is like a one-way door in my eyes. A Zener diode is like a loose one-way door.
Yea, I assume the zener in the circuit is for over voltage protection but I can't see a use for the one on 37
They have the same exact circuit on all timercamera, timercamera x and timer camera f
They wouldn't just copy-paste a mistake 3 times right?
lol
None of the examples or doc explain.
if you really wanted to test the diode reversed you could just put a temporary jumper across it. Since the pin is input only, presumably it wouldn't push anything out the wrong way.
I guess, but that wouldn't contribute anything to the definition regardless.
True
regarding https://github.com/adafruit/circuitpython/pull/7256 - I have now received 4 of these boards. I cannot get esp-idf to work properly on Ubuntu - constantly moans about mismatching versions, so I can't compile it to test it out.
if anyone could make that board and let me have the files, it would be much appreciated as nothing else works on them properly
Are you trying to build for a Lolin S2 Mini that doesn't have SPRAM?
yep 😦
I think I built an image a week or two ago, will that work or do you need the latest version of CP?
that would be perfect
give me a few and I'll try and dig it up
You, sir, are a gentleman and a scholar
Just remember that version of the board/build is not supported in anyway
that's no problem. I can't currently use them for anything productive, so anything is better than nothing / throwing them away
I think this is the build, if it doesn't work for you, let me know and I'll work on building a new one.
amazing. thank you
I was thinking of pr'ing CONFIG_SPIRAM_IGNORE_NOTFOUND to permit the boards to use main.
well, it loads and runs but it looks like these dodgy clones have another issue (which I saw somewhere) - every time the Wifi kicks in - it reboots 😄
https://github.com/esphome/issues/issues/4368 - need to dig through my boxes to find some capacitors
Espressif ESP32 Official Forum
but as its gone 23:30 here, that's a job for tomorrow
thanks for your help (as always)
CircuitPython version
Adafruit CircuitPython 8.1.0-beta.2-29-g40f1ac180 on 2023-05-12; Metro MIMXRT1011 with IMXRT1011DAE5A
Board ID:metro_m7_1011
Code/REPL
import synthio
synthio.midi_to_hz(0)
Behavior
ValueError: note must be 1-127
Description
Lowest note MIDI controllers send is 0, so when i play that note the ValueError is thrown
Additional information
No response
2bc8d73776434bb2f15113014299a9fffa547109, which is past 13db655, also causes TouchAlarm not to work. If I prevent the touch awaking pin from being reset, then 13db655 and forward works, up to but not including 2bc8d73776434bb2f15113014299a9fffa547109 does not. 2bc8d73776434bb2f15113014299a9fffa547109 is part of #6772.
So still working on this.
While cleaning the sofa, I found a QT Py S2 that I had been searching for since a long time.
Well it is running 8.0.0-alpha.1-39-g4c20b3cb6 from 2022-07-06. So I guess it has been there since 10 months or so.
Maybe Adafruit should make the QTPy a bit bigger so that less are lost. 🤣
introduce a Chunky Py?
An AirTag clip for it? Lol
Thanks! does upstream need this fix too?
not sure what's going on with the error'd build
oooh next person gets #8000 -- I hope it's a PR so we can celebrate
CircuitPython version
Adafruit CircuitPython 8.0.5 on 2023-03-31; ESP32-S3-DevKitC-1-N8R8 with ESP32S3
Board ID:espressif_esp323_devkitc_1_n8r8
UID:C7FD1A3EA8C9
Code/REPL
import board
import busio
spi = busio.SPI(board.IO36, board.IO35, board.IO37)
cs = board.IO40
print(“SPI initialized.”)
Behavior
Board resets to safe mode for reason: “Internal watchdog timer expired.”
Description
Also tested in 8.1.0-RC.0. I suspect that busio.SPI()...
SPI0/1: GPIO26-32 are usually used for SPI flash and PSRAM and not recommended for other uses. When using Octal Flash or Octal PSRAM or both, GPIO33~37 are connected to SPIIO4 ~ SPIIO7 and SPIDQS. Therefore, on boards embedded with ESP32-S3R8 / ESP32-S3R8V chip, GPIO33~37 are also not recommended for other uses.
https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/peripherals/gpio.html
Thanks! does upstream need this fix too?
not sure what's going on with the error'd build
Nope, you added .cast() it isn't upstream.
A retry of the build worked. I think there is a parallelism issue with mg24 builds.
for some reason
make fetch-submodulesdoes not pull in "tools/huffman". I had to explicitly get it withcd tools/huffman; git checkout
Ah! That would do it.
Thank you for the improvements! I have a couple concerns though.
I don't think this is correct. It needs to be long enough for the sequence to complete before we send it more commands. Usually the busy pin would minimize this but it isn't used here.
I timed it at just under 28 seconds.
I'd rather not change this because the built in LED isn't visible from the front.
{ MP_ROM_QSTR(MP_QSTR_PICO_LED), MP_ROM_PTR(&pin_CYW0) },
I'd rather the default be visible on the front.
I'm a SW guy and only occasionally HW. I don't have scopes which would be ideal.
Do you have any other RP2040 boards? You could try pysigrok to use them as a logic analyzer. https://github.com/pysigrok/hardware-raspberrypi-pico You may need to help me with the software though. :-)
@jamesra The absolute value unary operator was one of the first operators implemented:
https://github.com/v923z/micropython-ulab/blob/3e996d9bd93005edbbb9763c4a0a525fe52dec3d/code/ndarray.c#L1968-L2000
Or do you have something else in mind?
I think the request is for ulab.numpy.abs to exist. It's true that the builtin abs function works on ulab arrays, though.
>>> ulab.numpy.abs
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'abs'
OK, but then is it worth the flash space? If there is a good reason, we can easily add the function.
So, if this is the function in question https://numpy.org/doc/stable/reference/generated/numpy.fabs.html, then the difference to abs is that it can support keyword arguments, which are not supported in ulab, anyway. The only useful argument there is out, I believe, which we could add. But beyond that, I don't see any advantages compared to abs.
Currently, I need to do this:
- call display.refresh()
- _clean_area()
- wait until refresh_time expires
- update areas
- return immediatly
- call time.sleep(until refresh is really finished)
- set board.ENABLE_DIO = 0 (shutdown and cut power)
During the wait-time after _clean_area (3) the display does nothing, it just wastes battery with a tight loop. (6) is necessary regardless of the value of refresh_time, since there is no wait after update are...
Ok, fine. This keeps the pico-led.
We could make 3 use sleep and that'd save power. I don't think we want to update the displays RAM while it is refreshing though.
hi
i have a programing esp8266-01.
c:/users/shedco/appdata/local/arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/3.1.0-gcc10.3-e5f9fec/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld.exe: C:\Users\SHEDco\AppData\Local\Temp\arduino\cores\e086725d524362f7173c3f551fb5b43a\core.a(core_esp8266_main.cpp.o): in function __loop_end': C:\Users\SHEDco\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\cores\esp8266/core_esp8266_main.cpp:245: undefined r...
Hi, this is not related to CircuitPython. If you are using one of our ESP8266 boards, please post in https://forums.adafruit.com or use our discord, https://adafru.it/discord. If you are using another ESP8266 board on Arduino, please post in the appropriate forum for problems with ESP8266 Arduino.
I don't think anything happens during (3) even when the refresh_time is 28 secs. The display flashes two times after sending the clean-area bytes (dimming all colors), but that is it. The real refresh flashes much more often and the display is still busy way after the refresh() method returns.
And I don't get the point of waiting half a minute after _clean_area, but not waiting that time after the real screen update. This does not make sense. And in all my testing I haven't seen any proble...
- Fixes #7994.
Two problems:
- #5892 made pin reset set a pull-up, which is recommended by Espressif for minimal power draw (and prevents glitches on random pins). Needed to not set the pull-up to make touch waking work. Added a new capability in
microcontroller/Pin.cto not reset just once. I was originally using never-reset to do this, but I can't always clear never-reset at the right time, so sometimes it sticks around and causes the pin to appear to be in use. - #6772 fixed touch o...
Tried to get ESP32 TouchAlarm to work while working on #8003. I cannot seem to set a threshold that works. A low threshold never triggers, a high threshold triggers all the time. There may be something wrong with the setup. I instrumented at the IDF raw values using TouchIn and added some comments about that as part of #8003.
TouchAlarm works fine on ESP32-S2 and ESP32-S3 after #8003.
I don't think this has to get into 8.1.0 final, so you don't have to merge even if you approve. It's been a bug since 7.2.0 or so.
I don't have hardware handy to double-check, but this may be a documentation issue instead. abs is only listed on the page for complex arrays. I tried np.abs and np.absolute, but I know I did not try calling it directly off my array. Since I don't have a debugger on CircuitPython I'm not able to use the normal method of dir(myarray) to discover what is available. np.abs is probably still worth having, but no...
OK, at the risk of sounding dumb (which I already know, thanks) how is the unary abs operator used? I did not find the abs function on the array in an interactive console:
OK, at the risk of sounding dumb, what is the syntax for the unary absolute value operator in numpy? (I am using 8.1.0-beta 2 to obtain analogbufio on the ESP32-S3)
I launched an interactive Circuit Python session and there is no abs function on the array:
Adafruit CircuitPython 8.1.0-beta.2 on 2023-04-26; Adafruit Feather ESP32S3 4MB Flash 2MB PSRAM with ESP32S3
>>> import ulab.numpy as np
>>> a = np.array([1,-2,3,-4])
>>> dir(a)
['__class__', 'copy', 'sort', 'byteswap', 'dtype...
MicroPython 8.1.0-beta.2-43-g4901bdceb7-dirty on 2023-05-18; linux version
Use Ctrl-D to exit, Ctrl-E for paste mode
>>> import ulab.numpy as numpy
>>> abs(numpy.array([-1, 2, -3]))
array([1.0, 2.0, 3.0], dtype=float64)
It corresponds to the abs built-in function. In another post v923z referred to it as a "unary operator", but that reflects some implementation detail of micropython, it's not actually a unary operator like - is in a Python statement like x = -y.
Oh!!! I'm trying to decide how I feel about that. On one level it makes total sense to use the built-in language operator. On another level it is some lateral thinking to step outside of the numpy library to do one operation... My suggested fix would be documentation.
It's always nice seeing the empty artifacts page.
@brazen hatch no that's just how the "ports/unix" build identifies itself. i often run it for quick testing that doesn't need hardware
oh alrighty then, thanks for the info
I have never used it, cuz I always have a board on me.
My suggested fix would be documentation. Thank you for explaining the intended use.
This has actually been documented, unless you have something else in mind: https://micropython-ulab.readthedocs.io/en/latest/ulab-ndarray.html#unary-operators
Are there other ways to reload a board from code.py other then supervisor.reload() and microcontroller.reset() ?
I don't need to know what they are.
Simply whether there are others.
I guess in theory you could wire an IO to reset and cause it to reset
upon triggering the IO I mean
The watchdog being set and triggering also resets the board
Those are more indirect ways though
Crashing the board.
So is this an accurate statement: "There are two common methods to reload a board from CircuitPython code."
For a project guide.
Not a CP development guide or docs
reload != reset technically
Yes, but the function does both
I think so. I cannot think of any others
Depending on this argument I'm describing right now
So I'm setting up the premise to explain the rest.
I understand they're not technically the same.
deep sleep
hard reset (power cycle or reset button), soft reset (microcontroller.reset), supervisor.reload, deep sleep, safemode --> safemode.py
Hmm ok I'll scrap the sentence.
Wire 5V and GND to a relay and wire the control pin to a gpio.
harder reset
arguably, supervisor.set_next_code_file(reload_on_*) ...technically a reload, but various triggers
ah also forgor
autoreload
This thing offers .reset() and .reload. There's three places it soft reloads, and one place it hard resets.
It's because there's WiFi and Adafruit IO in this code, and it's meant to be left unattended.
So it catches everything and does one of those two things.
It's kind of gross, but it works really well.
that's a good strategy for a hands-off project
reload when that should solve the issue, reset when that's required
I've had projects do that as well. Try to handle it and worse case reset, plus the watchdog to catch really weird things
Why not always reset?
Exactly.
The reload is faster.
less interruption.
That's why not always reset.
...serial doesn't drop, sleep memory is retained
Oh, didn't think of these.
I haven't played with alarm much.
Thanks folks. Definitely expanded my thoughts on what reloading and resetting encompasses.
in some scenarios, I'll attempt multiple reloads before a reset, keeping a count of successive reloads in sleep memory, and if a threshold count is reached, reset
I did that too in another project.
Was pretty proud of figuring that out with minimal help.
file writes will shorten the longevity of the flash though
I have somehow managed to not need such stuff, since my stuff basically catches all scenarios..
But sleep memory would be the best since it's ram
nvm is flash still
right, avoiding flash / nvm writes
catches all scenarios
presumably that means reset in some cases?
10 million different excepts
Every piece of hw in it's own class. Can be nuked at anytime.
The memory will be recorded in a not so distant future, so that in oom it will delete the biggest hogs (wannabe nohang).
Reset's are a last resort.
But they aren't part of the main code, so assuming something very bad happened, and it couldn't exec(), it would just dump and fall to the REPL.
For some code like this:
vfs = storage.VfsFat(sd)
What function inside of the core is that calling? I looked inside of shared-bindings and shared-module for storage but I do not see any VfsFat function like this is calling.
extmod vfs_fat
fat_vfs_make_new() ?
@lone axle I grepped for the qstr and found a couple of hits ... shared-bindings/storage/__init__.c: { MP_ROM_QSTR(MP_QSTR_VfsFat), MP_ROM_PTR(&mp_fat_vfs_type) }, so it's probably the VfsFat type. calling a type calls its make_new slot which is as you must have already found .make_new = fat_vfs_make_new, so yes
Is there a place I can look to find out what properties are on an mp_obj_t? I think I've created one successfully but my code won't compile because the variable is unused. I'm hoping to just print out something that came from the mp_obj_t I created so that it won't count as unused and will continue the compilation
It seems that I can pass the mp_obj_t to mp_printf by itself actually. I assumed that wouldn't compile but it does:
mp_printf(&mp_plat_print, vfs);
Hi,
I am working on AI_THINKER_ESP32_CAM (only pin modified from espressif-esp32-eye) with web workflow, So the UART Console is not in use.
When I try to uart = busio.UART(board.TX, board.RX, baudrate=9600) , it gives ValueError: RX in use
I don't even have oppotunity to execute uart.deinit() to release the UART.
The user led on the MIMXRT1060-EVKB is GPIO_AD_B0_08 not _09.
The commented code does not result in blinkenlights, while the uncomment code does.
def blink():
#led = digitalio.DigitalInOut(board.USER_LED)
led = digitalio.DigitalInOut(microcontroller.pin.GPIO_AD_B0_08)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
USER_LED/LED on MIMXRT1060-EVKB is on GPIO_AD_B0_08 not _09.
The following code works, where as if you use board.USER_LED, it does not.
def blink():
#led = digitalio.DigitalInOut(board.USER_LED)
led = digitalio.DigitalInOut(microcontroller.pin.GPIO_AD_B0_08)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True
time.sleep(0.5)
led.value = False
time.sleep(0.5)
I believe every mp_obj_t is a pointer at heart (well most are) so it will print but just the memory address. Are you trying to get a specific type of object. like:
mp_printf(&mp_plat_print, "%d\n", (myobj_t*)myObjPtr);
Okay, messed this up by not working on a branch. Will open a brand new PR once I sort this out...
It might be sensible to control whether or not _clear is called prior to _refresh. This way when the display does actually work, it doesn't take an unreasonably long time to display.
That is exactly what we are currently discussing in #7797. The _clear itself is not the problem, but the wait (for what?) after the clear. You have 8s in the constructor, I use 2s and that works fine.
You might also want to integrate the parts of my PR that deal with the frozen modules and the keys and th...
@tannewt Can you post some test-code that demonstrates the need for a refresh_time value of 28? All my tests show that 2 is enough, but I might not test every possible situation. And this really makes a difference from the user's side. A complete cycle (including connecting to an AP, fetching data from the net and updating the display) takes about 60s with my implementation and 90s with yours.
Another question: will you consider the changes from #7996 to EPaperDisplay.c? I.E. supporting a...
Truth be told, I'm not really sure what I'm trying to do 😅. In that moment I was just trying to get the compiler to get past the "variable not in use" error preventing it from continuing because I wanted to see if the code I had was even remotely close to correct or not.
I have see using just something like (variable); to remove that warning. Obviously rarely something you do not want to have there long term.
Interesting, that is a handy trick to know. Thank you. Yeah definitely no intention of leaving it that way. Just wanting to verify there is nothing completely wrong with the code I have so far.
If it would help you for me to take a look at the code just let me know. Either here or if you're streaming I can pop on. Just woke up though, your results may vary
I'll be taking a stab at finishing off what I started last night when I start up the stream in about 1hr 15min.
I am trying to proof of concept for initializing the SDCard and mounting it inside of board_init() in the core so that use code can imediately start accessing files inside of "/sd/"
the parens with variable inside lead to a bit different error, but still won't compile error: statement with no effect (sdcard_self);
let me try to find where I saw it maybe it was (void)variable;
Welcome
maybe mp_obj_print(vfs, PRINT_REPR)?
Is there any place to see prints that occur during board_init() It seems that the USB serial connection is up and running yet. By the time that tio sees the device I think those prints have already occured so I never see them anywhere.
Will the debug pin output those if I connect to it?
some boards have a debug uart but I don't think mp_obj_print will be able to print to it. supervisor/serial.h:65:int console_uart_printf(const char *fmt, ...)...;
that's initially configured by serial_early_init
@anecdata 's stuff is cool, I wish it was standard functionality, like came for free with circuitpython. (add a safemode.py that appends the reset reason to a file, the boot.py to catch errors and check reason for bootup, and a code.py with the 3lines printing boot reason plus something circuitpythony/hello-worldy)
It's linked from some general advice about programming for [long-term reliability on circuitpython here](http...
So, I built a Hackintosh but it cannot access any of my microcontrollers. Using a USB port build into the motherboard I can plug in an external SSD or a USB stick and they both show up in my Finder Locations But when I plug in any of my Circuit Python boards nothing gets mounted. I know the port is good and cable is good (it works on my MacBook).
Not sure where to start troubleshooting. Maybe some BIOS setting? I guess I don't understand the underlying architecture for a microcontroller (Pi Pico, Feather RP2040, QT-Py) or how they differ from something like a USB stick.
Any suggestions would be very awesome 🙂
You may want to ask in #help-with-projects - this channel is for CircuitPython's development
thanks Paul!
My first time creating a new board definition, hopefully everything is ok.
Change column start from 52 to 53 to fix a line at the top of the display.
@tannewt I don't understand why most of these commits appear to be by you. Did you merge something in?
Missed doing apt-get update before apt-get install for mpy-cross builds. We added these previously for other actions. Now seeing failures because this is missing.
How can I fix these pre-commit problems with my pr? https://github.com/adafruit/circuitpython/pull/8010/checks Trim Trailing Whitespace is failing?
Two problems: one file is missing a newline at the end of the file. The other is that the blank line after the D33 line in pins. c is not blank but has spaces on it.
There are two different boards, the NXP_MIMXRT1060-EVK and the NXP_MIMXRT1060-EVKB. On the EVKB, the LED is on 09; on the EVK, it's on 08.
EVK: https://www.nxp.com/webapp/Download?colCode=MIMXRT1060-EVK-DESIGN-FILE-A2
EVKB: https://www.mouser.com/pdfDocs/NXP_MIMXRT1060-EVKB_SD.pdf
I am closing this, but you are welcome to submit a board def for the EVKB board.
CircuitPython version
Adafruit CircuitPython 8.1.0-rc.0 on 2023-05-17; Teensy 4.0 with IMXRT1062DVJ6A
Adafruit CircuitPython 8.0.5 on 2023-03-31; Raspberry Pi Pico W with rp2040
Code/REPL
# Import modules
import board
import busio
import displayio
import time
from adafruit_display_shapes.rect import Rect
from adafruit_display_shapes.line import Line
from adafruit_st7789 import ST7789
# Pin definitions for Teensy 4.0
PinSPISCK=board.D13
PinSPIC...
We are having the same issue when using tj-actions/changed-files@v35.1.0, any idea here? how can we fix it?
thank you! That should have been obvious but I couldn't figure it out.
I'm on gcc 13 already.
Only rp2 needs a one-line chance and it's good too.
Missed doing
apt-get updatebeforeapt-get installfor mpy-cross builds. We added these previously for other actions. Now seeing failures because this is missing.
Had this failure on a PR I submitted yesterday, since it's been fixed will that be re-ran?
can WSL be used to build CP?
It appears the one check that failed was an issue with the check that's been updated according to #8012
Had this failure on a PR I submitted yesterday, since it's been fixed will that be re-ran?
Your PR is against a commit that is before the fix. So unless you merge or rebase from upstream, the error will not go away. But we can just ignore the error in your PR; you don't need to fix it.
This looks ok to me, passed on your visual check.
This looks ok to me, passed on your visual check.
Thanks!
Wasn't sure about CIRCUITPY_CREATION_ID so I incremented it by one from the existing lolin_c3_mini ID.
Also, not sure if I need to define something in pins.c for the Lolin I2C connector on the board, which is different from stemma-qt connector.
Successfully builds and flashes on my c3 pico.
Submit a PR to https://github.com/creationid/creators/blob/main/creations/wemos.md to document the creation ID you chose.
I see that the Lolin I2C connector is not the same :shrug: as QWIIC or STEMMA/QT. That is too bad. You (or was it someone else?) chose 5 and 6 for I2C, but the schematic shows 8 and 10 for the connector. Since the board does not label 5 and 6 for I2C, I'd suggest dropping the board.I2C() altogether, to force the user to specify the pins exactly. Or make board.I2C() ...
You may want to change this.
You may want to copy over the debug no_resets from any other esp32s3 board.
They should be the same if the pins are exposed.
If you are sure of it being QUAD, you should try booting it without this.
Why does this override optimisation?
You may want to change this.
Note: New esp boards are added by the day.
I suggest the changes to every board definition are applied only to samples while the PR is a work-in-progress, and only when it's about to be merged should they all be updated.
Otherwise, some are bound to be forgotten.
Implements alarm.sleep_memory on RP2040. Implementation taken from nRF. It's just a 256-byte block of RAM, since RP2040 does not power down RAM when sleeping.
Fixes #5081. That issue says other things must be done, including removing a watchdog that zeros out RAM. But I didn't do that and it still works?!
Test program, tested with fake deep sleep and with power just via a 5V adapter:
import alarm
import board
import os
import time
time.sleep(1)
u = board.UART()
u.bau...
I am pretty sure it should be fine
Adds new board for MIMRT1060-EVKB (not to be confused with MIMRT1060-EVK).
CircuitPython version
8.0.5
Code/REPL
# https://github.com/gallaugher/disco-button/blob/main/demo_of_sd_mp3_play_break_with_sd.py
# note repo above also has mount_sd.py, but it's the standard one that's from Adafruit's learn guide
# Just a test of playing MP3 files when pushing a button
import board, time, microcontroller, mount_sd, digitalio, random
from audiopwmio import PWMAudioOut as AudioOut
from audiomp3 import MP3Decoder
from adafruit_deb...
CI is failing with duplicated USB VID/PID, but the VID/PID for EVKB is indeed 239a:8084. It appears to be the same.
CI is failing with duplicated USB VID/PID, but the VID/PID for EVKB is indeed 239a:8084. It appears to be the same.
CircuitPython version
Adafruit CircuitPython 8.1.0-rc.0 on 2023-05-17; Teensy 4.0 with IMXRT1062DVJ6A
Code/REPL
# UART setup:
UART=busio.UART(rx=board.D0, tx=board.D1, baudrate=250000, timeout=0, receiver_buffer_size=1024)
# Code line that causes the error:
byte=UART.read(1)
# Complete function where it's used:
def UARTReceive():
"""
Receive Message via UART
return: String/None - Message if present, otherwise None
"""
Message=[]
b...
alarm.sleep_memory survives supervisor.reload(), and microcontroller.reset() into NORMAL and SAFE_MODE (more extensive persistence than espressif port where alarm.sleep_memory does not survive microcontroller.reset()). Nice, thanks @dhalbert
So far in my testing LFOs are great and work well.
One minor addition would be to have phase be in the LFO constructor so we can have multiple LFOs sharing the same waveform but being out-of-phase.
Submit a PR to https://github.com/creationid/creators/blob/main/creations/wemos.md to document the creation ID you chose.
I see that the Lolin I2C connector is not the same shrug as QWIIC or STEMMA/QT. That is too bad. You (or was it someone else?) chose 5 and 6 for I2C, but the schematic shows 8 and 10 for the connector. Since the board does not label 5 and 6 for I2C, I'd suggest dropping the
board.I2C()altogether, to force the user to specify the pins exactly. Or make `board.I2C...
8.1 has synthio.Synthesizer. It doesn't provide all the features listed above but it can hopefully form a basis for more enhancements in the future.
This seems relevant to the choice of I2C pins: https://github.com/adafruit/circuitpython/pull/5467, and I think explains the current choice. I had not seen this when I wrote my comment above.
@evildave666 @chukwon @wemos @askpatrickw @bill88t tagging you for interest here
CircuitPython version
Adafruit CircuitPython 8.1.0-rc.0 on 2023-05-17; LILYGO T-DISPLAY with rp2040
Board ID:lilygo_t_display_rp2040
UID:DE62309247682B26
I can't use board.BUTTON_L , and if I check with code below. I see :
board.BUTTON_L board.BUTTON_R board.GP6 , this mean it ref to the same pin GP6, right?
Code/REPL
import microcontroller
import board
board_pins = []
for pin in dir(microcontroller.pin):
if isinstance(getattr(microcontrol...
@meager shell message @gilded cradle
@tannewt I don't understand why most of these commits appear to be by you. Did you merge something in?
No, I translated the "No %q pin" string I added based on the "No RX pin" translations.
I added phase_offset to LFOs, I think it accomplishes that request.
<@&356864093652516868> We'll have our weekly meeting in 2 hours at 2pm EST. I look forward to seeing your status updates and hug reports! Here is a link to the weekly doc: https://docs.google.com/document/d/1sH6HBDsm_YgHLivi139diXzgmZpUEelixI6saqFGOvA/edit?usp=sharing
Okay, be gentle...
I've got permission from sensirion to use their name in my repo name and library name for the SEN5x air quality sensors driver. I want to use a stupid name that goes against convention, to maintain code compatibility across python + circuitpython. The library is imported as sensirion-i2c-sen5x with a dependency also imported from sensirion-i2c-driver which i've also ported and plan to release for the community bundle. What should my library name be when using cookiecutter, and moreover what should my Repo name be. The guide seems to warn against this heavily and say extra steps will be required, and then mention no more of the extra steps required to make it work, so please lay it on me, what's required if repo name and library name don't match. Also can I make it match (assuming circuitpython is auto-removed from the middle of the library name and it was something like sensirion_CircuitPython_i2c-sen5x)?
@random junco so excited to have you return to hosting! preemptive hug report
I'd probably just call the repo CircuitPython_SEN5x and have the import be sen5x
I hesitate to say sensiron because we usually treat the adafruit_ portion of our names as who is supporting the code
and that's not sensiron in this case
they (the product manager of developer experience) were happy as long as the readme clearly denotes a fork, and want to bung a link on their github community libraries page and weekly makers social media. I've entered the company/author to me and copyright to them plus fork mention everywhere. I wanted to keep the name the same so if you're using the python version for basic datalogging and switch your code to CPY it all works out the box (using Circup). But I guess I'm responsible for maintenance
maybe it's too bigger issue
Submit a PR to https://github.com/creationid/creators/blob/main/creations/wemos.md to document the creation ID you chose.
I see that the Lolin I2C connector is not the same shrug as QWIIC or STEMMA/QT. That is too bad. You (or was it someone else?) chose 5 and 6 for I2C, but the schematic shows 8 and 10 for the connector. Since the board does not label 5 and 6 for I2C, I'd suggest dropping theboard.I2C()altogether, to force the user to specify the pins exactly. Or make `board.I2C...
this product won't be made...
Looks like an incorrect pin mapping: https://github.com/adafruit/circuitpython/blob/main/ports/raspberrypi/boards/lilygo_t_display_rp2040/pins.c#L16
I bet BUTTON_R is incorrect.
Is there an easy way to get a build of CP for the SAMD21 QT PY that doesn't have safe mode, without going thru the build process?
I'm trying to minimize time to code execution
@sharp jacinth that's the only way I know of.
how much time does it take to do the safe mode check?
Maybe that actions custom build utility? it would make the build in github actions container of you having to do it locally
[happily lurking today, howdy y'all]
Welcome back, Paul!
@sharp jacinth the utility foamyguy mentioned https://github.com/adafruit/circuitpython/pull/7594
A typing tutor now exists for the #Arduino and #CircuitPython variants of the Quirkey chord keyboard: https://github.com/VikOlliver/Quirkey
It currently only teaches the alphabet and basic punctuation. But this sort of thing is an important part of supporting an Open Source device.
Again, not the greatest bit of python coding in the world, but...
Code for the Raspberry Pico Sequencer as it can be seen here: https://www.reddit.com/r/synthdiy/comments/nd14d4/diy_circular_sequencer_made_with_raspberry_pico - picoSequencer.py
The MicroPython programming language
implements a sizable subset of Python that can run on microcontrollers,
thus bringing Python's easy-to-learn syntax, readability, and
versatility to the embedded world. With its recent 1.20
release, MicroPython introduces a new package manager, reduces its
code size, and adds support
for many new boa...
Way to go Tekktrik!
@onyx hinge could be interesting to try to make this interface and power it with synthio: https://trianglecore.rocks/standalone/p/sound-objects-shruthi-xt-mutable-instruments
The Shruthi XT is a popular hybrid monosynth developed by Mutable Instruments. It features a digital oscillator and an analog 4-pole filter, making it capable of producing a wide range of sounds. The XT version is essentially the same as the Shruthi-1, but with most controls moved to the surface for
FeatherWeather
@slender iron that looks cool but it's pricey! wow
https://www.makenoisemusic.com/synthesizers/ohcoast for an interface with patch cables
(email: technical@makenoisemusic.com text: Contact Technical Support)
(email: sales@makenoisemusic.com text: Contact Sales/Dealer Inquiries)
(email: media@makenoisemusic.com text: Contact Media / Marketing)
(email: natasha@makenoisemusic.com text: Contact Jobs)
(email: lewis@makenoisemusic.com text: Report Website Error)
right, so mimic the interface but generate the audio from cp
I like the idea of a board.SD built in
From what I've seen so far of the synthio "experiment" it's wildly successful. Mind blowing stuff.
The different ways you can insert different color combinations is very important. Good stuff.
I've also noticed the S3 is much more stable lately, it's awesome.
@devout jolt I'm also thinking about how to do a stemma qt "patch panel" board
so that you can detect where cables are plugged into
Any preview of the G0 board? I'll likely never use anything that advanced but seeing new custom board designs is cool.
Polyphony maddness ❤️
source is here: https://github.com/tannewt/StemmaG0
it's very simple because the G0 is very easy to support
Thanks!
Thanks
Thank you for hosting Paul!
Thanks for hosting Paul! Have a good day everyone.
Thanks all! have a great week!
Very smooth Paul, excellent job hosting 🙂
that would be cool because my eye always twitches when I see people hotplug their I2C cables 🙂
@slender iron oh I was wondering if you had a 3d render screenshot for a quick peek. I'd actually have to load up software and import it just to view it.
I'm thinking they'd be trs cables like those used in synths
lemme grab it off jlc
having screenshots of the board helps
@lone axle My recording is good, thanks for the backup
JP 😁
Very cool @slender iron!
most of the circuitry is standard stemma qt level shifting
cute little birdy
looks better in enig. it is my chickadee tech logo 🙂
G0 programmable over StemmaQT? 🙂
ya, exactly. the stm32 chips have an i2c bootloader in bootrom
Sweet
I was going to ask about the stemma but I was like "nah there's no way he'd use stemma for that". That's amazing.
the cheapest of the line is 50 cents. cm0 at 64mhz with 32k flash and 8k ram
and the C0 is a newer line with the same footprint and supposedly cheaper
Sounds like a good seesaw replacement
I think limor is going attiny for now
this is my answer for folks who need multiprocessing in cp 🙂
seems a bit overkill for seesaw?
ATtinys do have very hardy GPIO. Good for butter finger people like myself
ahhh stm coprocessor sounds neat, i'm guessing you'll mostly use it for debugging uses though.
I'm thinking seesaw-like but reprogrammable
50¢ is about what the ATtinys cost
Yah that sounds cool!
software is the hard part
I was thinking it'd be handy for a synth control interface
yeah if the cost is about the same you can definitely get a lot more value out of a stm
yeah that's todbots realm i'm still trying to figure out asynchio basics. way over my head but sounds like you're happy with it.
@devout jolt do you know if polling a bunch of inputs over i2c is too slow for sythy stuff?
my brain's been thinking about multimaster i2c where each control writes values to a central place when values change
rather than polling
depends on how many inputs and what kind of inputs. like any i2c device there isn't an infinite amount of bandwidth on a bus.
ya, I just haven't done the math yet
I've been using the new UPDI programmed ATtiny-blah for several projects and finally did my I2C client coding. Now I can build various "user interface hardware" and it will be easy to use in CircuitPython (or any other language).
Only because I2C transactions seem to eat up a lot if the available processing. I had to move my Pico sequencer to Arduino so I could use the second core for UI. Between I2C & displayio I was getting tens of millis of timing variability
also the MCU matters. my TR-Cowbell kind of struggles a little bit if you throw the kitchen sink at it because it's running on a pIco.
the idea being that human hands can only change so much at once but polling has to check everything
this is true but you can also automate a lot more than a human can touch with envelopes
with multicontrlooer we could have CP be the target and queue up incoming packets
got a link?
I was getting the same behavior. Even with synchio the pico just doesn't have enough horsepower to do a bunch of things simultaneously without minor timing fluctuations.
and it was visibly present just watching the sequencer scroll.
The AVR Coding 101 materials are as close to bare metal ATtiny/AVR coding as I can get without writing machine code 😉
It's not CircuitPython but now with the I2C Client code and sample, I can make lots of I2C enabled "user interface" hardware that is easy to use with CircuitPython.
the iMX is where it's at for synthio stuff
really looking forward to diving into synthio on the imx.
i know there will be ram limitation but still, it's not a pico
imx has variants with more ram
The ram on the iMX is tight for synth stuff. I was actually looking at other chips with more ram
for my "seeknobs" project that used a seesaw to read 8 knobs and 4 buttons, I found if I only read one knob each time through the loop, instead of reading all 8 knobs at once, that minimized I2C overhead and allowed a reasonably responsive UI: https://github.com/todbot/seeknobs & https://github.com/todbot/seeknobs/blob/main/circuitpython/knobs_midi.py
and someday maybe getting the phillips DSP stuff on there up and running
just get a teensy4 🙂
Just a couple documentation comments. The rest looked good to me. Just commenting now pending all the test fixes I know you are aware of.
The ring properties are missing from here.
Same as above says the values are -12 to +12 but only +/- 1 octave?
Isn't this +- 12 octaves now?
what seesaw chip?
Interesting. I'm working on a board with 6 push button rotary encoders - all with an I2C interface.
I've never looked at the Teensy I should
do some of the imx's allow for external ram?
not even sure if that's a thing, i know external qpsi is. would love to have a board that has upgradeable ram and flash
they do but it's not that interesting now because the high end ones have a ton internally
1060 on the teensy has 1mb of sram
wow!
@devout jolt looking forward to hearing more about seeknobs. neradoc posted a link to an m5 stack i2c rotary encoder and potentiometer boards a while back. they looked really good for developing a large array of knobs quickly.
one thing about pcb design is once you make it your stuck with it. i2c chained banks of knobs isn't as constrained but it's still all on 1 bus. need more bandwidth, ram, cpu. always the predicament. concessions must be made with microcontrollers.
it's an old project that I don't think I'll continue with. The successor in many ways is https://github.com/todbot/picostepknobs
ahh that looks so cool!
beat me to it. oh wow there's a little carrier board. yeah definitely looking forward to seeing that one progress.
i was going to add rotary encoders on the TR-Cowbell but there are 16 of them and every rotary encoder is expensive. would end up costing a lot more. might make one for myself but there's no way i'll ever make something like that available as a giveaway. rotary encoders are expensive for some reason.
@empty salmon why avr instead of arm on a cortex m0?
yeah I've been wanting pots instead of encoders lately, and you can do 8 pots with one ADC pin + 4051 mux chip 🙂
Hooray!!!!! 🎉
Ok, so wait. Practically speaking, what happens when code using time.monotonic() runs too long? The shortest time interval in my code that is being tracked is 1 second. How long would the code have to run before something doesn't work right?
I understand what's happening technically speaking. I simply don't quite grasp what it means practically speaking for my situation.
I was considering adding a bit of code that resets the board every couple of days, if it has been up the entire time.
But forgot about that, and only remembered now.
Here is the notes document for next TUESDAY'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/1VcPOjquw3lEHudLutRlrpuA2AQNsrTsxyYjwu2nnvZY/edit?usp=sharing
CircuitPython Weekly Meeting for May 30, 2023 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 att...
Definitely sounds like a bug on iMX RT.
If someone gets a chance to merge my weekly meeting notes PR, I'd appreciate it. Thanks! https://github.com/adafruit/adafruit-circuitpython-weekly-meeting/pull/119
I believe it is a 32 bit int that tracks the time so after it fills it would roll back to 0. I could be wrong on that
I thought it lost precision.
@idle owl I’m sure someone will correct me if I’m wrong. time.monotonic is basically seconds or at least the boards best attempt at seconds.
Oh because of the decimals it may be a float. So as it gets larger you are right it does
Yes I understand time.monotonic itself.
Just not sure offhand at what point
I'm talking about it's behavior in CircuitPython specifically.
CI is failing with duplicated USB VID/PID, but the VID/PID for EVKB is indeed 239a:8084. It appears to be the same.
Please switch it to PID: 0x813C We've allocated Adafruit PIDs for the others too.
That's what I'm trying to find out. 😄
Or rather, I'm trying to find out what that loss of precision means for tracking 1 second intervals. It must fail at some point or start acting weird. But I'm not sure when or weird-how.
Ive never run a board long enough to know if it rolls over. Anyone have an idea how long that would take approximately?
@tulip sleet knows at what rate the float's lose precision
I know, but I didn't want to ping him directly.
i am calculating it now
it doesn't roll over, it just gets less and less resolution
Thank you
about 50 days
@tulip sleet Ok, and at 50 days, what happens?
Just needs the USB PID update. Thanks for the PR!
Practically speaking.
Yes it will lose precision over time. For tracking time in particular it will show up as a time drift, which happens with most mechanical watches too. So a reset after a certain amount of time is probably a good idea.
at 50 days is 2**32 ticks, which approximately is the point at which the granularity of time.monotonic() becomes > 1024 msecs
(about a second)
if you used monotonic_ns() it would not be an issue
This code doesn't need to be super precise, except for the time change, which is Adafruit IO, not time.monotonic.
Min tracking time is 1 second, and that's for sending pings, which if it goes to 1.024 seconds isn't going to hurt anything...... oh wait. Except maybe the blink happening at the appropriate interval.
after 100 days it will be 2 seconds
In theory, in practice Ive noticed a much more substantial drift than 1 second off after 50 days. I’ve noticed as much a couple minutes off per day, depends on the board perhaps? It’s been a while since i ran any RTC stuff.
etc
@tulip sleet Would you reload the board or switch to ns.
I already reload in places, so the import is already there.
Also, to clarify, soft reload resets time.monotonic() right? It doesn't require a hard reset?
(Though both are options in this code.)
i think it depends on the board, but it doesn't reset time.monotonic()
at least for some boards
right
the background ticking thing just keeps on ticking like Timex
I have not used ns.. maybe that was part of the problem? Was using regular monotonic i think.
Which on some level is less readable in the code. 😕
Nanoseconds aren't standard in folks' brains.
Not in mine at least.
Nah... don't need another lib in the mix.
I've done the board reset thing before.
It adds two lines or something. It's not bad.
how often do you update date / time? could just use RTC time
Every time through the loop.
I mean clock time from ADafruit IO
My feather weather has been running for about 3 days. It soft reloads during some usb events like opening file manager which touches usb. It does not hard reset the board. Only a hard reset will reset monotonic.
every time through the loop, you could just check the RTC seconds and see if it's more than the prior check
then do your 1-second task
How do you even set the RTC time? How much more code does that add?
Are you interested in hunting this down? I'm happy to help guide you.
Yeah microcontroller.reset like once a day should be plenty. If you intend to keep time with rtc you’ll need a method to update the clock like wifi or gps. Adafruit gps module is great way to pull time while being completely offline.
Adafruit IO time service is already used to get current time.
rtc = rtc.RTC()
rtc.datetime = ntp.datetime. # or w/e your source is
@dhalbert may be worth integrating into the safemode.py guide.
Oh because they're both struct_time!!
yup
sorry, not familiar with the example code, the addition would be setting the on-chip rtc
I would be using rtc.tm_sec or something?
right
I think adafruitio will pull epoch which will slot into RTC with almost no effort.
I have some time examples in my github snippets you might find useful.
Sure, link them if you can. I think I'm understanding how this change would work. I want to at least consider it.
Was designed to work with gps but if you feed it adafruitio epoch time instead should be good.
I understand.
yeah, sundial.tm_sec, or once the rtc is set, you can just check time.time()
(and compare to last stored, from the previous second)
yup, once rtc is set
then the time functions and properties use the rtc
ohhhhhh. I think.
it's an import, and a one-liner each loop to re-set the rtc from sundial time, but is is an added dependency
i dont know what happened to my rtc example. I lost it when resetting my github.
deep dive (more than you want to know) here https://gist.github.com/anecdata/1b09c992df194b9fa6033ad58c6e1e49
RTC is separate? Or only available on some boards?
hmmm... any board with wifi has it
Ok
samd51 has it
So are we branching to 8.1.x and 9.0 now?
Or will there be a 8.2?
Here is my display if I let it have the 28 seconds for the clear step.
https://github.com/adafruit/circuitpython/assets/52649/de56b783-ffa7-44b4-bc3b-89affd13f509
Automated website update for release 8.1.0 by Blinka.
New boards:
- m5stack_timer_camera_x
oh I forgor to make pr for it
btw, that thing takes amazing photos for how small it is
the only downside is it can fit about 4 full res photos onto itself.
Another question: will you consider the changes from #7996 to EPaperDisplay.c? I.E. supporting a shiftregister pin as a busy pin? This would help since with a busy pin the value of refresh_time is ignored anyhow.
Supporting shift register would be ok but I doubt it buys you much time. My understanding is that the refresh sequence is fixed by the LUTs and will take the same amount of time each time. So, the busy pin will just get you a slightly more precise delay time.
I think we'll do a quick 8.2 with the final synthio PR for a while before doing the disruptive 9.0 stuff (merge MP and IDF 5)
Yea that's prolly for the best.
@idle owl silly me, occurred to me that if all you need is roughly-one-second intervals, you don't have to mess with rtc, time.time() will give seconds, monotonic since last reset (or last set of rtc, if applicable)
(it just won't be the right clock time unless rtc is set)
CI has had a board fail:
https://github.com/adafruit/circuitpython/actions/runs/5049844478/jobs/9060619506#step:42:101
You guys may want to rerun it.
I have been monitoring it since I wait to push my own commits that expect mpy-cross for 8.1.0.
Thanks; this happens often, and I have to review the builds whenever I do a release.
That was the whole issue is that monotonic() will after 50 days increase 1 second to 1.024 seconds, and by 100 days, it will be 2 seconds. This is intended to run for as long as it possibly can without interference.
time.time() won't do that, it's an int
I finally made RTC work, and in doing so found a pretty big flub in my time code anyways, so that was worth it.
Won't it eventually overflow?
Or what's the deal there....
not in our lifetimes
or the lifetime of the solar system??
I dunno, it can get huge
Fair enough.
only ticks_ms() loops back
Also, oof, I'm getting espidf errors again here.
Trying things.
The ping is happening too fast. 😂 The timing error I found? I had it set to if timea - timeb > interval:, so if the interval was set to 1, it would trigger at 2 seconds.
Either I broke my time stuff and it's happening faster than 1 time per second, or I found the ping limitation, and it's present on ESP32-S3 too.