ESP-EYE、サンプルソフトで動作確認、そしてビルド環境をセットアップと2回作業をしたのですが、未だに自分で書いたプログラムでLチカさえも動かせてません。ESP-IDFの敷居が高いです。そこで今回は極端なショートカットでLチカを動かしてみました。ご存じESP32用genericポートを使えば3分でLチカ動いてしまう。
※「MicroPython的午睡」投稿順 Indexはこちら
Espressif SystemsのESP-EYE、カメラとマイクロフォンを搭載したAIoTを標榜する小型ボードです。ESP-WHOという顔認識などができるライブラリを使ってアプリを作れるのが売りです。
開発環境は ESP32-IDF で行う必要があります。以下の投稿にて手こずりながらもPC上でESP32-IDFでのビルド(その時のターゲットボードは 定番のDevKitC)ができるようになりました。
トホホな疑問(42) ESP32-IDF、Hello world!でチョイとハマる
一応、開発環境ができたので、ESP-WHOをクローンしてサンプル・ディレクトリの中のサンプルをビルドしてみたところ、問題なくビルド出来ているようでした。ESP-EYEへの書き込みもノーエラーです。仮想端末で接続してみると確かに該当のオブジェクトが書き込まれて動作しているみたい。でも使い方が良く分からないです。
とりあえず伝統に乗っ取り「Lチカ」から始めるか、と考えたのです。しかし、先が長そうです。ESP32-IDFのAPIを調べながらプログラムを書く必要があります。ESP32-IDFからであると、FreeRTOSのタスクがモロ見えのレベルです。敷居高杉くん。だいたいビルドも荘厳で、裏ではninjaやらcmakeやらが暗躍しており、私の古くて遅いマシンではかなり時間がかかります。調査と勉強に時間がかかるので、とても今日中にはLチカにたどり着くまい、と。
そこで思いつきました。ESP32用のgenericポートのMicroPython載せれば動くんじゃね。MicroPython載せればLチカなど一撃じゃね、と。悪魔の囁きか。
とりあえずESP32-IDFのオブジェクトの書き込みもできるのだから、MicroPythonを書き込んでも元に戻せるだろ~ということで、今回はやってみました。やっつけでご乱心。
MicroPythonのインストール
MicroPythonのインストールには、何時もお世話になっております Thonny (Python用の開発環境、初心者向き?)を使いました。Thonnyはマイコン上のMicroPythonのホスト側のフロントエンドとしても動作するだけでなく、マイコンへのMicroPythonインタプリタの書き込みにも対応しているのです。デバイスを接続してCOMポートを確認後、optionsメニューから使用するPythonとCOMポートを指定します。
その時に、右下にある Install or update firmware のところをクリックして、書き込みするバイナリファイルを指定します。こんな感じ。
上で指定しているのが、ESP32用のMicroPython、generic ポートのバイナリです。特定のハードウエア構成に特化しない、ESP32であれば走る筈の汎用の処理系。その辺の説明はこちらに。
指定した後はインストールボタンを押せば、1分もしないうちにMicroPythonがインストールされ、Thonnyから制御できるようになります。らくちん。
さっそくLチカ
定番のLチカのコードをわざわざ記することもないでしょうが、LEDのつながっているピンなどはESP-EYEに合わせる必用があるので、以下にスクリプト全文を載せておきます。
from machine import Pin import time led0 = Pin(21, Pin.OUT) led1 = Pin(22, Pin.OUT) def main(): loopCounter = 0 while loopCounter < 360 : loopCounter += 1 if (loopCounter % 2) == 1: led0.on() led1.off() else: led0.off() led1.on() time.sleep(1) if __name__ == "__main__": main()
Espressif社のドキュメントダウンロードのページで、ESP-EYEの回路図が公開されているので、それ見ればわかりますが、
-
- 21番ピンが赤色LED(USBを下にしてカメラに向かって右側)
- 22番ピンが白色LED(同じく左側)
です。
走らせました。目出度く紅白のLEDが点滅をばいたしております。やっぱりMicroPythonは楽。とりあえずカメラとか一通りMicroPythonで慣れてから敷居の高いESP32-IDFに戻るか。。。