Тема: 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? Можливо будуть поради або припущення, хочаб в якому напрямку шукати причину?