ESP32 - MicroPythonを使い、Discord-Webhooksへのリクエスト
はじめに
ESP32 - MicroPythonを使い、Discord-Webhooksへのリクエスト方法について記載します。
※Discordの紹介や設定手順は割愛します。
開発環境
以下が確認した環境となります。
- ホストPC
- windows10 64bit Home
- VSCode - 1.48.0
- Pymakr 1.1.5
- NodeJS - 12.14.1 LTS
- ターゲット
- MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32
※MicroPythonの環境構築は、「ESP32-VSCode-microPythonでの開発環境の構築」を参照願います。
機材
項目 | 型名 | 備考 |
---|---|---|
ESP32-WROOM-32 開発ボード | [NodeMCU-32S ESP32-WROOM-32] |
コード
動作確認したコードは以下となります。
コード | 説明 | 備考 |
---|---|---|
SSID | アクセスポイントのSSID | - |
PASS | アクセスポイントのパスワード | - |
URL | Discord - webhook URL | - |
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
結果
>>> import discord
メモリの問題
上記のコード自体は動作しますが、
いろんな機能を入れていくと、OSエラー(MemoryError)が発生します。
HTTPS通信が必要なため、ここにメモリを多く使用するようです。
いろいろと試してみましたが、以下の方法で回避できるかなと思われます。
- シングルスレッドで作成する
- 能動的にガベレージコレクションを実施する
- C言語で実装する
- デバイスを変更する
シングルスレッドで作成する
各処理をスレッドにするだけでも、メモリをかなり消費します。
また、MicroPythonでは、Queueなどを使うことはできません。
仮に、socket通信でスレッド間の通信を行うとこれもメモリを使います。
全処理をメインループで行うように作ってあげた方がよさそうです。
能動的にガベレージコレクションを実施する
MicroPythonのガベレージコレクションが走る条件は、メモリの空きがある一定値より小さくなった場合です。
※空き容量は設定はできます。
HTTPS通信で、大きなメモリ取得が発生するため、その直前で能動的にガベレージコレクションを実施するほうが無難です。
以下のコードで実施することができます。
import gc
gc.collect()
C言語で実装する
MicroPythonはファイルを読んで実行しているため、フリーズコードにしない限り、メモリ的には不利です。
C言語であれば、もうすこしメモリを抑えれる気がします。
以前、同じデバイスで、FreeRTOSで今回のようなコードを書いたことがありますが、
特に問題は起きなかったと記憶しています。
デバイスを変更する
そもそも512KByte上で、実施することに問題があります。
ESP32-WROVERシリーズであれば、4MByteのRAMがあります。
手軽ですが、値段が上がってしまうため悩ましいところです。
参考
Author And Source
この問題について(ESP32 - MicroPythonを使い、Discord-Webhooksへのリクエスト), 我々は、より多くの情報をここで見つけました https://qiita.com/kotaproj/items/3b974425dfa2579afdbc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .