ESP32 - Beschreibt, wie Discord-Webhooks mit MicroPython angefordert werden.
Das Folgende ist die bestätigte Umgebung.
Artikel | Modellname | Bemerkungen |
---|---|---|
ESP32-WROOM-32 Entwicklungsboard | [NodeMCU-32S ESP32-WROOM-32] |
Der Code, dessen Funktion bestätigt wurde, lautet wie folgt.
Code | Erläuterung | Bemerkungen |
---|---|---|
SSID | Access Point SSID | - |
PASS | Zugangspunkt-Passwort | - |
URL | Discord - webhook URL | - |
discord.py
import network
import time
import urequests as requests
# AP
SSID = "XXXXXXXXXXXXX"
PASS = "YYYYYYYYYYYYY"
# discord webhook url
URL = "https://discord.com/api/webhooks/aaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
def do_connect():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print('connecting to network...')
wlan.connect(SSID, PASS)
while not wlan.isconnected():
time.sleep(1)
print('network config:', wlan.ifconfig())
return
def main():
do_connect()
payload = """content=This message is sent by "ESP32"."""
response = requests.post(URL, headers={"Content-Type": "application/x-www-form-urlencoded"}, data=payload)
response.close()
main()
>>> import discord
Der obige Code selbst funktioniert aber Wenn Sie verschiedene Funktionen hinzufügen, tritt ein Betriebssystemfehler (MemoryError) auf.
Es scheint hier viel Speicher zu verbrauchen, da es HTTPS-Kommunikation erfordert. Ich habe verschiedene Dinge ausprobiert, aber ich denke, dass dies durch die folgende Methode vermieden werden kann.
--Erstellen Sie in einem einzelnen Thread
Selbst wenn jeder Prozess zu einem Thread gemacht wird, wird viel Speicherplatz benötigt. In MicroPython können Sie auch keine Warteschlange usw. verwenden. Wenn die Socket-Kommunikation für die Kommunikation zwischen Threads verwendet wird, wird auch Speicher verwendet. Es scheint besser, es so zu machen, dass die gesamte Verarbeitung in der Hauptschleife erfolgt.
Die Bedingung für die Ausführung der Garagensammlung von MicroPython ist, wenn der freie Speicher unter einem bestimmten Wert liegt.
Da bei der HTTPS-Kommunikation eine große Menge an Speicherplatz erfasst wird, ist es sicherer, unmittelbar zuvor eine aktive Speicherbereinigung durchzuführen. Sie können dies mit dem folgenden Code tun.
import gc
gc.collect()
Da MicroPython Dateien liest und ausführt, hat es einen Speichernachteil, es sei denn, es handelt sich um eingefrorenen Code. Mit der Sprache C habe ich das Gefühl, dass ich etwas mehr Speicherplatz sparen kann. Ich habe zuvor Code wie diesen auf FreeRTOS auf demselben Gerät geschrieben. Ich erinnere mich, dass es kein besonderes Problem gab.
Erstens gibt es ein Problem bei der Implementierung auf 512 KByte. Die ESP32-WROVER-Serie verfügt über 4 MB RAM. Es ist einfach, aber ärgerlich, weil der Preis steigt.