ESP32 - Demande à Discord-Webhooks à l'aide de MicroPython

introduction

ESP32 - Décrit comment demander des Webhooks Discord à l'aide de MicroPython.

d004.PNG

Environnement de développement

Ce qui suit est l'environnement confirmé.

équipement

article Nom du modèle Remarques
ESP32-WROOM-32 Carte de développement [NodeMCU-32S ESP32-WROOM-32]

code

Le code dont le fonctionnement a été confirmé est le suivant.

code La description Remarques
SSID SSID du point d'accès -
PASS Mot de passe du point d'accès -
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()

Méthode d'exécution

>>> import discord

résultat

d004.PNG

Problème de mémoire

Le code ci-dessus fonctionne, mais Si vous ajoutez diverses fonctions, une erreur du système d'exploitation (MemoryError) se produit.

Il semble utiliser beaucoup de mémoire ici car il nécessite une communication HTTPS. J'ai essayé diverses choses, mais je pense que cela peut être évité par la méthode suivante.

--Créer en un seul thread

Créer en un seul fil

Même faire de chaque processus un thread consomme beaucoup de mémoire. De plus, dans MicroPython, vous ne pouvez pas utiliser Queue, etc. Si la communication socket est utilisée pour communiquer entre les threads, cela utilise également la mémoire. Il semble préférable de faire en sorte que tout le traitement soit effectué dans la boucle principale.

Effectuer activement la collecte de garage

La condition d'exécution du garbage collection de MicroPython est lorsque la mémoire libre est inférieure à une certaine valeur.

Puisqu'une grande quantité de mémoire est acquise dans la communication HTTPS, il est plus sûr d'effectuer activement le garbage collection juste avant cela. Vous pouvez le faire avec le code ci-dessous.

import gc

gc.collect()

Implémenter en langage C

Étant donné que MicroPython lit et exécute des fichiers, il présente un inconvénient de mémoire à moins qu'il ne s'agisse de code figé. Avec le langage C, je sens que je peux économiser un peu plus de mémoire. J'ai déjà écrit du code comme celui-ci sur FreeRTOS sur le même appareil, Je me souviens qu'il n'y avait pas de problème particulier.

Changer d'appareil

En premier lieu, il y a un problème lors de sa mise en œuvre sur 512 Ko. La série ESP32-WROVER dispose de 4 Mo de RAM. C'est facile, mais c'est ennuyeux parce que le prix augmente.

référence

Recommended Posts

ESP32 - Demande à Discord-Webhooks à l'aide de MicroPython
Mettez MicroPython sur Windows pour exécuter ESP32 sur Python
Introduction à EV3 / MicroPython
Publier sur Twitter en utilisant Python
Commencez à Selenium en utilisant python
Introduction à discord.py (3) Utilisation de la voix