You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pico W调用Firebase接口触发OSError: [Errno 12] ENOMEM内存问题求助

解决Pico W执行urequests.get().json()时的内存不足问题

1. 避免一次性加载整个JSON响应

urequests的.json()方法会把完整响应内容读入内存后再解析,这对Pico W的小内存来说压力极大。改成逐块读取响应,只提取你需要的数字字段:

import urequests
import gc

gc.collect()  # 先手动回收闲置内存
response = urequests.get(url + "/embeded_system.json")
target_num = None
# 逐行遍历响应,定位目标字段
for line in response.iter_lines():
    # 替换成你Firebase中存储数字的键名,比如b'"display_num"'
    if b'"your_target_key"' in line:
        # 从行中提取数字字符串,适配类似 "key": "1234" 的格式
        parts = line.split(b':')
        if len(parts) >= 2:
            target_num = parts[1].strip().strip(b'"').decode()
            break
response.close()
gc.collect()
# 后续用target_num更新LCD即可

2. 简化Firebase返回的数据结构

如果你的JSON包含大量无关字段,直接在Firebase端精简数据:

  • 单独创建一个仅存储目标数字的节点,比如返回{"num": "123"}而非包含其他冗余内容的大JSON
  • 更极端的话,直接返回纯数字字符串(不用JSON格式),读取时无需解析JSON:
response = urequests.get(url + "/display_num.txt")  # Firebase返回纯数字文本
target_num = response.text.strip()
response.close()

3. 强化内存回收与变量管理

在请求前后强制回收内存,同时及时清理无用变量:

# 先删除当前未使用的变量
del unused_var1, unused_var2
gc.collect()

response = urequests.get(...)
# 处理响应逻辑
target_num = ...
response.close()

# 立即删除response变量,再回收内存
del response
gc.collect()

4. 使用更轻量化的HTTP请求实现

跳过urequests的封装,直接用socket实现核心HTTP请求逻辑,减少冗余内存占用:

import socket
import gc

gc.collect()
# 解析URL的主机地址
host = url.split('//')[1]
s = socket.socket()
addr = socket.getaddrinfo(host, 80)[0][-1]
s.connect(addr)
# 发送最简HTTP请求
s.send(b'GET /embeded_system.json HTTP/1.1\r\nHost: ' + host.encode() + b'\r\nConnection: close\r\n\r\n')

# 跳过响应头,直到空行
while True:
    line = s.readline()
    if line == b'\r\n':
        break

# 分块读取响应体,提取目标数字
target_num = None
while True:
    chunk = s.read(64)  # 每次读64字节,降低内存负载
    if not chunk:
        break
    if b'"your_target_key"' in chunk:
        parts = chunk.split(b':')
        if len(parts) >= 2:
            target_num = parts[1].strip().strip(b'"').decode()
            break
s.close()
gc.collect()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:16:05