ESP32 - Décrit comment demander des Webhooks Discord à l'aide de MicroPython.
Ce qui suit est l'environnement confirmé.
article | Nom du modèle | Remarques |
---|---|---|
ESP32-WROOM-32 Carte de développement | [NodeMCU-32S ESP32-WROOM-32] |
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()
>>> import discord
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
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.
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()
É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.
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.
Recommended Posts