#circuitpython-dev
1 messages · Page 426 of 1
From https://github.com/raspberrypi/pico-sdk
! [rejected] 1.3.0 -> 1.3.0 (would clobber existing tag)
jepler@bert:~/src/circuitpython/ports/raspberrypi/sdk$ git tag -d 1.3.0
Deleted tag '1.3.0' (was ebc601f)
jepler@bert:~/src/circuitpython/ports/raspberrypi/sdk$ git fetch origin --tags
From https://github.com/raspberrypi/pico-sdk
* [new tag] 1.3.0 -> 1.3.0
``` for me, this fixed it
(manually deleting the tag that they replaced/changed/updated)
good luck!
Also, git status is showing all the submodules updates. Now I have this: modified: ports/broadcom/firmware (untracked content) modified: ports/stm/st_driver/CMSIS_5 (untracked content) modified: tools/Tecate-bitmap-fonts (untracked content) modified: tools/adabot (untracked content) modified: tools/huffman (untracked content) modified: tools/uf2 (untracked content)
I almost always ignore 'untracked content' messages
Hm ok. I always use git add . so I usually don't ignore them, heh. Probably spend less time adding specific files than I do going through all of those directories and figuring out what changes to delete, simply so I can do git add ..
But half the time I do the longer process.
Ok, more than half.
Hey @lone axle , thanks for getting back to me. Yes, mypy --disallow-untyped-defs produced those warnings, that's how I approached finding what needed annotation. The problem I'm having is that I can't seem to properly import WIZNET5K so that it's known to mypy as a type name. Anything I try results in
Name "WIZNET5K" is not defined
I even tried adding from adafruit_wiznet5k import WIZNET5K but I get Module "adafruit_wiznet5k" has no attribute "WIZNET5K".
I try to always use git-gui and select things one by one
After doing these commands, the make fetch-submodules runs through the whole list.
are you working on a git branch already? If possible can you commit / push your version to github and I could then check out yours to see if I can replicate.
Yes, I posted a link to my repo/branch earlier, but here it is again: https://github.com/JetForMe/Adafruit_CircuitPython_Wiznet5k/blob/rmann/issue-45-missing-type-annotations/adafruit_wiznet5k/adafruit_wiznet5k_socket.py
Lemme know if that's not what you meant
it's on the annotations like this one https://github.com/JetForMe/Adafruit_CircuitPython_Wiznet5k/blob/bd2219d3b6361d02cd5cf83ed71175d94a518a88/adafruit_wiznet5k/adafruit_wiznet5k_socket.py#L29 that you get the error?
As far as trying to annotate that specific type, yes. But there are other errors related to import, too (note that the line numbers are off here a bit because I've been experimenting):
$ mypy adafruit_wiznet5k/adafruit_wiznet5k_socket.py --disallow-untyped-defs
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:19: error: Module "adafruit_wiznet5k" has no attribute "WIZNET5K"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:30: error: Name "wiznet5k.WIZNET5K" is not defined
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:123: error: Function is missing a type annotation
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:153: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:159: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:160: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:161: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:162: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:164: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:198: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:219: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:220: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:224: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:236: error: Module has no attribute "adafruit_wiznet5k"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:252: error: Incompatible types in assignment (expression has type "Tuple[int, ...]", variable has type "Optional[str]")
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:252: error: Item "None" of "Optional[str]" has no attribute "split"
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:291: error: Module has no attribute "adafruit_wiznet5k"
Most of those error messages are caused by mypy suddenly not liking the imports when type annotation is applied to the containing method. If you remove the type annotations, then those "Module has no attribute" errors go away
(A couple of those errors are because I don't have the annotation quite right)
Can anyone explain why the original file has import adafruit_wiznet5k as wiznet5k but then references all symbols in that module as wiznet5k.adafruit_wiznet5k.<whatever>?
@native sandal I was able to get it to recognize the class by doing the import like this:
from .adafruit_wiznet5k import WIZNET5K
then the annotations like this:
Huh. What does the leading . do?
I am probably not the best suited to answer accurately... My understanding is it tells it to look "in this directory" for the thing trying to be imported
similar concept to ./ in a terminal.
Makes sense
I'm still uncomfortable with the other import
import adafruit_wiznet5k as wiznet5k
I don't really get why it would be needed specifically in this case because it seems like wiznet5k.WIZNET5K should have existed to me.
Agreed
I don't have any insight into the way the import is done in the original code either unfortunately.
@lone axle So, wait. Will it continue to follow the same actions run as long as it's running? Or on the next loop does it consider it already_shown and not do anything with it?
@native sandal if you are interested in doing so you could refactor a bit to change how constants are imported and other tweaks while you're working on typing. Totally cool if you'd rather not tackle it all at once, or at all as well though.
it will continue to follow it as it is running. Only once it sees that the workflow is complete will it add it to the already_shown list and then not sure it on subsequent loops.
Well, now that we've got the class importing, I'm running into new issues. I have to make _the_interface type Optional[WIZNET5K], and then I get a ton of:
adafruit_wiznet5k/adafruit_wiznet5k_socket.py:77: error: Item "None" of "Optional[WIZNET5K]" has no attribute "get_host_by_name"
stuff like that will have to be ignored at this point. For the first pass through the libraries the main mypy complaints we want to tackle are the missing types for function / return.
When we get the bulk of the libraries taken care of on the first pass then at some point we'll enable mypy checks in the actions, and at that time choose the right configuration that will affect which things it flags.
bot deleted it. I can see though
Why did it get deleted? I just thought I had a stroke
My guess is the inclusion of "hell". But not sure.
Well, I guess I can make it this: _the_interface: Any = None
Yes, that was the issue.
Any idea what the types should be on these parameters?
def __exit__(self, exc_type, exc_val, exc_tb):
if self._sock_type == SOCK_STREAM:
self.disconnect()
stamp = time.monotonic()
while self.status == wiznet5k.adafruit_wiznet5k.SNSR_SOCK_FIN_WAIT:
if time.monotonic() - stamp > 1000:
raise RuntimeError("Failed to disconnect socket")
self.close()
stamp = time.monotonic()
while self.status != wiznet5k.adafruit_wiznet5k.SNSR_SOCK_CLOSED:
if time.monotonic() - stamp > 1000:
raise RuntimeError("Failed to close socket")
It may end up being the case that some libraries may need more refactoring in some situations in order to appease all of the mypy checks. Some may end up being ignored or configured less strictly.
I'm not familiar with __exit__ but I would guess that CPython has something similar and our arg types should probably match.
type is ignored, exc_val would be an Exception instance, exc_tb is the traceback, obtainable with ex.__traceback__
They may be ignored, but I need to know the type for annotation.
at least I think, it matches the arguments of traceback.print_exception
(well you don't need to, annotations are optional)
Of course, but for completeness…
here is the traceback module:
https://docs.circuitpython.org/en/latest/shared-bindings/traceback/index.html
it's the type of the exception, so Type[BaseException] apparently
Ugh, the code plays fast and loose with types internally (e.g. host can be a str or bytes and it branches based on type. Makes annotation hard, even with Union
it's okay if you end up sticking to more generic types for the variables that are like that. First pass has exposed one or two other libraries with similar things. Not needing to have it solved 100% now though. We're aiming to get the bulk of the straight up missing annotations filled in before we get into the specifics in some of the more convoluted cases.
Tomorrow and Wednesday likely don't work for me. Figuring out what sushi we want for dinner, once that's ordered, I should be able to chat. Does that work?
Sounds good, and I'm definitely referring to sushi as well 🍣 
😄 Nice
I always take the M6
Just order all the sushi
This place has a LOT of options. That would be... inadvisable.
Not ordering too much sushi is a skill in itself
Indeed.
Ok, sushi sorted. Are you still around?
Yup yup!
Ok, let's vid.
@lone axle It occurred to me we could use blinking to differentiate queued and running. Limor liked it. I think I can do that, looking at the code, so I'll try that first, and ping you if I can't get it going. I won't get to it until tomorrow anyway.
Confirmed on QT PY ESP32-S3
Back at my desk with access to my board. No, that fix didn't work.
I'm capturing some notes about this as I look into it:
-
CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER changed to CONFIG_ESP_PHY_MAX_WIFI_TX_POWER and the valid values are 10-20, not 8.5 as mentioned in MicroPython.
-
MicroPython [appears to do a calculation](https://gi...
oh wait, <light dawns> you were asking if the decoded output was backwards.... well I think normally I read the last line of a trace to find the last executed statements. It appears that the output from decode_backtrace is the other way around. That's not really a problem as long as you know which way to read it.
The port.c:294 code looks to me like it's just dumping the backtrace, the referenced code segments prior to that one are:
===============================================
main....
I was thinking that the reason I wasn't seeing the assertion message was that the USB interface was crashing so I rebuilt with debug uart enable and connected a terminal via RX/TX.
When connecting via an RX/TX terminal, the board doesn't crash. I should have made this connection earlier but that reminded me of a Micropython wifi crash issue https://github.com/micropython/micropython/issues/8635. It looks like the Micropython issue was resolved by moving to a newer ESP IDF.
After some more testing.... it turns out that when connected via an RX/TX connection rather than over UART, the wifi connect usually didn't crash the board, however if I ran the wifi connect repeatedly, it did eventually crash the board.
The comment in /home/pi/circuitpython/ports/espressif/common-hal/microcontroller/init.c concerned me so I threw a return in the if block:
if (nesting_count == 0) {
// Maybe log here because it's very bad.
return;
}
This...
Hello, I 'm designing a sampler with a Pipico and a neotrellis. As the memory is not big enough on the pico, I plugged an SD card with a SPI BUS, but my pico crashes often when I play samples from the SD card. Should I copy the samples to the internal memory of the pico first? If yes, do you know how? I don't understand how to copy the files with the OScircuit python library. Thanks
well, there is no command to copy a file, you just open the source file for reading, open the target file for writing, and then in a loop read all bytes from the former and write them to the latter
Hi, I know that the frozen library featrue is designed for master boards in small memories. But we find it could be very convenient for users if we can distribute some common libraries with the firmware. Since our master board is designed for non-professionals(young students), we really need this and hope you can merge our pull request. Thanks.
@timber mango In case it helps, here are the instructions I use to copy files. Copying in binary mode is probably overkill for your application but it won't hurt.
fOrig = open("/sd/filename")
fCopy = open("/filename", "wb")
line = fOrig.readline()
while line != "":
fCopy.write(bytearray(line))
line = fOrig.readline()
fOrig.close()
fCopy.close()
I can't get midi data through current endpoint of usb host implementation because midi data is sending with "USB-MIDI Event Packets".
Am I right or I am watching in wrong direction?
@tulip sleet do you remember if we investigated gcc 11.2 (arm's toolchain binary released in February)?
I was just going to write to you. I fixed it in a different way, which I think will work too. It is not the same fix as what I gave you. See #6498 and adafruit/samd-peripherals#42. Try the build artifacts: https://github.com/adafruit/circuitpython/actions/runs/2516315728. Scroll down to see the artifacts. Unzip the file for your board and get the .uf2 you need.
I used the latest version of the uf2 file and the newest library and s...
Hi Marc,
I get that too still. It's a separate issue that I think needs to be
explored. My workaround is to write a try except block for that error and
use esp.reset() and esp.connect to reconnect to internet in the except
block. That has been working for me well.
On Tue, Jun 28, 2022, 12:42 PM gadjodilo83 @.***> wrote:
I was just going to write to you. I fixed it in a different way, which I
think will work too. It is not the same fix as what I gave you. See #6498
<https://gith...
This adds a web server to CircuitPython that runs on port 80 and provides workflow related APIs. See docs/workflows.md for details.
Related to #6174
Android 12+ now supports MDNS .local in Chrome. :tada: https://www.androidpolice.com/android-mdns-local-hostname/
Yes, the RuntimeError: Error response to command is caused by something else, and we still have to track that down. At least it is recoverable via a try-except.
nesting_count appears to have reached zero, or it could have gone negative? Is it possible that interrupts were enabled without first being disabled?
This rings a bell. I think there is some mismatch here. Probably worth logging when the locks are taken and released.
It does look like we're on 4.4 with a cherry picked fix for I2C. I'll look into updating the IDF today.
@tulip sleet have you updated the IDF in your work already?
updated to what version?
newer 4.4
no, was waiting for 4.4.2. I could try 4.4-dev, because it may have an I2C fix for S3 (which did not work for me when manually applied)
is 4.4.2 released? It was not the last time I looked
ya 4.4.1 is from april
nope
lots of activity on the branch though
there is an IPC fix that may fix deep sleep on the S3
At one point I tried master, but it had many different API changes
ya, I'm not ready for 5.0
we could try 4.4-dev for sure
kk, I'll update it
since this is alpha, we can keep moving it up
yup yup
I don't see the same I2C fix in the 4.4 branch
will keep on our own patched version
should I rebase it?
sorry but i got this error
'OSError: [Errno 30] Système de fichier en lecture seule'
Does anyone knows how to change that
does it say "read-only filesystem"?
I reverted to the espressif branch. I looked it over at the time, and I decided at the time that it was fine not to include our fixes
ok, so we aren't using our branch now?
right, I brought ours up to date (and used a different branch name)
the filesystem is read-only by default for the mcu, so that it can be read-write for the computer, you can change it in boot.py: https://learn.adafruit.com/circuitpython-essentials/circuitpython-storage
i'll check the PR's
.gitmodules has us using espressif directly
but its set to the commit from our branch
I think that may be a commit from upstream.
I don't understand where that commit could come from if .gitmodules is upstream, hmm
it must be able to get it anyway
so should we keep that I2C fix?
I can make them match
the fix is from o-marshmallow, so maybe it is in 4.4-dev
he closed the issue https://github.com/espressif/esp-idf/issues/8770
release/v4.4 is the active branch I thought
this is my code:
`import usb
import usb_host
import board
import digitalio
import microcontroller
import time
import array
#TEST LED
p7 = digitalio.DigitalInOut(board.LED)
p7.direction = digitalio.Direction.OUTPUT
p7.value=True
#INIT USB_HOST WITH POSITIVE AND NEGATIVE PINS
usb_dp = microcontroller.pin.USB_OTG2_DP
usb_dm = microcontroller.pin.USB_OTG2_DN
usb_port = usb_host.Port(usb_dp, usb_dm)
#GIVE POWER TO USB DEVICE
usb_power_on = digitalio.DigitalInOut(board.USB_...
ok, I will ask o-marshmallow about where the v4.4 version of the patch is
and you can correct the .gitmodules
you don't want to keep the patch? I was thinking I'd make a new circuitpython8 idf branch
oh, no, I do want to keep the patch. Maybe .gitmodules to should back to adafruit/esp-idf
?
there is no other source of the patch now, apparently
and here is info about device:
'''
Endpoint Descriptor (Audio/MIDI 1.0):
0x09 bLength
0x05 bDescriptorType
0x82 bEndpointAddress (IN endpoint 2)
0x02 bmAttributes (Transfer: Bulk / Synch: None / Usage: Data)
0x0040 wMaxPacketSize (64 bytes)
0x01 bInterval
0x00 bRefresh
0x00 bSynchAddress
'''
@tulip sleet kk, I'll keep it
thanks, but does it works for a Pico pi ?
Hi Marc, I get that too still. It's a separate issue that I think needs to be explored. My workaround is to write a try except block for that error and use esp.reset() and esp.connect to reconnect to internet in the except block. That has been working for me well. except RuntimeError: esp.reset() esp.connect_AP(config["wifi_ssid"], config["wifi_password"])
…
On Tue, Jun 28, 2022, 12:42 PM gadjodilo83 @.***> wrote: I was just going to write to you. I fixed it in a different ...
@timber mango The instructions @stuck elbow provided should work fine for the Pi Pico, to change the read-only mode you'll need to access the Pi Pico from your computer using the mounted CIRCUITPY drive, but once you have the Pi Pico connected to your computer there's probably no need to run the python commands to copy the file, just copy the file you want from the SD card to the CIRCUITPY drive on your computer.
@tulip sleet FYI, I just submitted an issue (https://github.com/adafruit/Adafruit_CircuitPython_asyncio/issues/23) for an error I'm getting on importing asyncio on a MatrixPortal M4 with 7.3.1. I'm intending to dive deeper and see if I can narrow down what's going on here, but I'm calling it out in case it's a more widespread problem than just that hardware, since I may not have time to work on it before the end of the week.
and this version of the idf doesn't start up....
I'm getting an exception trying to import asyncio on my device. I've stripped this down to a minimal test case, which is as follows:
Device: Adafruit Matrix Portal M4, running CircuitPython 7.3.1
I wiped the lib directory clean on my device and then installed a bare minimum subset of libraries with the command:
circup install adafruit_matrixportal asyncio
I loaded a minimal code.py file onto the device as follows:
import asyncio
print("Hello from asy...
its unlikely to work well because the buffer needs to be constantly filled - best to use native mp3 decode!
@tulip sleet how is esp32 going?
I have it starting up, and it's now failing when doing something in the heap, I think. Your backtrace tool is extremely helpful. It was boot-looping because there were more pins that should not have been reset than the obvious SPI flash and PSRAM ones. I now have the full list: I just printed out each pin before resetting it, and found the ones that caused crashes.
I was out until mid afternoon due to a long appt
nice! glad it was useful
I'm in the IDF weeds because the latest 4.4 doesn't start up
oy!
I think they made a change that assumes the main task is on the PRO CPU
Environment Development Kit: ESP32S3 USB OTG Module or chip used: ESP32S3 N8 IDF version (run git describe --tags to find it): v4.4.1-327-ged439cc7f3 Build System: make / idf.py Compiler version (r...
good sleuthing!
yup, works after a revert
This uses a new circuitpython8 branch on our IDF fork. It has the I2C fix and a revert that fixes an issue with running the main task on the APP CPU: https://github.com/espressif/esp-idf/issues/9247
read isn't implemented yet. :-) I mentioned it here: https://github.com/adafruit/circuitpython/pull/6125
I should have had it raise an error. Sorry!
I thought I'd get back to it quickly but didn't. I switched off of it while waiting for a TinyUSB API to call.
Would you like to try and add it? It shouldn't be too hard now that TinyUSB has an API for it. (I haven't looked at specifics though.)
@tannewt noticed there's an action to download the embedded arm compiler. it might even be faster, as it uses the actions cache to store the compiler.
Thanks for answer, Scott!
Sure, I want to try to add it. But can you give me brief insight into right direction, please?
Do I need build new circuitpython for my teensy, or I can just add TinyUSB library to my project and write some glue?
@askpatrickw those are good notes, thanks for including links to the supporting documentation as well. The way Espressif handles this is convoluted, to say the least.
I haven't done the research or testing to verify this, but is it possible the CONFIG_ESP32_PHY_MAX_WIFI_TX_POWER variable doesn't come into play until you try to set a value over the limit? Put another way, is that variable only for setting the maximum wi-fi transmit power?
It looks like the MP workaround sets the actu...
I ran the following steps from Linux:
- git clone https://github.com/adafruit/circuitpython.git
- git fetch origin pull/6531/head:TESTRW
- git checkout TESTRW
- make fetch-submodules
And then built as I usually do. During the fetech-submodules phase it looked to me like the IDF updated to 4.4.1 but I don't know how to verify if I'm on the correct IDF version and unfortunatly, I'm still getting a crash on the wifi connect when connected via USB.
My libraries have version tags and I build successfully locally.
The git commit(28eb0526cc7c80c65f711c8b43ee83e191b5984d) that the build logging shows is from adafruit/Adafruit_CircuitPython_IS31FL3731. I found the latest commit for adafruit/Adafruit_CircuitPython_IS31FL3731 has no version tag, was this the reason why I failed?
If yes, would you m...
@kylefmohr Would the correct approach be to add a call to esp_wifi_set_max_tx_power in wifi.radio.connect?
I'm very much not sure I'm linking to wifi.radio.connect() there, but I see other calls to esp_wifi in that area.
If wifi.radio.connect() is common across all ports, I'm not sure of the ri...
update- much more happiness this time, although not victory just yet.
Here's what I figured out about my problem with the pullup resistors: If I
start up our customized peripheral first (which seems sensible), then the
host will report missing pullup resistors no matter whether they're there
or not. However, if I start up the host first (and it has some sort of
retry loop that keeps looking for a peripheral), then it correctly detects
whether pullups are there or not. So presumably th...
@wraith crow , I managed to authorize writing from the pi pico but now I'm blocked. How do I reset the write permission from the pipico from my computer. Thanks a lot.
Hello, I' m making a drummachine with a picopi and a neotrellis. The drummachine works with samples (.wave files). As the memory on the pico is very short I decided to plug an SDcard to store sample, but when I play a sample I often got OSError: [Errno 5] Erreur d'entrée/sortie.
Do you think, playing sample from an SD card is a good idea (stable way) ?
Do you think the problem is with my SD card reader ?
I have made similar PR to tinyuf2 and nrf52 bootloader repo
- https://github.com/adafruit/tinyuf2/pull/228
- https://github.com/adafruit/Adafruit_nRF52_Bootloader/pull/268
It works like a charm, and tidy up yml file as well :)
note that questions about using Circuitpython are better in #help-with-circuitpython , this channel is for the development of Circuitpython
You're right
sorry about that
I haven't done the research or testing to verify this, but is it possible the
CONFIG_ESP32_PHY_MAX_WIFI_TX_POWERvariable doesn't come into play until you try to set a value over the limit? Put another way, is that variable only for setting the maximum wi-fi transmit power?
According to todbot it sets the default as well. See [discord discussion](#help-with-circuitpython message)
There are multiple instances of a cache conflict going on in the first set of builds:
Run carlosperate/arm-none-eabi-gcc-action@v1
with:
release: 10-2020-q4
env:
pythonLocation: /opt/hostedtoolcache/Python/3.10.5/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.10.5/x64/lib
Cache miss, downloading GCC 10-2020-q4 from https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 ; MD5 8312c4c91799885f222...
Deferring a review until this possible fix for the revert is tested: https://github.com/espressif/esp-idf/issues/9247#issuecomment-1169699177
There are multiple instances of a cache conflict going on in the first set of builds:
Run carlosperate/arm-none-eabi-gcc-action@v1 with: release: 10-2020-q4 env: pythonLocation: /opt/hostedtoolcache/Python/3.10.5/x64 LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.10.5/x64/lib Cache miss, downloading GCC 10-2020-q4 from https://developer.arm.com/-/media/Files/downloads/gnu-rm/10-2020q4/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 ; M...
@idle owl @lone axle looking to get involved in the community as a give-back. See a bunch of first issues that are just annotation fixes. Git i've worked though, but stalled at the walk-through at https://github.com/adafruit/Adafruit_CircuitPython_AdafruitIO/issues/79 (sorry). Any guidance or ability to get me started?
I published a video that walks through the process of adding the typing annotations. https://www.youtube.com/watch?v=ByOiVKnJIMI if you haven't seen that yet it's a good spot to start to get a feel for how to look through and figure out the types as well as add them into the code.
thanks!
AdafruitIO is one of the larger libraries. If you're interested there are probably some smaller ones that you could attempt first. Although if you have experience with the library that can help in figuring out the types so if you're already familiar with AdafruitIO library and want to jump in on it that is cool as well.
@edgy flax I agree with this entirely. I hosted development sprints at PyCon 2022, and everyone who picked up a type annotation issue managed to pick a super difficult one. They persevered, but it was a lot of work for a first submission. I would consider starting with a simpler one to get your feet wet, and once you're comfortable with the process, return to a more difficult library. 🙂
also thanks for that heads up. I noticed that the line numbers given in the incidents also don't really line up anymore (but only one or two off, so no biggie). Perhaps i'll look for a smaller one to get going on.....
If something changed in the library, then yes, things won't match up. We made those issues last year sometime, so things have almost certainly changed in many of the libraries.
Is it worth removing the label from some of the more difficult ones? Looking at you, adafruit_ble.
Absolutely. If you'd like to go through them, that would be amazing.
The ones that come to mind are Adafruit_BLE, Adafruit_IO, Adafruit_GPS (I recall it being wonky). Should I just do all the BLE libraries?
I recently contributed with a couple of type annotation issues, and it was fun. But yeah, there are some difficult ones. It makes sense to first scan the code a bit to see how it looks like, before jumping in 🙂
Not all of them are as bad as the main one, I don't think.... but who knows. Make a judgement call 🙂
I don't know much about ESP-IDF truthfully, but I am used to grepping around such codebases.
Two things that I would try:
- In the ports/espressif/esp-idf-config/sdkconfig.defaults there are two defines that seem relevant:
CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20
CONFIG_ESP_PHY_MAX_TX_POWER=20
Maybe try setting both in the board sdkconfig?
- Because these are
#defines, I would be sure tomake cleanbefore each bu...
Thank you @todbot! I'll try that later tonight or tomorrow night.
ooof I'm looking in: esp-idf/componenents/esp_phy/esp32s2/include/phy_init_data.h and similar files grepping for "TX_POWER" and am really wishing CircuitPython had access to esp_wifi_set_max_tx_power()
@lone axle Does this code only check main, or what's the deal there? I pushed a branch, and it doesn't seem to be picking up the branch run.
To my fork, and I updated the URL to be my account.
This is what I came up with for testing purposes. Push/PR within my own fork.
Well, what Jeff suggested anyway.
The code bases what it checks on the URL variable near the top.
I did add some comments last night and pushed those to my branch as well. https://github.com/FoamyGuy/Github_Actions_Status_Light/blob/main/github_actions_status_watcher.py
Thank you!
Hmm, I'm not sure about the branches honestly. I did all of my testing on the main circuitpython repo.
Ok
one moment. We can pull the same data in the browser and get an idea of what the script will see
I looked at that JSON file from the API link, and it doesn't show my branch push.
Current ID is 2584666641
I didn't see it in the file.
Or is it better to only show main? That would handle PRs which is I guess what matters.....
But maybe not for everyone?
Bleh.
Oh, well one thing I think is it's looking specifically for the build.yml workflow. It doesn't seem like your push triggered that workflow to run
Right... where even is that? I may have deleted it when purging workflows for testing. Which would explain why it didn't run.
NM, I did.
I'll add that back and try again.
the specific workflow is specified toward the end of the URL as well. If you wanted to use it for pre-commit.yml instead of build should be able to use this URL:
https://api.github.com/repos/kattni/circuitpython/actions/workflows/pre-commit.yml/runs
Oh fair enough.
Maybe that's enough for testing. Though I wanted to show the GitHub end of things failing next to the light telling you it failed, so..... hmm.
I'm already creating an artificial environment here. Not sure how artificial I want to take it.
Hmm. Changed it to pre-commit.yml and it shows this in serial console: Fetching workflow run status. completed - failure adding 2584666641 to shown IDs
But the light does nothing.
Ok, now it's finding build.yml (I added it back)
The light is misbehaving though. We can discuss it when we meet up in 25 minutes.
You could have the test job do it too since it runs before the builds.
ooof I'm looking in: esp-idf/componenents/esp_phy/esp32s2/include/phy_init_data.h and similar files grepping for "TX_POWER" and am really wishing CircuitPython had access to
esp_wifi_set_max_tx_power()
Feel free to add it! It makes sense that Radio would have a tx_power attribute.
Sure, I want to try to add it. But can you give me brief insight into right direction, please?
Yup! Happy to. Join us on discord if you haven't yet too. There is a #circuitpython-dev channel where we can help you get over any bumps. https://adafru.it/discord
Do I need build new circuitpython for my teensy, or I can just add TinyUSB library to my project and write some glue?
Yes, you'll need to build your own CircuitPython. I thin...
Can we force traceback on when async is enabled? We don't want this to happen again.
I usually change into ports/espressif/esp-idf and do git log to see the current commit. I'm getting the crash too. Will be looking into it shortly.
and made the guess that "sar" (slave address register) is what we want.
Just wanted to make sure you know that that struct is allowing direct access to the peripheral registers. The data sheet is a very good resource about what they all do. I tend to use registers directly because the datasheets are generally the best documentation.
Ah! You'll want to move to the is31 directory and check out the last release and then move back to the CP root and commit it. You can also run make update-frozen-libraries from the root. It may update others though too.
@lone axle Ok, ready when you are. Good to vid?
same, yep.
@dhalbert I've switched over to the suggested fix.
I'm tied up for a few hours how, but I have been trying various tweaks without any success but as one last thing I decided to do a DEBUG=1 build to see if the backtrace is much different and in the debug build the connect command is not crashing.
I've got most of the build disabled so that the DEBUG build would fit. perhaps the current conflict is coming from one of the modules I've disabled. Unless you come up with another breakthrough, this evening maybe I'll try adding back in a module ...
windows. Pre-commit run in a command line or git-bash? Pip says it's installed but it's not running from a command line......'pre-commit' is not recognized as an internal or external command,
operable program or batch file.
Hi! I just did a fresh checkout of the circuitpython repo, set everything up and did my standard QTPyM0 build to test and got this:
% cd ports/atmel-samd && make BOARD=qtpy_m0
Use make V=1, make V=2 or set BUILD_VERBOSE similarly in your environment to increase build verbosity.
during GIMPLE pass: evrp
../../py/gc.c: In function 'gc_mark_subtree':
../../py/gc.c:1178:1: internal compiler error: Illegal instruction: 4
1178 | }
| ^
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://bugs.linaro.org/> for instructions.
make: *** [../../py/mkrules.mk:62: build-qtpy_m0/py/gc.o] Error 1
Am I forgetting something?
I figured it out! It's a multicore issue. With the auto-wifi stuff I added a call to supervisor_workflow_request_background() in event_handler in common-hal/wifi/__init__.c. This handler runs on the PRO CPU and CP is on the APP CPU. So, we need to do the schedule on the APP CPU. (We could do proper locking but that's more work.) Fix coming shortly. Thanks for helping investigate this!
yeah this is a fresh checkout in new directory.
% arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Toolchain for the Arm Architecture 11.2-2022.02 (arm-11.14)) 11.2.1 20220111
looking on how to backrev in homebrew
I think the CI is on GCC 10 still
I'm on 12 though and I think its ok
are you on an arm mac?
how 12? isn't the current 11? https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/downloads
I use the package from Arch Linux
yes Arm Mac but never had a problem before on this box
Checking
yeah weird, arm-none-eabi-gcc 9.2.1 works
(that's the one packaged with Adafruit Arduino)
Thanks ARM for vending out a bad compiler. I don't even see a way of getting at alternate versions from their site
they relatively recently switched where to download it from
I'm using a brew cask.
me too
you should be able to do arm-none-eabi-gcc --version
I did that. Oh I typoed it. 🙄
(I may have typoed it too)
@devout jolt arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10-2020-q4-major) 10.2.1 20201103 (release)
the cask I'm using is referencing 11.2 (https://github.com/Homebrew/homebrew-cask/blob/HEAD/Casks/gcc-arm-embedded.rb) which cask are you using?
You could have the test job do it too since it runs before the builds.
As long as it's then part of the cache, that sounds great. I think we have like 60 jobs trying to fetch it at the same time, and all are refetching because of the collision.
gcc-arm-embedded. Maybe I pinned it somehow? Or have managed to avoid Homebrew updating it?
interesting. okay thanks. problem solved for now, in that it's not my problem nor CirPy's problem. 🙂 For now I'll just lamprey on my Arduino install for its Arm compiler
The wifi event_handler runs on the other core so we need to be
careful when calling into CP APIs.
Fixes #6503
Sounds good 🙂
updated the path and at least pylint and black run...
@lone axle Remembered one of the things I wanted to ask. Does the .env.sh file need to be in the same directory as the .py file?
I don't think it has to be in the same directory, but you do have to source it to get it activated so that the script will be able to access its variable
so if it were in a different directory you'd have to cd after activating to wherever the script is
Ohhhh
That makes sense. So it's a convenience thing.
yep
Got it. Thank you!
This makes us enter safe mode when sleep on the S3 fails. The
task watchdog is used for the user watchdog.
@lone axle Dumb question, mostly verifying something I'm second guessing now... Numbers beginning with 0x are hex right?
correct.
Thanks!
With f-strings.... I know they take variables, but can you also add text inside the "" around the variables, and have it print the text with the parsed variables as well?
There are only variables in this f-string, so I'm not sure.
@lone axle For this comment: ```py
if program is running from CLI
if name == 'main':```
Where else would the code be running from?
an import
it's way to run code when you call python the_script.py but not when you import it
typically you write a library and have that code be run to test it by calling the main functions with the default parameters
Hmm
but it does not interfere with using the library from another file
Fair enough
or the other way round, you write a command line tool where everything is in functions, and the __name__ clause starts the whole thing, while reserving the possibility to call each part independently from another script, for unit tests for example
If I understand your question correctly:
my_name = "Tekktrik"
sentence = f"Hello! My name is {my_name}!"
print(sentence)
# Prints:
# Hello! My name is Tekktrik!
@idle owl 
Yes, that's it! Thank you!
If you have any code in a .py (not in a class), it will get run on import. In normal Python you prevent this with that if-clause
But only if you're importing the specific file right?
I guess, further, what difference does it make? Why do you want to prevent it from happening?
Yeah. I've seen Python libraries that are also command-line tools. If you do "./foo.py", it runs and is a program, but you can also "import foo" and use foo's classes to do stuff
mostly making a library that can be quickly run as a command line tool, or for testing purposes
So...... is it not needed here?
where is here ?
It's this but with a bunch of tweaks I made: https://github.com/FoamyGuy/Github_Actions_Status_Light/blob/main/github_actions_status_watcher.py
This is desktop Python
It runs directly from my computer.
I'm concerned about trying to explain it in the guide. Because I'm struggling to understand that line.
Foamyguy is going to give this page a look after I add what I can, so in theory he can fix my terrible explanation of it, but still.
Yes, I think it's not needed. But may be considered "good Python"? I dunno 🙂 but if you wrapped up all your code into a class and the only part of the file that actually got run was something like status_watcher = StatusWatcher(); status_watcher.run(). Then you could put that line being the if-main clause
Hmm alright
generally a library only defines classes and functions instead of "running code"
the __name__ == "__main__" bit allows you to store some code to run in what would normally be a library
agreed. but I've seen a lot of Perl/Python/Java code that embeds the __main__ stuff to let you play without needing to create a second file
I was heading in the right direction for a bit there, but I'm getting lost again now.
As an example, here's the http.server module in CPython. You can use it with import http.server. You can also say python -m http.server 9000 https://github.com/python/cpython/blob/3.10/Lib/http/server.py#L1261
https://docs.python.org/3/library/http.server.html
So in this case, this code, as-is, would not work with import but only python ...
the code you linked? Yes, it's just a program, not a library-that-can-also-be-a-program. (surely there's a name for that)
Wait, so that means I should leave it in there? Because it's not the second thing?
Or do I not care in this case?
That's what I'm trying to understand at this point, I think.
in this case you do not care, because (I think) no one is going to be doing import github_actions_status_watcher
Ok, yeah, that's what I figured too.
This looks OK. This is stuff is very tricky so we'll need to watch for similar issues.
@slender iron is there a .env flag that says "don't connect on startup", so that we can use .env instead of secrets.py, but not have wifi start up immediately? I wonder if maybe that should be the default...
I'm just thinking that for many circumstances web workflow is not needed, but .env is very convenient
new merge conflict just appeared
@idle owl the scripts I wrote for adabot to check the CI status (before I decided to make them purely command line operable) were designed to be imported into other scripts (so parts of it could be used to build more complex tools) as well as standalone (you could just run the run the python file via python ci_status.py and it would check the CI actions. But I would want to be doing a check on all the libraries for the first case, so I hid the actual "doing" when being run via python ci_status.py behind if __name__ == "__main__": so it ONLY is run when it's NOT being imported. That way imports grab the functions, classes, etc. and move on, whereas the other way also grabs them and then runs that code where it actually does a check.
Hmm.
I sort of follow? 😄
It's alright. I know what I need to know for this guide. Which is good enough for today. 🙂
Food time! BBIAB.
As long as we don't care about adding an unnecessary ~6s to the 'test job' whether it's needed or not ...
I think that what @hathach is trying to say is, while the message looks troubling due to its unfamiliarity it doesn't indicate a problem; and once the PR has been run on main once and the cache is populated, the message shouldn't occur anymore anyway. Until we cleared the cache or selected a different gcc version that would use a different cache key.
That said, googling about the message led me to concerning problems that DO show this message and where the suggested remedy is to change the cache key: https://github.com/actions/cache/issues/485#issuecomment-744145040= -- problem being, while we can and have done that with esp-idf in the past, there's no provision that I saw to make this action use a different key. hm.
I'm not thinking the message indicates an error, but it's an inefficiency. The first 60 or so jobs are not benefiting from the cache, it would appear.
This is a specialized action, which downloads specific files from specific places. Is there a more generalized action or mechanism we could use to download particular files (in the test job or some other precursor job), that would allow us to clear the cache or change the key if necesary? I haven't yet tried to understand what the espressif ...
Nice work Scott!! I just downloaded and built after Dan's merges and it seems to be working.
@lone axle I won't be able to finish this walkthrough in time for tonight. I verified that you looking at it tomorrow evening worked for Limor, she said it's fine. So I'll get it finished up tomorrow and you can take a look at it then.
Sounds good
@ladyada said I should open a ticket here. I'd like to work on TLS support for Ethernet (e.g. Wiznet 5500). I have a great deal of general software development experience, but not a ton of Python, and very little knowledge of the micropython/CircuitPython networking stack internals.
If I could get some guidance from someone with more knowledge of the network stack, I could make significant progress.
Ideally, we should be able to make things like TSL/SSL support common to both WiFi and E...
.. but only the first time it runs on the main branch. On the next run, all the builds will see the cache and use it.
.. but only the first time it runs on the main branch. On the next run, all the builds will see the cache and use it.
oooh! I thought it was only per PR run.
That said, googling about the message led me to concerning problems that DO show this message and where the suggested remedy is to change the cache key: actions/cache#485 (comment) -- problem being, while we can and have done that with esp-idf in the past, there's no provision that I saw to make this action use a different key. hm.
I would approve this but still a bit worried about getting stuck due to this.
CircuitPython version
Adafruit CircuitPython 8.0.0-alpha.0-27-g5c46f2a5a-dirty on 2022-06-12; Adafruit Feather RP2040 with rp2040
Code/REPL
import board
import displayio
displayio.release_displays()
tft_cs = board.D9
tft_dc = board.D10
display_bus = displayio.FourWire(board.SPI(), command=tft_dc, chip_select=tft_cs)
display = displayio.Display(display_bus,"",width=320,height=240)
print(dir(display))
Behavior
Traceback (most rece...
@tannewt thank you! it looks good now!
This is another example of #4171 causing problems. I'll close this as a dupe, but thank you.
maybe the author of the action can explain this better @carlosperate , I hope you have an minute or two to clarify the cache warnings. If not sorry for the mention
Pico W
none of the deep sleep functions I've ever used actually work, always had to wait for event manually and only transmit when the timer runs out.
for when it does, you need alarma. 🦙 or sleepio, either one
Macropad: 0.095A with cyan lights on, 0.040A with no lights on, 0.040A in a crashed VM state under deep sleep (in safe mode)
@warm stump the best deep sleep support is on esp
Rp2040 isn’t really designed for low power
Thanks, Scott!
I'm done with successful build of custom CircuitPython and now I'm trying to understand architecture of api calls for required changes, and this looks like few sleepless nights))
@slender iron I'm looking at https://github.com/adafruit/circuitpython/pull/6486 and https://github.com/adafruit/circuitpython/issues/6484 in relation to https://github.com/adafruit/circuitpython/issues/6523 -- trying to understand what I should do about an rgbmatrix display before entering a true deep sleep, vs what should happen for any other kind of display.
Is there any kind of display for which doing a "release displays" prior to truly entering deep sleep is a mistaken idea?
Adafruit Feather from before time began is also pretty good, 0.006A whereas ESP32 was 0.025A nominal
^^ the one that now runs CircuitPython7 with a CIRCUITPY Drive on USB
This is great!
I tried giving an incorrect password again. When connected to the REPL, I see a long delay before the REPL produces output, and even after producing output, I cannot type at the REPL for 10-15 seconds after "Press any key" shows up.
If I have two boards web-capable boards, at least on Linux, and unplug one, and plug in the other, the avahi caching will resolve circuitpython.local to the old board's IP address for some time (minutes, it appears). I don't know how well it...
This string is duplicated several places.
Could _send_str be turned into some kind of vararg thing to reduce the number of calls?
How about giving an explicit example of a .env file with sample values, including CIRCUITPY_WIFI_SSID, CIRCUITPY_WIFI_PASSWORD, CIRCUITPY_WEB_API_PASSWORD?
eink should preserve the image
I wouldn't expect a matrix to continue during deep sleep
CircuitPython version
Adafruit CircuitPython 7.3.1 on 2022-06-22; Teensy 4.1 with IMXRT1062DVJ6A
Board ID:teensy41
Code/REPL
import time
import board
import busio
import adafruit_midi
from adafruit_midi.control_change import ControlChange
from adafruit_midi.note_off import NoteOff
from adafruit_midi.note_on import NoteOn
from adafruit_midi.pitch_bend import PitchBend
uart = busio.UART(board.TX2, board.RX2, baudrate=31250, timeout=0.001) # init...
thanks @tender marsh! ☝️
i did it! thanks 😄
I'm thinking about a CIRCUITPY_WEB_API_ENABLE in .env. By default it would be off, so that you have set it to enable the web workflow to have it be on. This allows .env to store SSID and password as an eventual replacement for secrets.py. I can open this up as a separate issue later.
It also brings up the question of how to represent boolean values in .env.
@tulip sleet I'm mixed about that. user code could have a different variable for SSID and password
everything with the CIRCUITPY_ prefix should be for internal use
well, there is likely to be only one network of interest visible? I agree, there could be another pair of SSID/password for user code.
But it would still be nice to enable/disable web workflow without having to delete the values or comment them out.
CIRCUITPY_WEB_API_SSID vs plain SSID ?
whatever they want to call it
we should only use CIRCUITPY_ for internal stuff though
it'd be interesting to sort all of the library repos by stars
and to track the sum
one type I did not see in the video that seems pretty common, pin. Is there an object type peculiar to that (microcontroller.Pin, perhaps?) or is it just 'int'? As in this
def init(
self,
pin,
series_resistor,
It may depend on the specific way it's used but I think generally microcontroller.Pin is likely to be the correct type in most places.
This is likely a UART buffering / buffer size issue.
If you find a usage of the function and it passes in something like board.D2 or similar those are microcontroller.Pin type objects I believe.
I think the PIO StateMachine code is letting me get away with WAIT-ing on a pin I haven't declared I'm using. It's been very handy, but still wrong.
https://github.com/adafruit/circuitpython/blob/c3a149c14a1fe2e98280b42273d3d0717501deab/ports/raspberrypi/common-hal/rp2pio/StateMachine.c#L439
I think that should be a >= because wait_index is 0 based but in_pin_count is a count so 0 isn't a valid input. I'm able to wait 1 pin 1 when in_pin_count=1, effectively reading the pin after the o...
@lone axle Ok, so here's the situation. I made some changes to the code, and I need to get it into the Learn repo so I can get it embedded in the guide. This is obviously happening before you have a chance to look at my changes and the walkthrough. So! Here's my thought. I'll submit it as-is, the walkthrough applies to my version of the code. Then, if you want to make code changes, you'll put in a PR to the Learn repo, and update the walkthrough page to match when you get to it this evening. And if Anne doesn't beat me to it, I'll get it merged tomorrow so the guide is matchy. Does that work?
okay, yep. Sounds good
Thank you!
Adding SSL support would be great! You are using the Python Wiznet driver now right?
The MicroPython and CircuitPython network approaches are a bit different now. The CP APIs were designed to support Python-only drivers but MP took a more CPython approach where the OS manages it.
One place to start is the ssl module from Python. It is used to wrap sockets. We have a subset of the API here: https://github.com/adafruit/circuitpython/tree/main/shared-bindings/ssl I think we can continue ...
This looks OK. This is stuff is very tricky so we'll need to watch for similar issues.
Yup! Hopefully the asserts will help raise a red flag next time this happens. I should have added them last time. :-)
Yup! Looks good! Thanks for fixing it quickly!
Oof. @lone axle The URL line is getting flagged too long by Pylint. Should I split the string, make it less readable, or disable Pylint for that line? Not sure either of those options is great.
Personally I would lean toward a pylint ignore for the length of it. That way the URL can be copy/pasted from the browser which is very helpful for verifying the raw data that the script is seeing.
If it does get split up it could be like github_username as one var, repo_name as one var, and workflow_name as one var. Then concatenate them all to make the full URL. Which would still be clear code I think, but less convenient to copy/paste.
Using with ti open a file in Python, this documentation seems to indicate it closes automatically? Does that mean I don't need to call f.close()?
I like the idea of an intact URL.
That is correct as far as I understand. When you use with to open the file. It'll get automatically closed whenever the block inside the with ends.
This helps with Python-compatibility (see issue #4171) but doesn't completely resolve it.
Now, dir() still computes any properties of the underlying object, HOWEVER, if the property raises an exception this exception is captured.
This ability to capture exceptions always existed in mp_load_method_protected, we just need to turn it on via the catch_all_exc boolean parameter.
This is something we discovered in testing the PR for the Wemos C3 Mini board #6256. You need to be able to tune the WIFI TX Power to connect. (This is true for Arduino and MP as well).
Requested Change:
- Add tx_power() method to wifi.radio.
- tx_power method should require a single parameter of the desired tx_p...
I opened a Feature request for wifi.radio.tx_power() #6540
I'm sure this needs refinement... let me know if the ask needs more clarity. I'll update the description as needed.
I tried giving an incorrect password again. When connected to the REPL, I see a long delay before the REPL produces output, and even after producing output, I cannot type at the REPL for 10-15 seconds after "Press any key" shows up.
This should be the same as before. I didn't change anything with the auto-connect.
If I have two boards web-capable boards, at least on Linux, and unplug one, and plug in the other, the avahi caching will resolve
circuitpython.localto the old board's ...
Looks good to me. Good catch that the raise was being called causing the exception.
I'm thinking about a
CIRCUITPY_WEB_API_ENABLEin.env. By default it would be off, so that you have set it to enable the web workflow to have it be on. This allows.envto store SSID and password as an eventual replacement forsecrets.py. I can open this up as a separate issue later.
I'm open to doing this though I'd prefer it default on when using the auto-wifi. Folks can use other env variables if they want to control it themselves (maybe HOME_WIFI and HOME_WIFI_PASSWORD or...
I actually started to work on this myself, and the get, set in Radio.c made sense. I also thought tx_power would need to go in ports/espressif/common-hal/wifi/Radio.h, is that not the case?
I had no idea shared-bindings would need updated, so I'm glad you took this on, ty!
Ok, @dhalbert please take another look when you have time.
Thanks for the fixes. Looking forward to feedback.
I was also confused by no function decls in ports/espressif/common-hal/wifi/Radio.h. I think the rationale is that shared-bindings contains the C API headers and the individual ports' headers contain only platform-specific stuff. So, the Radio.h in shared-bindings is the header for every implementation of wifi.radio.
And apologies for stepping on your work on this! And thanks for the extra set of eyes. I'm always nervous about touching this repo publicly. :)
You didn't step on me... I don't know C so it would have been a steep learning curve.
I'll test this later tonight or tomorrow during the Deep Dive window.
Thank you again!
ESP32-S original with the factory firmware update tool, reliable serial from the 16u2 on an Uno (would probably also work with a Metro or Mini) without having to remove the AVR
this is where SoftwareSerial will fail and the discontinued PL2303 products also have failed. Tried uploading the ESP32-S2 CircuitPython to it, it froze while reading the stub for a while
probably knowing it's an incompatible board, but it looks like there is still some life in it. Would require the USB on e.g. SAMD21 or 51 to bring it up to par with the latest boards
the one in the image is DM, the one I have is Espressif
Haven't had much time this week, but was able to read some of the datasheet today https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf I2C details start on page 439. there is also some sample code on page 359.
is there a circuitpython uf2 for the Pico W?
no
ahh would have been too good ^^ I guess we'll have to wait a bit
possibly quite a while, especially if you want the wifi support too
oh yeh, would love to do some HID stuff over wifi with adafruit_hid lib
ah no i mean HID via USB but control it via wifi
the ESP32-S2 or S3 can do that already
I think the chip on this is an ESP32 (no S)
@idle owl I wrote the script for parsing all the requirements for the Bundle libraries and ran it. I've got a list of requirements for each library ready to go for the next step of creating pyproject.toml files! Also resolved any disagreements between setup.py and requirements.txt while doing so.
It's worth talking about whether we want to use optional dependencies for some libraries with extra functionality not immediately enabled, like using pillow for specific image related functionality, or for when example files use something but the actually library does not (one example I saw of this was pyserial for an example). There's merit to splitting things up into what's needed at the minimum, but I also see hiccups when people are confused why things like examples won't run.
In that case it may just be worth defining everything as a regular dependency
Question: Are all CircuitPython boards supposed to show up as USB Flash Drives? I'm reading up on the ESP32-C3 board, excited about RISCV, very cool. Not sure what it means that it doesn't show up as a disk drive though. I thought all Circuitpython ports/boards were supposed to show up as drives as a term of their inclusion into the project. How did ESP32-C3 be made an exception for this rule? I don't have one on hand to play with, so I haven't confirmed that it doesn't show up as a disk drive. Just curious about the project development decisions. Not so much a technical question as much as a project question.
As of CP 7 we also allow a BLE workflow. We thought C3 would have that but ran into a snag. In 8 we're introducing a (just merged) web workflow too.
Just added this page to the docs: https://docs.circuitpython.org/en/latest/docs/workflows.html
it seems to revert to 2016 so that seems about right. boards like this with USB to UART adapters might not show up as USB Drives, it ideally needs a dedicated USB device peripheral like the RP2040 has. would be ideal for a pico with no Infineon WiFi on-board
Right. Dan is working on ESP32 support now actually. Since we're adding the web workflow
//| """Wifi transmission power, in dBm."""
Thanks! One doc clarification requested.
very very cool!
yuuuup. I'm excited about it
I'll have to read up more on the web workflows. Is that a way to update scripts without touching the boards? That could be very useful.
yup! it is a REST API
you can just do a PUT to circuitpython.local/fs/code.py to update
Link for the lazy on where to read up on that? Also is pico W support anticipated soon?
this link has the API docs: https://docs.circuitpython.org/en/latest/docs/workflows.html
soon no. eventually yes
gotta get it all going on ESP first
(and I'm out for 12 more weeks of paternity leave in 6 weeks or so)
jealous. I just had my first. I went back after a week. Zero paternity leave at my company. I have no vacation left. Enjoy it and congrats!
oh no! thats a bummer. how old are they now? mine is just over 3 months
(the last 6 of mine are unpaid)
gz to the Human Pico 😄
She's 10 weeks old. I've worked for 8 of them 😦
So, I'm curious, is esp32-c3 web workflow functional right now?
I don't think I got it to work on a QT PY C3 with a previous commit, but with the REPL issues on the QT PY it's already hard to even create the .env file...
does wifi workflow do repl over wifi yet (once configured)? or is repl still over serial?
I realized we probably want to update this text now that there's a third workflow, so I wanted to get some possible verbiage out there. Please help me workshop it and then I can update it with an agreed on version of the text.
should we have a quick 7.3.2 for the matrixportal traceback module ?
The regular Pi Pico build should work, but no wifi support.
I was thinking about that, seeing if anything else showed up.
except board.LED is not valid on the pico W
(the LED goes through the wifi module)
Scott is working on websocket support for serial
nice!
@slender iron would an ESP32SPI-style CircuitPython library be possible with the Pico W?
@tulip sleet do you know if there are any HTTPServer guides in work? (for the CP lib)
no, partly because I'm not satisfied with the library
oh. it worked for me 🙂
was curious about it, so tried this last nite
import wifi
import socketpool
from adafruit_httpserver import HTTPServer, HTTPResponse
print("Starting access point.")
wifi.radio.start_ap("QTPY_ESP32S2")
print(f"Listening on http://{wifi.radio.ipv4_address_ap}:80")
pool = socketpool.SocketPool(wifi.radio)
server = HTTPServer(pool)
@server.route("/")
def base(request):
print("GET base")
return HTTPResponse(filename="/index.html")
@server.route("/button1")
def button1(request):
print("Button 1")
return HTTPResponse()
@server.route("/button2")
def button2(request):
print("Button 2")
return HTTPResponse()
@server.route("/button3")
def button3(request):
print("Button 3")
return HTTPResponse()
@server.route("/button4")
def button4(request):
print("Button 4")
return HTTPResponse()
server.serve_forever(str(wifi.radio.ipv4_address_ap))
serve up some basic buttons and can connect and control via a smartphone
see the issues for some quirks. It definitely works! I was just thinking there could be more features to add, possibly with API changes. If you are interested in doing a tutorial or project guide, I won't object 🙂
it can wait. was just something i was toying with.
but seems like it could make for cool guide at some point.
very generic framework that could be used for anything
<html>
<head>
<script type="text/javascript">
function postIt(route) {
var xmlreq = new XMLHttpRequest();
xmlreq.open("GET", "http://" + location.host + "/" + route)
xmlreq.send();
}
</script>
</head>
<body>
<center>
<button onclick=postIt("button1")>BUTTON1</button><br/>
<button onclick=postIt("button2")>BUTTON2</button><br/>
<button onclick=postIt("button3")>BUTTON3</button><br/>
<button onclick=postIt("button4")>BUTTON4</button><br/>
</center>
</body>
</html>
there's the basic html that went with it
https://github.com/TheMindVirus/httpsserver/tree/websockets - same, I don't like websockets either
plus a little stability for deep sleep on ESP32-S for Pico H, not sure why not doing this would lead to instability on Serial
it was originally written for a CPy version of https://learn.adafruit.com/wordle-personal-esp32-s2-web-server/
i like the AJAX thing you are doing
the routing could be better, no explicit arg passing right now
still amazing how simple it was to get it working
could control LEDs, motors, whatever
I've built the latest bits for an UM FeatherS2 and have been trying to connect via the web workflow, so far I'm just getting timeout errors. I am able to ping the IP address. I've got the .env file with CIRCUITPY_WIFI_SSID, CIRCUITPY_WIFI_PASSWORD AND CIRCUITPY_WEB_API_PASSWORD installed and the board does get an IP address on it's own when it powers up. At one point during testing I did get the API password prompt when attempting to reach the /fs/ page but after entering the password it never continued and I haven't been able to get that far again.
Any chance I'm missing something basic? Is there a way I can get any debugging info out of the workflow?
@tulip sleet can come back to it later when ur happy with the library. was just a quick fun demo thing for now 🙂
the guide seems to be written for esp32-S
debug builds will output to the debug uart. does the root page work? it isn't password authed
Possible yes. Its hard to write any library for it since details are behind an NDA
the protocol is NDA?! oy
its enabled but I've been testing on S3. I haven't checked C3
yuuuuup
@slender iron No I haven't gotten the root page to come up yet, does having the usb serial connection active interfere with it? I'll go ahead and try a debug build this evening 🙂
i have reworked the REPL connection to be a "console" UART, rather than "debug" only
as part of the ESP32 port
I'd find it funny if the reason that it was behind an NDA was that it was secretly just translating all your calls to AJAX in the backend instead
I'm thinking I didn't pay enough attention to this line:
The web server will allow requests from cpy-XXXXXX.local, 127.0.0.1, the device's IP and code.circuitpython.org. (circuitpython.local requests will be redirected to cpy-XXXXXX.local.)
Does that mean I need to give a cpy-XXXXXX.local alias to the machine I'm trying to reach the microcontroller from?
cpy-XXXXXX.local is the board itself. you can make requests from any host computer. Maybe that should be rephrased
^ @slender iron
no, you shouldn't. but there might be some that interfere
ya, its weird because its AJAX requests from particular pages. (The Origin header)
Ok, I've updated my host file and tried the example curl connect:
C:\Users\Desktop\curl-7.84.0_3-win64-mingw\bin>curl -v -X OPTIONS -L --location-trusted http://circuitpython.local/
- Trying 10.0.0.187:80...
- Connected to circuitpython.local (10.0.0.187) port 80 (#0)
OPTIONS / HTTP/1.1
Host: circuitpython.local
User-Agent: curl/7.84.0
Accept: /
And then it just sits.....
I've got to run some errands but when I get back I'll try building on an S3 and then try a debug build.
Yea, I can ping the 10.0.0.187 and that's what shows on the console title bar
try curl -v http://circuitpython.local/
C:\Users\Desktop\curl-7.84.0_3-win64-mingw\bin>curl -v http://circuitpython.local/
- Trying 10.0.0.187:80...
- Connected to circuitpython.local (10.0.0.187) port 80 (#0)
GET / HTTP/1.1
Host: circuitpython.local
User-Agent: curl/7.84.0
Accept: /
hrm
Are you using the second core for the web workflow?
no, it should be the same core as the rest of circuitpython
try resetting the board and doing the GET / again
@slender iron same result
hrm, ya. A debug build and its output would be helpful to see
does the serial connection respond still?
Okay, I'll pick it up later this afternoon
Yes, the serial USB connection stays functional throughout
so its not too fatal of an issue 🙂
Definitely add a link here as well: https://docs.circuitpython.org/en/latest/docs/workflows.html
Thanks for updating this!
Would you mind making a PR? I think you are right.
Can we force traceback on when async is enabled? We don't want this to happen again.
Good idea. I will stick a check or force in another PR.
I was also confused by no function decls in
ports/espressif/common-hal/wifi/Radio.h. I think the rationale is thatshared-bindingscontains the C API headers and the individual ports' headers contain only platform-specific stuff. So, theRadio.hinshared-bindingsis the header for every implementation ofwifi.radio.
This is exactly right. Another way to think about it is that the shared-bindings header declares all of the functions used by the shared-bindings implementation.
Backport #6543 to 7.3.x.
@dhalbert @tannewt I still have problems doing any coding on an RP2040 that plays audio because of this issue. Iteration is difficult because any time I want to save code.py to have it restart and test changes I need to carefully time pressing reset button on board, getting into REPL and hitting ctrl-c first before code starts running, then save my code and hit ctrl-d.
Hi, all!
Especially, Scott)
I want to ask - do you have source files with working implementation of usb host(imxrt) with new tinyusb lib? I'm asking because I saw that you have done with working usb keyboard...
Great!
Yeah fair enough. Monday maybe.
Neradoc aren't you the guy who supplies us with CP hid keyboard layouts? 
oh yeah I flinched when I read that in the release news post:
For C developers, today’s release of the Pico SDK includes wireless networking support. The network stack is built around lwIP, and uses libcyw43 from Damien George (of MicroPython fame) to communicate with the wireless chip. By default, libcyw43 is licensed for non-commercial use, but Pico W users, and anyone else who builds their product around RP2040 and CYW43439, benefit from a free commercial-use license.
is that a library we can include in CP on the board ?
ya, we can include it and use it for RP2040 builds
I know damien put a lot of work into it. so its his call
oh yeh saved me a lot of time 😄 many thanks ❤️
Sounds good, not sure if you want to do it on the 4th though. Happy to do it with a grilled hotdog in hand though haha 🌭
@slender iron I'm looking at adding setting up the default BLE name of a board using dotenv, what do you think ?
Question about building CP for a custom board: My design is heavily based on the Feather Sense, but has some notable changes to GPIO assignments (namely the primary LED and Reset pins).
So far I've tried to make changes to the makefile and pins.c in /ports/nrf/feather_bluefruit_sense - is that the right place?
yep, you have to look at mpconfigboard.h for the pins of the default busses (board.I2C, etc.) and other setup like the NEOPIXEL and LED pins
Cheers!
To make sure I'm changing things correctly, if I want to change the primary LED (for example) to GPIO P1.15, I would need to change these lines:
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_09) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_P1_09) },
{ MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_09) },
to
{ MP_ROM_QSTR(MP_QSTR_L), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_P1_15) },
{ MP_ROM_QSTR(MP_QSTR_RED_LED), MP_ROM_PTR(&pin_P1_15) },
Correct?
yep, you can ditch the L name, it's just for backwards compatibility on that board, and RED_LED too if you only have one (and it's not red)
you want to make the same change to MICROPY_HW_LED_STATUS in mpconfigboard.h too
Have that done 🙂
Awesome. I'll do that 🙂
I also need to define the reset pin
Fine with me!
I'm not seeing that in either mpconfigboard.h or pins.c
Maybe I'm looking for the wrong name?
the reset pin is usually hardware, it's not a thing you define in software, is it ?
I need to soft reset (I think) so I can signal a "double click" of the reset pin.
Not sure if I'm being clear...
sry
just to be clear, the reset button is the real hw reset line. THere's no soft reset pin
Awesome.
I won't worry about that 🙂
Gonna build this and report back 😉
Thanks so much @jaunty juniper and @tulip sleet
Tuesday! 🙄
Ok. I've set the pins inside the appropriate header files, but I'm not seeing the primary LED light.
Could I be missing something?
it is MICROPY_HW_LED_STATUS in mpconfigboard
That's pointing at the same pin
P1.15
#define MICROPY_HW_LED_STATUS (&pin_P1_15)
Web workflow testing
I was trying to use ampy, thonny, etc. with recent main, and discovered that they are not expecting the in-line terminal title-bar terminal escape sequences. ampy seems to recover, at least for ls, but takes a long time to give results.
I was only testing this with the ESP32 development build, so not sure about the ESP32-S2 build, etc. But I'd expect the same problems.
Similarly, Mu will need an update to make it ignore the control code that creates a title, or do something with it, because it appears on the serial console and I think it causes issues with the REPL.
The title bar should be turned off in the raw REPL, at least.
how does the welcome_html variable used here: https://github.com/adafruit/circuitpython/blob/8814ee03f1c716e7b7ee812799c83893b9e5d436/supervisor/shared/web_workflow/web_workflow.c#L990 come to exist so that it can be passed to _REPLY_STATIC() ? I found this section earlier in the code that seems related: https://github.com/adafruit/circuitpython/blob/8814ee03f1c716e7b7ee812799c83893b9e5d436/supervisor/shared/web_workflow/web_workflow.c#L827
I tried creating a new one of those though edit_html and I'm unable to get a build to complete, having errors about undefined reference to 'edit_html'
I haven't been able to find any other set up that is occuring for welcome_html and the other static files. But I feel like I must be missing some from somewhere.
I did create a line similar to those:
STATIC_FILE(directory_html);
STATIC_FILE(directory_js);
STATIC_FILE(welcome_html);
STATIC_FILE(edit_html); // <- added this one
STATIC_FILE(welcome_js);
STATIC_FILE(blinka_16x16_ico);
what is the size limit of the BLE device name ? I believe the total limit is 31 bytes for the scan response, but it contains additional stuff in it, and according to some googling the practical limit would be around 21 or something ? Or is it automatically cut anyway by the underlying BLE stack so I don't need to bother too much ?
Updated (production) picture and a small text fix.
OK, if this build works, and it should, I just tested wifi.radio.connect with the wifi.radio.tx_power, this is ready for final review.
it depends on the other stuff in the scan response
Oops, forgot to branch. I wanted to do a separate PR for the M4-Shim and RP2040-Shim, but messed up. Is this still OK to merge with one PR?
I like the idea of adding features to the HTTPServer lib and making it more robust. I don't have a lot of time to assist but could provide some help.
I was trying to look at others or even roll my own, but haven't gotten very far.
In the issues for the library I mention some other libraries that might be starting points.
Any idea why there is the HTTPServer and also the WSGI server? seem to be trying to implement similar things.
I think someone mentioned ampule too. Not sure if that is in the issues.
ampule looks quite nice
I was looking at ampule last night. Seems very similar to HTTPServer provides some better routing with args
The WSGI server didn’t serve files natively. That was my primary goal for HTPPServer
I'd like to look at the differences with the wsgi library and merge them into the HTTPServer library, if there's anything worth it but I'm not gonna be able to make time for that
HTTPServer is very new and has no legacy of use. I’m happy to completely change it or replace it with something else
and then archive it
I am not familiar with the libraries in this space, so if we can base a new library on something more known, that's fine
do you know if the WSGI standard provides for native files? it'd be nice to create something that is standards based if possible
it needs a polling version that allows running other things in the loop, or from asyncio
Python Enhancement Proposals (PEPs)
I agree and that's an easy fix. I've played with that
I think the assumption might be that wsgi is fronted by nginx or some other server that serves the static files and passes on dynamic requests to wsgi
that is the impression I get from websearching on the topic
and I don't know what should be done with https://github.com/adafruit/Adafruit_CircuitPython_WSGI
I have a partial draft of a version of adafruit_requests with some async API, but I haven't had time to work on it further recently
your contributions to this would be most welcome
splitting out parts of the current code in serve_forever would provide for a start and a poll function.
earlier today @tidal kiln (who works for Adafruit) was talking about doing AJAX calls with the current HTTPServer; maybe you saw that already: about 7.5 hours ago
I said pretty much the same thing then -- no problem changing the current API
interestingly, if I pass a string that's too long, it defaults to "nRF5x"
have a great long weekend everyone!
(non-US folks can take monday off because you all are awesome)
😛
created a pull request for the split of serve_forever https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer/pull/7
integrity should still be there for the existing method so it doesn't break any existing code using it.
eventually it'd be nice to merge the WSGI code and this code into a more robust web server, but that's something for another day. Cheers!
CircuitPython version
Adafruit CircuitPython 8.0.0-alpha.1 on 2022-06-09; Adafruit Feather RP2040 with rp2040
and Adafruit AirLift FeatherWing - ESP32 WiFi Co-Processor
Code/REPL
import socketpool
import mdns
Behavior
Module missing
Description
No response
Additional information
Dear package mainters
It would be very usefull to also include these modules for the board Adafruit Feather RP2040 because when you add a WiFi these mo...
My pull request keeps failing CI with this "reformatted" error, but I don't understand what it's telling me. Any words of wisdom?
It is failing the black code formatting check. It is kinda confusing cause the error says reformatted but it does not actually reformat it.
Do you have pre-commit hooks installed on your PC?
I just found that article. am installing it now. (https://learn.adafruit.com/creating-and-sharing-a-circuitpython-library/check-your-code)
That should fix it
that'll fix it just by running it, or it'll point me to the issue?
once you run the pre-commit hooks (you probably have to run it manually since you already committed) black should reformat your files and you can commit them
No problem, it still catches me sometimes
There it is the lovely ✅
I'm getting "thing is deprecated" errors from uncrustify when I build CP
ok fixed it
I think this is more suited for here- but blinka installed in a venv and then run through a jupyter kernel fails to start because board can't identify the platform
(on windows)
what platform should it identify ?
I have no idea but it precludes the notebook from starting entirely which is pretty undesirable
because ipython will try to load modules
it tries to load modules that are not in use ?
same dir
I think anyway
let me take another look at this error
yeah it seems to try and load modules in the same directory
I can put it in a subfolder I suppose
see if that does anything
yep it does I guess that isn't really an issue
I was kind of under the impression it was trying to index the venv or something and not just the modules in the same folder
The check on wait x pin y was allowing the use of one more pin than had been claimed as 'in' pins
CircuitPython version
Adafruit CircuitPython 8.0.0-alpha.1-27-g187f156ac-dirty on 2022-07-01; ESP32-S3-DevKitC-1-N8R2 with ESP32S3
Code/REPL
No user code is run on the microcontroller before the behavior occurs.
Behavior
After initiating a GET via curl (and leaving it apparently waiting for a response) I then accessed the CIRCUITPY drive and renamed a file. When the new filename was saved, CURL picked up the following:
C:\Users\Desktop\cu...
@Ask314 @electric1236 @cpasto I'm not sure if some work has been done on the libraries or core that might have impacted this in the last year, but I built the latest 8.0.0 CP bits for the Teensy 4.1 and was able to use Lady Ada's code to write to the SD card using:
>>> with open("/sd/test.txt", "w") as f:
... f.write("new line!\r\n")
...
11
With no issues.
Is the P19A variant of the SAMD51 supported in circuitpython?
I imagine so since it’s in the uf2-samdx1 library
there are a couple of boards that seem to be using it
aloriumtech_evo_m51 and seeeduino_wio_terminal
Oh perfect
See #2206 and #1764 for why this is hard.
A newer comment in #2206 says:
This is not an issue with endpoint count. USB MSC can have multiple drives over the same endpoints by using a logical unit (LUN) index.
Is implementing this the hard part? If so, could you please add the option to show the SD card instead of the usual CIRCUITPY filesystem?
For example, boot.py could mount the SD card a...
We are working on making multiple drives available. There are some issues about making it work properly on all operating systems, which we're working through.
That's great, thank you! Looking forward to the Windows solution :sweat_smile:
Hi all, and thanks for the tag @hathach!
The action will first try to get GCC from the cache, and if that fails (which would be expected the first time it runs), it will download it from the Arm servers, set it up, and only then try to save it to the cache.
The avaiable cache size is limited, so rather than have a cache entry for each individual job, there is a cache entry per each version/platform of GCC used.
In this case as several of the parallel jobs are attempting to save to the ...
CircuitPython version
Adafruit CircuitPython 8.0.0-alpha.1-31-gc1b00442a on 2022-07-02; stm32f411ce-blackpill with STM32F411CE
Code/REPL
import board, digitalio
digitalio.DigitalInOut(board.C14)
Behavior
ValueError: C14 in use
Description
No response
Additional information
If I comment out the calls to never_reset_pin_number() [here](https://github.com/adafruit/circuitpython/blob/main/ports/stm/peripherals/stm32f4/stm32f411xe/g...
CircuitPython version
Adafruit CircuitPython 8.0.0-alpha.1-31-gc1b00442a on 2022-07-02; stm32f411ce-blackpill with STM32F411CE
Code/REPL
import board, digitalio
digitalio.DigitalInOut(board.A10)
Behavior
ValueError: A10 in use
Description
No response
Additional information
This code comment says that pin A10 gets occupied by USB_OTG_FS_ID. How d...
<@&356864093652516868> Just a reminder that the meeting is in just over 24 hours. It is a holiday here in the us today. Talk with you tomorrow!
This PR exposes up to 4 LUNs for MSC, for additional fatfs such as SDCard. Mostly based on @dhalbert https://github.com/dhalbert/circuitpython/tree/multiple-luns branch combined with following changes
- response to SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL as unsupported request in all msc examples. This is required for macos to send TEST_UNIT_READY regularly for "SDCard reader" application. Response OK to this request for non-removal device such as ram/flash disk can be beneficial since macos w...
just submit an PR for this #6555
I think it has enough horsepower and memory to run audiomp3...if you can add this to the built in modules for the Qt Py ESP32-S3 firmware, that would be awesome!
weird error in circup's CI during pip install:
https://github.com/adafruit/circup/runs/7188851151?check_suite_focus=true
Collecting circuitpython-build-tools
Downloading circuitpython-build-tools-1.10.1.tar.gz (11 kB)
Preparing metadata (setup.py): started
Preparing metadata (setup.py): finished with status 'error'
error: subprocess-exited-with-error
× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [25 lines of output]
Weird, but it looks like it's fixed if importlib_metadata is pinned to a new release, I tested the lasted (4.12.0) and it seems to have passed CI.
ah some part of the setup tools that doesn't manage its dependencies well maybe
how would I fix the circup PR then ?
I submitted a PR to update it; it looks like just re-pinning that requirement should be good.
It doesn't look like change from an API perspective for importlib_metadata.version() (the only thing we use from it, it seems) from v0.20 to v4.12!
oh wow that is a jump !
(you changed the - with a _, pip doesn't care, but the - is usually used I think)
Oh, good catch, I'll update that - if nothing else it's my own pet peeve as well haha
Yeah I guess something changed for setuptools since the last time the Build CI ran - It cleared successfully last time when it used setuptools==47.1.0 but not this time when it was using setuptools==63.1.0. Also a wild jump!
Is async support for UART on the roadmap? I want to use the NeoKey1x4 and UART together.
what do you need exactly?
I've set up latching on the NeoKey1x4 keys. Right now I'm doing:
while True:
latch_update() #update the state of the NeoKey1x4
buffer = uart.read(12)
With this code you have to wait for the uart.read to return or time out before the keyboard update runs. Rather than just tapping the key to toggle it you have press and hold it.
Maybe I should check the uart for bytes available before I commit to reading it...
It isn't anything official (or even well tested) but I did a proof of concept for UART and asyncio
https://gist.github.com/gamblor21/e9681057222f6a70fca0608ae3054b3e
It was reading GPS (via UART) there is a uart_asyncio.py in there and if you look at the GPS .py gives you an example of some of the usage.
No problem!
Thanks, I think I could do something like that. I guess a lot of libraries would need to change in order to support asyncio.
it's really tacked on, both in cpython and other pythons
@idle owl let me know if today is still a good day to meet, I can do the usual noon or post-5pm, no preference!
That’s what I found and Dan had mentioned similar to me. It’s a bit more then just having to subclass the initial work you need to add the async keyword in a lot of places.
On the plus side it did work for GPS
You can also set the uart timeout to zero.
Sorry no notes from me for today's meeting. Despite the extra day, I did not find the time to work on my project... and very soon a PicoW will arrive (and also an ESP32-S3 TFT Feather 4/2).
The run-tests file no longer exists in the tests folder.
Executing run-tests.py works as expected however.
I misunderstood what you meant by "discuss", I was assuming In The Weeds, but you won't be there anyway. Tomorrow at noon would work. Today does not 🙂
<@&356864093652516868> CircuitPython Weekly happens in just under 2 hours! Please add your Hug Reports and Status Updates to the notes doc. Note "not in meeting" if you're not able to attend, or "text only" if you're not able to speak during the meeting. Looking forward to chatting with you soon!
Would it still be helpful to leave notes? I'll likely be text only isntead of missing
Nah. I'd rather you be there. So we should chat between us, and then decide if we want to add it to In the Weeds for next Monday.
Sweeto!
Having an issue getting the LED to work with a custom PCB based on the Adafruit Feather (nrf52840).
When building and pushing the bootloader (https://github.com/adafruit/Adafruit_nRF52_Bootloader/releases/tag/0.6.4) to my board, I'm able to properly adjust the primary LED in the makefile. Because of a flaw in the design (which is being fixed in a future revision) I can't actually use the bootloader to access the board, but the status update from the LED is useful.
However, when I build and push a full version of CP to the board (using the Feather-Bluefruit-Sense port, adjusting the GPIOs to reflect my layout), the primary LED isn't getting used.
Anyone else encounter an issue like this, or have any guidance here?
@daring pumice can you break on circuitpython main to confirm it was loaded correctly?
break?
yes, with a debugger
I don't get a REPL, but I can halt the code using JLink Commander
when I read out the registers I get No Faults.
Unfortunately, I can't see any symbols when using GDB
what is the backtrace when you halt?
Good question, I'll take a look now
oh weird I get a MemoryError after code.py ends, by creating a logging.FileHandler to an SD Card
Not sure how to get a trace using JLink Commander. I can create a GDB connection, but not sure how to get a trace when I halt using the gdb CLI
similar process for nrf: https://learn.adafruit.com/debugging-the-samd21-with-gdb
Yes, I've used this to get myself this far, but this requires me to define a breakpoint somewhere in the c code - I don't know enough about where to insert a breakpoint to get a useful trace
on main 🙂
yup
Same issue as above: no symbol table :/
Sorry @jaunty juniper , not sure if this was about my issue or something else?
no no not at all
kk 👍
@daring pumice use a DEBUG=1 build
Sounds good. Will rebuild and get back. Much appreciated!
@proven garnet adafruit_logging.getLogger() defaults to a None handler, but that is not how C python does it, it defaults to prints (another issue is streamHandler does not end lines with "\r\n", like fileHandler does) I'll look into fixing it later unless you want to ?
Hmmmm.. that doesn't seem to have worked. Same issue.
nm, was loading the .hex, not the .elf
I now have symbols
Ok. I'm now getting proper breakpoints.
On the stm32f411ce-blackpill board, pins C14 and C15 are connected to the low-frequency crystal oscillator. However, how does CircuitPython know about that, even though https://github.com/adafruit/circuitpython/blob/main/ports/stm/boards/stm32f411ce_blackpill/mpconfigboard.h#L37 says #define BOARD_HAS_LOW_SPEED_CRYSTAL (0) (which as far as I understand means that CircuitPython will assume that there is no low-speed crystal)?
And since #define BOARD_HAS_LOW_SPEED_CRYSTAL (0) doesn't...
Oops, forgot to branch. I wanted to do a separate PR for the M4-Shim and RP2040-Shim, but messed up. Is this still OK to merge with one PR?
Yes, that's fine.
@slender iron Here's the backtrace:
reset_into_safe_mode (reason=reason@entry=MICROPY_FATAL_ERROR) at ../../supervisor/shared/safe_mode.c:126
126 }
(gdb) backtrace
#0 reset_into_safe_mode (reason=reason@entry=MICROPY_FATAL_ERROR) at ../../supervisor/shared/safe_mode.c:126
#1 0x00073f80 in __fatal_error (msg=msg@entry=0x9f0f8 "Assertion failed") at ../../main.c:994
#2 0x0002a858 in __assert_func (file=file@entry=0xa1378 "nrfx/drivers/src/nrfx_qspi.c", line=line@entry=192,
func=func@entry=0xa1430 <__FUNCTION__.5> "nrfx_qspi_cinstr_xfer", expr=expr@entry=0xa13c4 "p_config->wipwait")
at ../../main.c:1001
#3 0x0005c820 in nrfx_qspi_cinstr_xfer (p_config=p_config@entry=0x2003fcf8, p_tx_buffer=p_tx_buffer@entry=0x0,
p_rx_buffer=p_rx_buffer@entry=0x2003fd1c) at nrfx/drivers/src/nrfx_qspi.c:192
#4 0x00068690 in spi_flash_read_command (command=command@entry=159 'Y',
response=response@entry=0x2003fd1c "ÿÿÿ£4y\003 \215ì\a", length=length@entry=3) at supervisor/qspi_flash.c:115
#5 0x0006aaa2 in supervisor_flash_init () at ../../supervisor/shared/external_flash/external_flash.c:224
#6 0x0007ec8c in flash_ioctl (cmd=<optimized out>, out_value=out_value@entry=0x2003fd34)
at ../../supervisor/shared/flash.c:168
#7 0x0008d350 in supervisor_flash_obj_ioctl (self=<optimized out>, cmd_in=<optimized out>, arg_in=<optimized out>)
at ../../supervisor/shared/flash.c:191
#8 0x000484fe in fun_builtin_3_call (self_in=0x9f214 <supervisor_flash_obj_ioctl_obj>, n_args=<optimized out>,
n_kw=<optimized out>, args=0x20012258 <_internal_vfs+56>) at ../../py/objfun.c:109
#9 0x0004ed96 in mp_call_function_n_kw (fun_in=0x9f214 <supervisor_flash_obj_ioctl_obj>, n_args=3,
n_kw=n_kw@entry=0, args=0x20012258 <_internal_vfs+56>) at ../../py/runtime.c:665
#10 0x00081234 in mp_call_method_n_kw (n_args=n_args@entry=2, n_kw=n_kw@entry=0,
args=args@entry=0x20012254 <_internal_vfs+52>) at ../../py/runtime.c:680
#11 0x00083506 in mp_vfs_blockdev_ioctl (self=self@entry=0x20012224 <_internal_vfs+4>, cmd=<optimized out>,
arg=arg@entry=0) at ../../extmod/vfs_blockdev.c:118
#12 0x00041ffc in disk_ioctl (pdrv=<optimized out>, cmd=cmd@entry=5 '\005', buff=buff@entry=0x2003fd8f)
at ../../extmod/vfs_fat_diskio.c:97
#13 0x00046fb6 in find_volume (fs=fs@entry=0x20012264 <_internal_vfs+68>, mode=mode@entry=0 '\000')
at ../../lib/oofatfs/ff.c:3142
#14 0x0007db8a in f_mount (fs=fs@entry=0x20012264 <_internal_vfs+68>) at ../../lib/oofatfs/ff.c:3395
#15 0x00046b8e in filesystem_init (create_allowed=create_allowed@entry=false, force_create=force_create@entry=false)
at ../../supervisor/shared/filesystem.c:96
I've run the code 3 times and get the same issue each time
if (qspi_ready_wait() == NRFX_ERROR_TIMEOUT)
{
// This timeout should never occur when WIPWAIT is not active, since in this
// case the QSPI peripheral should send the command immediately, without any
// waiting for previous write to complete.
NRFX_ASSERT(p_config->wipwait);
return NRFX_ERROR_TIMEOUT;
}
Here's the schematic: https://github.com/WeActTC/MiniSTM32F4x1/blob/master/HDK/MiniF4x1Cx_V31.pdf
Pin A10 of the MCU is connected to the pin header and to nothing else. How to avoid the immediate ValueError: A10 in use?
See comments in https://github.com/adafruit/circuitpython/pull/2361 for some background on pin stuff on this board.
I see that too, but further down the trace it looks like this is happening when CP is trying to mount the filesystem.
It's also possible that this is a red herring; asserts are not checked except during a debug build. so your normal build might be getting past this
I hear you, but wouldn't my primary LED be getting lit at that point?
If there were no other issues, I mean?
I don't know where in the start up procedure that would happen
Good afternoon everyone -- happily lurking today.
in CircuitPython it does, but not in the bootloader
That could be why this is failing
Its looking for a device that doesn't exist
?
My board doesn't have external flash
what are you using for CIRCUITPY?
Good question
:smiles: :waves:
it's possible to use part of the internal flash for CIRCUITPY, but you may need the space for a larger one
Does it still? I thought I patched that, but maybe I didn't. Happy to review the patch when you get to it! Also good catch on StreamHandler, I didn't realize it was CRLF.
I'm thinking this is likely what my hardware guy intended, but I can't raise him atm
Our needs are really modest (only need i2c and BLE, really)
When I inspect the chip memory, CP takes up about 50% of the available space
While the pico is listed on the Downloads page, it is not entirely clear how to use the newly added wifi connectivity with circuitpython.
According to adafruit:
https://www.adafruit.com/product/5526
At the time of launch, only MicroPython has WiFi support
Being able to drop in a new pico W into existing projects to add wireless connectivity would be awesome. Looking forward to updates on this!
it depends more on your code size, including the libraries
it's more likely he would ask you that q, and you would spec it
pca10059 and raytac_mdbt50q-rx builds are examples of builds that use INTERNAL_FLASH_FILESYSTEM = 1. There are others as well.
swoons
On the next episode of @tomshardware The Pi Cast we have @GeekMomProjects on to talk about her projects. We may also geek out a little as we talk about all the cool RGB LED projects.
Join us 2:30pm ET / 7:30pm BST July 5 and ask your questions live!
https://t.co/1O8QgkQNcw
Ok. I'm currently basing my build off of the bluefruit feather sense - wondering if that's wise.
pick one of the no-external-flash builds instead
And if so, do I need to include INTERNAL_FLASH_FILESYSTEM = 1
definitely
Ok. Can you suggest one? Sorry to be a pain, but it's hard for me to distinguish between appropriate/inappropriate base builds
Just don't know enough yet
the raytac module one is pretty simple. You could look at the boards at circuitpython.org and see which one is closest to yours
Ok, I see two: the db-40 and rx
the rx is a dongle?
Ok. Better fit? The db will have buttons I don't have
boards/ADM_B_NRF52840_1/mpconfigboard.mk
boards/arduino_nano_33_ble/mpconfigboard.mk
boards/bless_dev_board_multi_sensor/mpconfigboard.mk
boards/bluemicro833/mpconfigboard.mk
boards/bluemicro840/mpconfigboard.mk
boards/electronut_labs_blip/mpconfigboard.mk
boards/electronut_labs_papyr/mpconfigboard.mk
boards/ikigaisense_vita/mpconfigboard.mk
boards/makerdiary_nrf52840_mdk_usb_dongle/mpconfigboard.mk
boards/microbit_v2/mpconfigboard.mk
boards/nice_nano/mpconfigboard.mk
boards/pca10059/mpconfigboard.mk
boards/pca10100/mpconfigboard.mk
boards/raytac_mdbt50q-db-40/mpconfigboard.mk
boards/raytac_mdbt50q-rx/mpconfigboard.mk
boards/simmel/mpconfigboard.mk
boards/sparkfun_nrf52840_mini/mpconfigboard.mk
boards/ssci_isp1807_dev_board/mpconfigboard.mk
boards/ssci_isp1807_micro_board/mpconfigboard.mk
boards/teknikio_bluebird/mpconfigboard.mk
boards/warmbit_bluepixel/mpconfigboard.mk
have INTERNAL_FLASH_FILESYSTEM = 1. Some of these are nRF52833 builds, so need to take those out. Then I'd just pick the ones that are the closest. You will certainly need to change some pin defns.
eliminate microbit_v2, pa10100, bluemicro833, arduino_nano_33_ble off the bat
Much appreciated.
I feel watched 👀
Now with twice the googly eye action!
Written in #circuitpython the code should work on other display types as well.
Next step to mount these somewhere…
502
I don't think there is a way to measure refresh rate
displayio will cap the refreshes though
but if a lot changes, it won't keep up
I didn’t see a built in way, but thought I might be missing something. I’ve never had much luck with changing the displayio refresh rate and observing any differences (by eye).
its been a while since I've been in that code
Sounds like I may need to add a custom hook to count refreshes.
@jaunty juniper 🐈⬛ !!
[I can't idly type on that keypad if it's plugged in]
That's why I include fidget mode.
@idle owl maybe you can PR that to qmk in your free time this week.
Hah! I'll get right on that 😄
Thanks everyone!
Thanks everyone!👋
👋
thanks!
thanks
Thanks!
👋 Thanks everyone
Thanks, everyone! 👋
What is the date for CP day again, @idle owl
August 19, 2022!
thanks 🙂
@tulip sleet @slender iron want to re-convene at the top of the hour?
You're welcome!
I could use a moment to stretch my legs & get a beverage refill
I think that meeting was going to wait - Limor wanted to be a part of it. (Unless I'm forgetting mention of a separate meeting).
oh okay nevermind then
I may have had divided attention during the internal meeting due to the sense of being behind
I did as well, trying to get an Actions run to be in progress. 😄
limor can do after 4 eastern if we want to meet today
i am fine with >4 ET
i thought you were off before then, but you are available, fine by me
nope, I gotta get lunch soon but then I'm around until 5 pacific
I just mentioned I wouldn't be watching the baby later
ok, let's ask her in slack
(becca is back from her appt)
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/1tiCKK3V9-X9_jgHTmTlEjDPfB_z7bjZTNu2kYtM7KBw/edit?usp=sharing
CircuitPython Weekly Meeting for Welcome to the CircuitPython Weekly meeting notes! Feel free to add your Hug Reports and Status Updates early. During the meeting, we go through them as a round robin sorted by username. If you can’t make the meeting and would still like to participate, add y...
👍🏼
Apparently pin A10 can be used for GPIO, and e.g. a 51k pullup resistor can be used to avoid USB problems in that case.
Next, I'll try commenting out the following line:
https://github.com/adafruit/circuitpython/blob/main/ports/stm/supervisor/usb.c#L125
Due to the problems with keypad, I'll first try something simpler (like digitalio I guess).
In some of the release CI workflows, right before building the distributions, there this:
for file in $(find -not -path "./.*" -not -path "./docs*" -name "*.py"); do
sed -i -e "s/0.0.0-auto.0/${{github.event.release.tag_name}}/" $file;
done;
I think that's how __version__ is populated right? So should all workflows have this? python setup.py sdist is becoming python -m build in order to build the wheels/source distributions, but I take it we still want that step in beforehand either way, correct?
Trying to figure out if that needs to be patched into all libraries, or removed from ones that have it.
speaking of that, is there a standard way for a module to provide a version that can be autofilled when installing with pip or is it always a separate process like this ?
I don't think we provide module.__version__ in every library at present time, some are packages with an empty __init__.py (circup finds it in the other files, but it can't be relied on from python code)
socketpool and mdns are for microcontrollers with native wifi. The RP2040 doesn't have native wifi so you'll want to use the ESP32SPI library instead. The Learn guide for ESP32SPI is good place to start.
Got it, thanks!
setup() and pyproject.toml define the version metadata variable. It can also be dynamic and setuptool_scm defines it using the tag defined in the release, which is what we do.
That's why if you have changes from the tag when you install it, it shows up as dirty
Oh you mean from the code itself though?
oh yeah I used that in discotool:
setuptools.setup(
...
use_scm_version={
'write_to': 'discotool/_version.py'
},
that results in something like that when not on a tag:
# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
version = '0.3.2.dev4+ga5d477a.d20220125'
version_tuple = (0, 3, 2, 'dev4+ga5d477a', 'd20220125')
IIRC, this isn't easy because the MP3 decoder library we use doesn't have xtensa assembly like it does for ARM. @jepler would be the person who looked into this.
yeah if you wanted to do:
from module import __version__
but that's a different question, I think the point is that modules on pypi don't use or need or care about __version__ but we could make it more consistent accross the CP libraries
I would be in favor of that. I would like to be able to ask someone what the__version__ of a library is if they import it in the REPL, for any library.
as a support mechanism
yeah absolutely
Sounds like it should get patched then, and all libraries should have __version__ defined in them or their __init__.py right?
I just confirmed that currently BME680 library shows __version__ as 0.0.0-auto.0 so looks like it should be patched in then. That patch to release.yml would support what you're saying, @jaunty juniper and @tulip sleet
In a future library patch
We could just add __version__ == "0.0.0-auto.0" in the appropriate place and voila, I think
yeah sounds right
CircuitPython version
The [Wemos docs say to use 8.5db](https://www.wemos.cc/en/latest/c3/c3_mini.html#about-wifi) to work around the WIFI connect issue.
## Workaround
If you use 8 or 9 you can still connect.
Code/REPL
>>> import wifi
>>> wifi.radio.tx_power = 8.5
Traceback (most recent call last):
File "", line 1, in
TypeError: can't convert float to int
>>> wifi.radio.tx_power = 8
>>> wifi.radio.connect(SSID, PASSWD)
>>> wifi.radio.ipv4_ad...
The commit in Micropython implementing cyw43xxx support for reference:
https://github.com/micropython/micropython/commit/50e46552c0c83b0c8570aba098a0ba4e68ae9eac
Meant to respond that noon works for me!
Great, I had forgotten, so this works as a reminder. 😄
Your image filenames are .png and the board_image value specifies .jpg.
@gilded cradle it looks like we'll need a new build for the lite s3
ok
actually maybe not
looks like backlight is inverted
which would explain why you can only see it when the display ram isn't inited
@gilded cradle have time to test now? what file extension do you need?
I can test in a bit
k, I'm done at 5
I would need the .bin file
kk
I can test in a little bit and I'll let you know if it works
👍
I think I asked this before but didn't understand the answer: What's the difference between the firmware adafruit_bus_device (written in C) and the Python library adafruit_bus_device? Is the latter only needed when the former isn't available? Because it doesn't look like the Python library references any code from the C code.
@gilded cradle
Thanks
I'm getting nothing. Not even a CIRCUITPY drive with this one.
I'll try that
It's better. It's just rotated 90 degrees and inverted.
Trying now
The text is now backwards, but the color is correct and it's still at 90 degrees of what it should be.
did the orientation change?
I'll give you one more build...
ok
I think width and height may need swapping too
the dimensions are the same... I think it'll be ok if I get rotation right
ok
and I'm out
night!
Ok, no change. We can try tomorrow.
This change will catch incorrect file names like in #985.
Before 7.3.2 release, update frozen modules to include https://github.com/adafruit/Adafruit_CircuitPython_Requests/pull/110 in adafruit_requests, and any other revisions.
Hi,
I am opening this PR to solve #6419. This is what I am trying to do:
- Allow the method to still receive 3 parameters, since signed parameter support still needs to be implemented.
- Add support to accept the signed keyword parameter; I did not implement signed parameter support though, but added a
NotImplementedErrorifsigned=Trueis passed. - Added a validation for the
byteorderparameter. Not sure if this is was necessary. I addedMP_QSTR_bighere, but I am not sure...
Hi all 👋 . I may have unwillingly discovered an incompatibility between the UF2 images built for STM32F405 boards and TinyUF2. Images produced both locally and downloaded from http://circuitpython.org won't flash! This appears to be due to the family ID contained within the UF2 images being different from TinyUF2's expectation. C.P. builds use a value of 0x6d0922fa (STM32F407) whilst TinyUF2 is expecting 0x57755A57 (STM32F4). I would be grateful for any prior knowledge / advice / suggestions as where to go from here. Cheers.
oh I remember noticing that tinyuf2 doesn't flash CP when looking at adding the UF2 to the builds of the STM32 feather. Unfortunately I don't know anything about that family ID business...
Thanks @Neradoc.
I didn't look into it back then, just made a note to get back to it some day. I would open an issue in the CP repo to have eyes on it
I'll take that suggestion and raise it soon. Thanks for the reply 🙂
If anyone's up, wondering if there's a list for Flashing LED Statuses.
I only have a single-coloured LED (not a multi-coloured RGB LED) and am getting a repeating pattern of 6 flashes after the initial bootup sequence.
CircuitPython version
8.0.0-alpha.1
Code/REPL
N/A
Behavior
N/A
Description
I believe I have unwillingly discovered an incompatibility between the UF2 images built for STM32F405 boards and TinyUF2. Images produced both locally and downloaded from http://circuitpython.org cannot be flashed using TinyUF2.
This appears to be due to the family ID contained within the UF2 images being different from TinyUF2's expectation. Circuit Python buil...
Thanks for the fix! I have made some suggestions (which are not tested!).
Added a validation for the byteorder parameter. Not sure if this is was necessary. I added MP_QSTR_big here, but I am not sure how to the qstrdefs.enum.h file.
The qstr will get added automatically; you don't need to do anything. The sources are scanned to generate the qstr's when a build is done. Make sure to do make clean if you change or add any qstr's, though.
I don't know whether you changed `circuitpy...
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
if (args[ARG_byteorder] == MP_OBJ_NEW_QSTR(MP_QSTR_little)) {
We try to be parsimonious with the error strings ti save space and reuse them if possible. In this case, there is no similar "we don't implement a particular value", but %q=%q is short and could be reused in the future.
mp_raise_NotImplementedError_varg(MP_ERROR_TEXT("%q=%q"), MP_QSTR_signed, MP_QSTR_True);
What are the benefits of creating an .mpy file for a library, other than potentially smaller footprint? If your library project has multiple .py files can you combine them into one .mpy file to simplify its installation/use? I come from a c#/dll background so I can see benefits of a 'compiled' library but not sure if .mpy is anything close to a .dll.
can you put multiple .py files into a single .mpy or is it a one-to-one? my end goal is to simplify the library install and related import statements required to use it. I'm not a fan of all classes/code for a library placed into a single .py file.
it's 1-to-1
The Metro M0 Express ru build is too big. After you make some changes, we'll see if we can squeeze it a bit.
@isacben I just want to know if you retested.
This is also affecting ESP32-C3 devices, making it difficult (impossible?) to bootstrap them into web workflow.
Hi @dhalbert ,
Thank you very much for the helpful feedback!!
Yes, I am testing with the Feather RP2040. This is the only one I have, unfortunately!
- I wend ahead and made the changes (also tested with Feather RP2040).
- Regarding the
circuitpython.pot, I did not updated manually; the pre-commit did it. This time I did run make translate. - I also realized about the MO Express. I built CP for that board locally and it worked; so, I would like to see how it behaves with this chan...
@tulip sleet @slender iron @idle owl maybe either between 1PM-3PM ET today, or else tomorrow for going through the 8.0 milestone list? I am hanging out with a friend from 4-6PM ET today.
FYI, I tried the web workflow on the esp32-s3 box lite and it totally crashed the device until I installed older firmware and removed the .env file. So I'm thinking it may need to be a new board in CP. I also noticed buttons are different, so maybe there's quite a bit more differences than are obvious.
@gilded cradle ok. I’ll ping you when I’m at my desk. Kiddo didn’t sleep well last night so I’m getting a slow start
No worries.
notes
- This second commit failed. I think it was because of this line:
{ MP_QSTR_bytes, MP_ARG_REQUIRED | MP_ARG_OBJ }, { MP_QSTR_byteorder, MP_ARG_REQUIRED | MP_ARG_OBJ },I think this would fix it:
{ MP_QSTR_bytes, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} }, { MP_QSTR_byteorder, MP_ARG_REQUIRED | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
This is only because the unix port has set -Wextra. A cheaper way would be:
...
I'm available between now-ish and 3pm. Tomorrow I'm busy between 2:30-3:30pET.
I grabbed the ESP32-S3 Box (non-lite version) from my office and tried absolute latest CP firmware which works fine so far. I think the lite version doesn't have a touchscreen. Probably has a different display altogether, so that's why it looked strange. Not sure on the WiFi though. Anyways, I'll continue web workflow stuff with the non-lite box.
great! I'll have to pick up a lite one. let me know if you hit any roadblocks
I'm at my desk now
Dan appears to be idle at the moment.
slow flashes at boot are when you can enter safe mode. faster flashes after that are when you can enable the ble workflow
becca has an appointment this afternoon so my availability will depend on whether the kid is asleep
@onyx hinge You still around?
i can do it now. I have a service person here for the heating system so I may need to step away briefly.
at an unknown time
Yeah I think so. Somewhere we can vid and share screens. That worked last time.
kk