ESP32 - MicroPython을 사용하여 Discord-Webhooks에 요청
6333 단어 Webhook디스코드파이썬micropythonESP32
소개
ESP32 - MicroPython을 사용하여 Discord-Webhooks에 요청하는 방법을 설명합니다.
※Discord의 소개나 설정 순서는 할애합니다.
개발 환경
다음이 확인한 환경입니다.
다음이 확인한 환경입니다.
※MicroPython의 환경 구축은, 「 ESP32-VSCode-microPython으로 개발 환경 구축 」를 참조 바랍니다.
장비
품목
형명
비고
ESP32-WROOM-32 개발 보드
[NodeMCU-32S ESP32-WROOM-32]
코드
동작 확인한 코드는 다음과 같습니다.
코드
설명
비고
SSID
액세스 포인트의 SSID
-
PASS
액세스 포인트 비밀번호
-
URL
Discord - webhook URL
-
discord.pyimport 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
결과
메모리 문제
위의 코드 자체는 작동하지만,
다양한 기능을 넣으면 OS 오류 (MemoryError)가 발생합니다.
HTTPS 통신이 필요하기 때문에 여기에 메모리를 많이 사용하는 것 같습니다.
여러가지 시도해 보았습니다만, 이하의 방법으로 회피할 수 있을까 생각됩니다.
동작 확인한 코드는 다음과 같습니다.
코드
설명
비고
SSID
액세스 포인트의 SSID
-
PASS
액세스 포인트 비밀번호
-
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
결과
메모리 문제
위의 코드 자체는 작동하지만,
다양한 기능을 넣으면 OS 오류 (MemoryError)가 발생합니다.
HTTPS 통신이 필요하기 때문에 여기에 메모리를 많이 사용하는 것 같습니다.
여러가지 시도해 보았습니다만, 이하의 방법으로 회피할 수 있을까 생각됩니다.
>>> import discord
메모리 문제
위의 코드 자체는 작동하지만,
다양한 기능을 넣으면 OS 오류 (MemoryError)가 발생합니다.
HTTPS 통신이 필요하기 때문에 여기에 메모리를 많이 사용하는 것 같습니다.
여러가지 시도해 보았습니다만, 이하의 방법으로 회피할 수 있을까 생각됩니다.
단일 스레드로 만들기
각 처리를 스레드로 만드는 것만으로도 메모리를 상당히 소비합니다.
또한 MicroPython에서는 Queue 등을 사용할 수 없습니다.
만약, socket 통신으로 thread간의 통신을 실시하면 이것도 메모리를 사용합니다.
전처리를 메인 루프로 실시하도록 만들어 주는 것이 좋을 것 같습니다.
능동적으로 가비지 수집을 실시
MicroPython의 가비리 콜렉션이 실행되는 조건은 메모리의 여유가 있는 일정값보다 작아진 경우입니다.
※빈 용량은 설정할 수 있습니다.
HTTPS 통신으로 큰 메모리 취득이 발생하기 때문에 그 직전에 능동적으로 가베레지 컬렉션을 실시하는 것이 무난합니다.
다음 코드로 구현할 수 있습니다.
import gc
gc.collect()
C 언어로 구현
MicroPython은 파일을 읽고 실행하기 때문에 고정 코드가 아닌 한 메모리에 불리합니다.
C 언어라면, 조금 더 메모리를 줄일 수 있다고 생각합니다.
이전에 같은 기기에서 FreeRTOS에서 이번과 같은 코드를 작성한 적이 있습니다.
특히 문제는 일어나지 않았다고 기억합니다.
기기 변경
원래 512KByte에서 실행하는 데 문제가 있습니다.
ESP32-WROVER 시리즈라면 4MByte RAM이 있습니다.
간단하지만 가격이 오르기 때문에 괴로운 곳입니다.
참고
Reference
이 문제에 관하여(ESP32 - MicroPython을 사용하여 Discord-Webhooks에 요청), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kotaproj/items/3b974425dfa2579afdbc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)