I've been trying to make a simple HTTP request with my Atom Matrix.
I want to implement:
A single Button Click sends a HTTP request and shows me the success or error state via the Matrix LEDs
But my problem is that the request seems to fail consistently and I couldn't print any information about the actual request. It seems as if it fails before or while executing the request. I was able to print the exception thrown: [Errno 12] ENOMEM
Which looks like the Atom ran out of memory. But I'm confused why? The whole code snippet is already pretty small and barely does anything.
from m5stack import *
from m5ui import *
from uiflow import *
import wifiCfg
import urequests
gc.collect()
rgb.set_screen([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
def buttonA_wasPressed():
# global params
wifiCfg.autoConnect(lcdShow=False)
if wifiCfg.wlan_sta.isconnected():
try:
print(urequests.request)
req = urequests.request(method='GET', url='https://dummyjson.com/products/1', headers={})
print(req.text)
print("stuff never get executed")
# Show some green lights indicating success state
rgb.set_screen([0x03ff33,0,0,0,0,0x03ff33,0,0,0x00ff33,0,0,0x03ff33,0x00bd26,0x00ff33,0,0,0x03ff33,0x00ff33,0x00ff33,0x03ff33,0,0,0x03ff33,0x03ff33,0x03ff33])
gc.collect()
req.close()
except Exception as e:
print('Failed')
print(str(e))
# Show some red lights indicating error state
rgb.set_screen([0,0,0,0,0,0,0,0,0xff0000,0,0,0xff0000,0x9e0000,0xff0000,0,0,0xff0000,0xff0000,0xff0000,0xff0000,0,0,0xff0000,0xff0000,0xff0000])
pass
btnA.wasPressed(buttonA_wasPressed)
This is the log after pushing the button on my Atom Matrix
<function request at 0x3ffe7220>
Failed
[Errno 12] ENOMEM
<function request at 0x3ffe7220>
proves that (some) request function is loaded
[Errno 12] ENOMEM
is the exception printed in the except block
The Issue is clearly related to the request because if I remove the request, the success case is executed (green light etc.)
...
try:
print(urequests.request)
#req = urequests.request(method='GET', url='https://dummyjson.com/products/1', headers={})
#print(req.text)
print("stuff never get executed")
# Show some green lights indicating success state
rgb.set_screen([0x03ff33,0,0,0,0,0x03ff33,0,0,0x00ff33,0,0,0x03ff33,0x00bd26,0x00ff33,0,0,0x03ff33,0x00ff33,0x00ff33,0x03ff33,0,0,0x03ff33,0x03ff33,0x03ff33])
gc.collect()
#req.close()
...
Context:
- I flashed the device with UIFlow_Matrix v1.12.9 (latest)
- I'm using Arduino Lab for Micropython to upload and execute code on the Atom Matrix because I found it to be the most reliable connection over USB and giving me a fast response through the console.