将 Esp32(Micropython) 中的内容发布到 firebase 时出错
Error while posting something from Esp32(Micropython) to firebase
我正在尝试将 firebase 与 Micropython 结合使用。不管我这样做多少次
print(firebase.get(URL))
。如果我使用 firebase.put(URL, datas)
或 firebase.patch(URL, datas)
那么它会成功发布该数据,但是如果我尝试读取数据 print(firebase.get(URL))
然后会弹出此错误。
Firebase 库:https://github.com/vishal-android-freak/firebase-micropython-esp32
代码:
import network
import ufirebase as firebase
from time import sleep
URL = 'https://xxxxxxxxxxxxxxxx.firebaseio.com/'
wlan = network.WLAN(network.STA_IF)
if not wlan.active() or not wlan.isconnected():
wlan.active(True)
print('connecting to: xxxx')
wlan.connect('xxxx', 'xxxxxxxxx')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
datas = {'Shape': {'hos': 'fse', 'xxe': 'ter'}, 'Wps': 'Wps'}
firebase.put(URL, datas)
sleep(5)
print(firebase.get(URL))
错误:
Traceback (most recent call last):
File "main.py", line 21, in <module>
File "ufirebase.py", line 124, in get
File "urequests.py", line 116, in get
File "urequests.py", line 62, in request
OSError: [Errno 12] ENOMEM
MicroPython v1.18 on 2022-01-17; 4MB/OTA module with ESP32
Type "help()" for more information.
您正在调用 firebase.get(URL)
并遇到内存不足错误。
此调用returns数据库的全部内容。显然这超过了 MicroPython 可用的 RAM 数量(不是很多)。 ENOMEM
表示“无内存”- Python 有 运行 内存不足。
您需要将调用更改为仅请求您要获取的内容。在这种情况下,您可以尝试
print(firebase.get(URL + 'Shape'))
print(firebase.get(URL + 'Was'))
您可以参考the library's documentation了解如何更好地使用get()
方法。
知道了 urequests 库的问题,如果您可以切换回 usocket 并在超时之前关闭套接字,则可以正常工作。对于 urequests 你需要有一个板与 spiram。对于基于 non-spiram 的主板,这里有一个很好的基于套接字的 firebase 库 micropython-firebase-realtime-database
我正在尝试将 firebase 与 Micropython 结合使用。不管我这样做多少次
print(firebase.get(URL))
。如果我使用 firebase.put(URL, datas)
或 firebase.patch(URL, datas)
那么它会成功发布该数据,但是如果我尝试读取数据 print(firebase.get(URL))
然后会弹出此错误。
Firebase 库:https://github.com/vishal-android-freak/firebase-micropython-esp32
代码:
import network
import ufirebase as firebase
from time import sleep
URL = 'https://xxxxxxxxxxxxxxxx.firebaseio.com/'
wlan = network.WLAN(network.STA_IF)
if not wlan.active() or not wlan.isconnected():
wlan.active(True)
print('connecting to: xxxx')
wlan.connect('xxxx', 'xxxxxxxxx')
while not wlan.isconnected():
pass
print('network config:', wlan.ifconfig())
datas = {'Shape': {'hos': 'fse', 'xxe': 'ter'}, 'Wps': 'Wps'}
firebase.put(URL, datas)
sleep(5)
print(firebase.get(URL))
错误:
Traceback (most recent call last):
File "main.py", line 21, in <module>
File "ufirebase.py", line 124, in get
File "urequests.py", line 116, in get
File "urequests.py", line 62, in request
OSError: [Errno 12] ENOMEM
MicroPython v1.18 on 2022-01-17; 4MB/OTA module with ESP32
Type "help()" for more information.
您正在调用 firebase.get(URL)
并遇到内存不足错误。
此调用returns数据库的全部内容。显然这超过了 MicroPython 可用的 RAM 数量(不是很多)。 ENOMEM
表示“无内存”- Python 有 运行 内存不足。
您需要将调用更改为仅请求您要获取的内容。在这种情况下,您可以尝试
print(firebase.get(URL + 'Shape'))
print(firebase.get(URL + 'Was'))
您可以参考the library's documentation了解如何更好地使用get()
方法。
知道了 urequests 库的问题,如果您可以切换回 usocket 并在超时之前关闭套接字,则可以正常工作。对于 urequests 你需要有一个板与 spiram。对于基于 non-spiram 的主板,这里有一个很好的基于套接字的 firebase 库 micropython-firebase-realtime-database