ESP32 MicroPython開発環境セットアップしてLチカまで


前回の記事「ESP-IDFをMacにセットアップしてESP32-DevKitCでLチカ」に続いてESP32ネタで、今回はMicroPythonによる開発手順を確認してみます。

開発環境のセットアップ手順は、MicroPython port to the ESP32に従って進めています。

この手順は、MicroPythonのファームウェアをソースからビルドしてESP32開発ボードに転送するものになります。MicroPythonファームウェアはESP32用のバイナリも配布されているので簡単に試したい方はバイナリ版 Firmware for ESP32 boards を利用したほうが良さそうです。

Toolchainのセットアップ

Toolchainのセットアップは前回のESP-IDFの記事「Toolchainのセットアップ」と同じです。

ESP32 toolchain for macOS を
https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz からダウンロードして、以下のようにファイルをespディレクトリに展開します。

$ mkdir -p ~/esp
$ cd ~/esp
$ tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz

参考: Setting up the toolchain and ESP-IDF

MycroPythonをクローン

espディレクトリにmicropythonリポジトリをクローンします。

$ git clone git@github.com:micropython/micropython.git

ESP-IDFのセットアップ

MycroPythonは、ESP-IDFの特定のリビジョンのみサポートしているので、ESP-IDFをクローン後、ハッシュを指定してチェックアウトする必要があります。
ハッシュ値は、環境変数ESPIDFがない状態で、MicroPythonのESP32ポートでmakeコマンドを実行すると確認できます。

$ cd micropython/ports/esp32
$ make
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
** WARNING **
The git hash of ESP IDF does not match the supported version
The build may complete and the firmware may work but it is not guaranteed
ESP IDF path:       /Users/hrendoh/esp/esp-idf
Current git hash:   9a26296a0e88a4c3ae27e9c848be970946fff87e
Supported git hash: 30545f4cccec7460634b656d278782dd7151098e
...

この記事を書いている時点では、ハッシュ値30545f4cccec7460634b656d278782dd7151098eのリビジョンをチェックアウトします。

$ cd ~/esp
$ git clone https://github.com/espressif/esp-idf.git
$ git checkout 30545f4cccec7460634b656d278782dd7151098e
$ git submodule update --init --recursive

Pythonパッケージのインストール

パッケージpyserialをインストールしておきます。

$ pip install pyserial

パス・環境変数の追加

Toolchainにパスを通し、環境変数ESPIDFにESP-IDFのパスをセットします。

.bash_profileなどに、以下の行を追加しておきます。

export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin
export ESPIDF=~/esp/esp-idf

MicroPythonのビルド

Building the firmwareの手順に従い、MicroPythonのファームウェアをビルドします。

micropythonリポジトリに戻り以下のコマンドを実行します。

$ cd ~/esp/micropython
$ make -C mpy-cross

続いて、ESP32 portが依存するBerkeley DB モジュールを初期化します。

$ git submodule init lib/berkeley-db-1.xx
$ git submodule update

ESP32用のMicroPythonをビルドします。

$ cd ports/esp32
$ make

PCとESP32開発ボードをUSBケーブルで繋ぎ、以下のコマンドでMicroPython ファームウェアをESP32へ書き込みます。

PORT=/dev/tty.SLAB_USBtoUART make erase
PORT=/dev/tty.SLAB_USBtoUART make deploy

ESP32が接続しているポートは、ls /dev/cu.*コマンドを実行して確認します。Macの場合は/dev/tty.SLAB_USBtoUARTが確認できます。
(参考: 「ESP32をPCにつなぐ」)

Python promptによる動作確認

Getting a Python promptではpicocomというダム端末エミュレータ?を使っているので試してみます。

Macの場合は、Homebrewでインストールできます。

$ brew install picocom

以下のように/dev/tty.SLAB_USBtoUARTを指定してpicocomを起動します。

$ picocom -b 115200 /dev/tty.SLAB_USBtoUART
picocom v3.1

port is        : /dev/tty.SLAB_USBtoUART
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready

>>> print('Hello')
Hello
>>>

プロンプトが表示されない場合は、Enterするとプロンプト>>>が表示されます。

[C-a] [C-x]でexitできます。

Lチカ

前回の記事の「Lチカ」を参考に、EPS32にLEDと抵抗をセットアップします。

Helloに続けて以下を入力するとLEDが点灯します

>>> import machine as m
>>> led = m.Signal(m.Pin(4, m.Pin.OUT))
>>> led.on()
>>> led.off()

BLE対応について

公式のMicroPythonリポジトリのESP32ポートはBLEに対応していません。
BLE対応版は、インターフェース2018年1月号 第4部 マイコンPython無線センシング実験室に紹介されており、執筆者の方がGithubを公開してくれているようです。https://github.com/nishimotz/micropython-esp32

参考: BLE対応版MicroPython for ESP32をmacOSでビルドしてみる

,