メインコンテンツまでスキップ

ESP32でDashボタンを作る(ESP32-DevKitC+MicroPython+IFTTT)

· 約3分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

ESP32-DevKitCでAmazon Dashボタンもどきを作ります。 C言語はわからないのでMicroPythonです。 簡単です。

準備

ESP32-DevKitC IFTTTアカウントとWebhookをトリガーとしたアプレット

開発環境

Windows 10 Visual Studio Code Putty Python 3.7(ストア版)

開発環境構築

Pythonの仮想環境作成

python -m venv .venv
.venv\Scripts\activate

ライブラリー導入

pip install esptool adafruit-ampy

ESP32にMicroPythonファームの導入

http://micropython.org/download#esp32 からファームウェアをダンロードします。 (2019/12/29の最新版はesp32-idf3-20191220-v1.12.bin)

esptool --port COM4 erase_flash
esptool --chip esp32 --port COM4 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

COM4は環境に合わせて修正します。

これでMicroPythonのファームウェアが導入でき、シリアル接続をすると対話インタプリタモード(REPL)でMicroPythonがESP32上で実行できます。

Puttyで接続する場合はCOM4ポートにSpeed115200を指定し、シリアル接続します。

コメント 2019-12-29 143339.png

Dashボタンプログラムの導入

MicroPythonはREPLで実行もできますが、ソースコードをESP32側に導入することでも実行できます。boot.pymain.pyというファイルが標準で用意されていて、boot.pyのあとでmain.pyが呼ばれる仕組みのようです。 main.pyを書き換えます。

main.py
wifi_ssid = '[Wi-Fi SSID]'
wifi_password = '[Wi-Fi パスワード]'
get_url = '[IFTTTのWebhook URL]'

def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(wifi_ssid, wifi_password)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())

try:
do_connect()

import urequests
r = urequests.get(get_url)
finally:
pass

import machine
print('deepsleeping..')
machine.deepsleep()

IFTTTのWebhookは予め準備しておいてください。 処理の流れとしては

  1. 電源が入る
  2. Wi-Fi接続
  3. IFTTTにリクエスト送信
  4. ディープスリープに入る

となってます。

肝心のDASHボタンのボタンは、基板上に用意されているENボタンを使います。 ボタンが押されたらリセットし、頭から処理をするだけです。処理が終わったらディープスリープに入って省電力モードに入るとうわけです。

簡単!

電池の持ちは実験してみようと思います。