前回の記事「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