Тема: MicroPython на ESP32s: зависання під час GET запиту
Доброго дня.
Маю модуль esp-wroom-32s, із прошитим MicroPython'ом. Ось повний код для розуміння всієї картини:
from machine import Pin
from time import sleep
from sht30 import SHT30
import gc
import network
try:
import usocket as socket
except:
import socket
def http_get(url):
import socket
_, _, host, path = url.split('/', 3)
addr = socket.getaddrinfo(host, 80)[0][-1]
s = socket.socket()
s.connect(addr)
s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
while True:
data = s.recv(200)
if data:
print(str(data, 'utf8'), end='')
else:
break
s.close()
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect('TP-Link_0A00', '***')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
led = Pin(2, Pin.OUT)
sensor = SHT30()
while True:
led.value(not led.value())
v = sensor.measure_int()
print(v[2], "%")
print(v[0], "C")
toSend = "https://somesoneite.ua/someonescript.php?point=H1:" + str(v[2]) + ";T1:" + str(v[0])
http_get(toSend)
gc.collect()
F = gc.mem_free()
A = gc.mem_alloc()
T = F+A
P = '{0:.2f}%'.format(F/T*100)
print ('Total:{0} Free:{1} ({2})'.format(T,F,P))
s = os.statvfs('//')
print('{0} MB'.format((s[0]*s[3])/1048576))
sleep(5)
Після декількох хвилин модуль висне на функції
http_get(url)
, імовірно у рядках:
s.connect(addr)
s.send(bytes('GET /%s HTTP/1.0\r\nHost: %s\r\n\r\n' % (path, host), 'utf8'))
Справа в тому, що модуль просто висне: не перезавантажується, жодних повідомлень про скидання мікроконтролера watchdog'ом, це не переповнення пам`яті (в коді перевіряю).
Чи хтось стикався із подібною поведінкою даного модуля на MicroPython? Можливо будуть поради або припущення, хочаб в якому напрямку шукати причину?