Code only works from Visual Studio
-
I have this code:
def main(): purple_air = PurpleAir() # Reset orientation when A pushed. End test if testing. btnA.wasPressed(purple_air.SetOrientation) btnB.wasPressed(purple_air.Testing) wifi_try_count = 0 while True: while True: if not (wifiCfg.wlan_sta.isconnected()): wifi_try_count += 1 purple_air.ShowError( 'No WiFi ({:d})'.format(wifi_try_count)) wifiCfg.doConnect('FBI', 'CIA') purple_air.ShowError('WiFi connected') else: purple_air.ShowError('Trying') try: purple_air.GetAQI() except Error as e: purple_air.ShowError(e) purple_air.ShowError('Waiting') wait_ms(1) purple_air.ShowError('Done')
When I run from Visual Studio, it connects to WiFi, prints WiFi Connected, Waiting, Done, Trying all in a row.
When I disconnect it, choose it from the App screen, it will stop at WiFi Connected. If I yank out the entire else clause, then it will stop at Waiting. In either case, exactly 1 print statement after connecting to WiFi.
It's not actually completely dead: Pressing the A or B buttons execute the callbacks as expected.
But I can't figure out why it reacts differently connected vs. unconnected!
Any ideas?
-
OK, I have no idea why, but taking out the
else:
works. (I took outmain()
first, and that didn't help, but I didn't put it back in once things worked). I haven't run it for a long time, so it might still hang, but initial indications are promising!while True: if not (wifiCfg.wlan_sta.isconnected()): wifi_try_count += 1 purple_air.ShowError( 'No WiFi ({:d})'.format(wifi_try_count)) wifiCfg.doConnect('Mi5', 'double07') purple_air.ShowError('WiFi connected') try: purple_air.GetAQI() except Error as e: purple_air.ShowError(e) wait_ms(1)
-
Nope, spoke too soon. It just takes longer to hang. :(
-
I found out that you can actually get a serial console, and it says:
Traceback (most recent call last): File "main.py", line 130, in <module> File "main.py", line 128, in <module> File "main.py", line 96, in GetAQI NameError: name 'wait_ms' isn't defined
Don't ask me why it works when connected to the laptop, though!
Serves me right for trying to limit the imports. :)
-
wait_ms is part of the uiflow class, did you import it at the start of your program?
-
I was trying to be "more pythonic" and not
import *
, i.e.from m5stack import lcd
It didn't occur to me that it was in uiflow!
I've gone back to importing everything. :) -
I noticed that some development environments use REPL when transferring files and running. And by the way, they silently import various system libraries / modules. Eg uPyCraft imports os library to display a list of files. By the way, the wait_ms () can be imported from the time library
-
Given that I can now see the console, I determined that it throws OSError if the http GET fails. Which is a weird error to throw, but OK. So I put that in my
except:
clause, and it's humming away!