ESP32 - Anfrage an Discord-Webhooks mit MicroPython

Einführung

ESP32 - Beschreibt, wie Discord-Webhooks mit MicroPython angefordert werden.

d004.PNG

Entwicklungsumgebung

Das Folgende ist die bestätigte Umgebung.

Ausrüstung

Artikel Modellname Bemerkungen
ESP32-WROOM-32 Entwicklungsboard [NodeMCU-32S ESP32-WROOM-32]

Code

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()

Ausführungsmethode

>>> import discord

Ergebnis

d004.PNG

Speicherproblem

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

In einem Thread erstellen

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.

Garagensammlung aktiv durchführen

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()

In C-Sprache implementieren

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.

Gerät wechseln

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.

Referenz

Recommended Posts

ESP32 - Anfrage an Discord-Webhooks mit MicroPython
Setzen Sie MicroPython unter Windows ein, um ESP32 unter Python auszuführen
Einführung in EV3 / MicroPython
Mit Python auf Twitter posten
Starten Sie mit Python zu Selen
Einführung in discord.py (3) Verwenden von Stimme