You need to enable JavaScript to run this app. Micropython环境M5Stack ATOM Lite发送HTTPS请求后后续请求失败排查
优惠活动
大模型
产品
解决方案
定价
更多

Micropython环境M5Stack ATOM Lite发送HTTPS请求后后续请求失败排查

根因分析

你遇到的是Micropython TLS会话内存泄漏问题,错误中的MBEDTLS_ERR_MPI_ALLOC_FAILED明确指向mbedtls加密库申请大数运算内存失败。
你的代码未显式释放请求返回的响应对象,导致第一次HTTPS请求占用的TLS上下文、加密缓冲区、RSA运算内存没有被回收。M5Stack Atom Lite本身RAM资源非常有限,第二次请求发起时没有足够内存完成TLS握手的RSA校验步骤,因此触发报错。
HTTP请求不需要TLS加密运算,内存占用极低,所以不会触发该问题。

修复方案

1. 核心修复:每次请求后显式关闭响应对象

不管请求成功还是异常,都要调用req.close()释放连接占用的所有资源,修改后代码如下:

import gc # 内存紧张时可添加

if (pin1.value()) == True:
  if uart1.any():
    req = None
    try:
      # gc.collect() # 内存紧张时可在请求前手动触发垃圾回收
      req = urequests.request(method='POST', url='https://my-server.com/my-endpoint', json={'requestCode':'yadayada'})

      if req.status_code == 200:
          rgb.setColorAll(0x00ff00)
          rgb.setBrightness(100)
          wait_ms(1500)
          rgb.setBrightness(0)
      else:
        rgb.setColorAll(0xff0000)
        rgb.setBrightness(100)
        wait_ms(1500)
        rgb.setBrightness(0)
    except Exception as e:
      print("请求错误:", e) # 可保留用于排查问题
    finally:
      # 无论请求成功失败都释放资源
      if req is not None:
        req.close()
  wait_ms(2)

2. 可选优化(内存不足时可启用)

  • 请求前调用gc.collect()手动清理闲置内存
  • 公网可信任域名可添加参数verify=False关闭证书校验,减少校验环节内存开销(不建议不可信环境使用)
  • 升级到最新版Micropython固件:部分旧版本mbedtls绑定存在已知内存泄漏问题,新版本已修复

验证方法

修改完成后连续发起10次以上HTTPS请求,若不再报错说明资源释放逻辑生效。

内容的提问来源于stack exchange,提问作者astriffe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 05:57:02