2023年7月25日火曜日

ESP32ボードのMicroPython開発環境構築(Thonny使用)

micropython.md

ESP32ボードのMicroPython開発環境構築(Thonny使用)

秋月で購入したESP32-DevKitC-VE ESP32-WROVER-E開発ボードをMicroPythonで開発するための環境を整えた。
IDEは選択肢がいくつかあるが、とりあえず一番シンプルにできそうなThonnyを用いることにした。

環境

使用ボード:ESP32-DevKitC-VE ESP32-WROVER-E開発ボード 8MB
PC:Windows10 (Python3.10インストール済)

Pythonへesptoolをインストール

ファーム書き込みのためのツールesptoolをインストールした。pipで簡単にインストールできるが現存の環境を汚したくないので念のため仮想環境下にインストールすることにした。

py -m venv esptool .\esptool\Scripts\activate pip install esptool

ESP32へMicroPythonファームウェアを書き込み

MicroPython公式サイトにアクセスし使用するボードに適合するファームウェアをダウンロードした。

(ベンダーなどから絞り込んで適合しそうなのを選択)
今回のボードにはEspressif社のESP32-WROVER-Eが載っているのでこれを選択。
(現時点での最新は1.20だった)
WROVER用のファームウェアもあったがナイトリービルド(≒開発中)しかなかったのでノーマルのものを選択した。

ボードをUSBケーブルでPCに繋ぎ、デバイスマネージャにてCOM番号を確認した。(今回はCOM8で認識されていた。以前にCP210x用ドライバを入れておいたのですんなり認識した。)

下記コマンドでボード上のフラッシュの中身を削除した。(もちろんesptoolが入っている仮想環境下で) 数秒かかった。

esptool.py --port COM8 erase_flash

以下にその時の出力を残しておく。

esptool.py v4.6.2 Serial port COM8 Connecting...... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting..... Detecting chip type... ESP32 Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: xx:xx:xx:xx:xx:xx Uploading stub... Running stub... Stub running... Erasing flash (this may take a while)... Chip erase completed successfully in 6.9s Hard resetting via RTS pin...

Chip erase completed successfully in 6.9sと出力されていたのでちゃんと削除できているはず。

下記コマンドでファーム書き込み。(ファームをカレントディレクトリに移動しておくか、cdコマンドでファームがある場所に移動しておく) 約90秒かかった。

esptool.py --chip esp32 --port COM8 write_flash -z 0x1000 esp32-20230426-v1.20.0.bin

以下にその時の出力を残しておく。

esptool.py v4.6.2 Serial port COM8 Connecting.... Chip is ESP32-D0WD-V3 (revision v3.0) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: xx:xx:xx:xx:xx:xx Uploading stub... Running stub... Stub running... Configuring flash size... Flash will be erased from 0x00001000 to 0x0017ffff... Compressed 1566528 bytes to 1034676... Wrote 1566528 bytes (1034676 compressed) at 0x00001000 in 91.6 seconds (effective 136.7 kbit/s)... Hash of data verified.

これでESP32にMicroPythonのファームを導入できたはずだ。

Thonnyのインストール

Thonny公式サイトからダウンロードしてインストールした。
既にPython自体はインストール済だが迷った末Installer with 64-bit Python 3.10と書かれたものをインストールした。(今のところ問題ない)

(適宜自分のOSに合わせたものをダウンロードする。)
インストール時は特に変わったオプションなどはなかった。

動作確認

Thonnyを起動し(初回に言語選択ができた。日本語もあった!)、ツール→オプション→インタプリタにある「どのインタプリタを使用してコードを実行しますか?」はMicroPython(ESP32)を選択し、「ポートまたはWebREPL」はESP32のポート(今回はCOM8)を選択しOKをクリックした。

プログラムが書き込まれていないので、画面下部のシェルで対話モードのPythonが起動した。(ボードをうまく認識しないときは上部にあるSTOPアイコンを押すとESP32がリブートされ認識されるっぽい。)
これはPC上のPythonではなくESP32上のMicroPythonが動作しているようだ。

(ちゃんと動いていそうだ。)
ESP32に既にMicroPythonコードを書き込み済で動作中の場合は対話モードは使用できないようだ。シェル上でctrl+cをするとESP32で動作中のプログラムが強制終了し、対話モードが使用できるようになった。

Lピカ(会話形式でGPIO制御)

ボードのGPIO13にLEDと抵抗を繋ぎ下記コマンドを実行するとled_0(1)を実行時LEDが点灯、led_0(0)を実行時消灯した。

from machine import Pin led_0 = Pin(13,Pin.OUT) led_0(1) led_0(0)

I/O制御などボードの主な動作はmachineからimportして使うようだ。

Lチカ(ボードにプログラムを書き込んで実行)

画面上側のエディタにプログラムコードを記述し、保存→MicroPythonデバイス→ファイル名を「main.py」にして書き込んだ。一瞬で書き込めた。
書き込み後、ボードのENボタンを押してリセットorケーブル抜き差しで再起動することでプログラムが動作し1秒ごとに(2秒周期で)LEDが点滅した。
下記に今回のプログラムコードを示す。

import time from machine import Pin led = Pin(13, Pin.OUT) while True: led(1) time.sleep(1) led(0) time.sleep(1)

プログラムを書き換える際はシェル上でctrl+cでプログラムを止めて(対話モード起動状態にして)から同手順を踏むことでファイルを書き込める。

ESP32内のMicroPythonの動きとしては電源投入後boot.pyを実行し、boot.py完了後にmain.pyを実行するという動きをするらしい。
Arduinoでいうsetup()がboot.py、loop()がmain.pyにあたるようなイメージか。ただしloop()と違いmain.pyでループさせるには自分でwhileでループ記述をする必要がある。(今のところboot.pyの存在意義があんまりわからない)

今後

まだLチカしかしていないのでアナログ入出力、I2CやSPI、UARTの利用、外部ライブラリの導入方法などを調べたい。

0 件のコメント:

コメントを投稿