いっぺーちゃんの いろいろやってみよ~

ESP32でmicropython

天邪鬼ないっぺーちゃんはpythonを避けてEspruinoでごちょごちょやってきましたが、やはりpythonも試しておこうということで、micropythonを試してみることにします。

 

micropythonのビルドは、Windowsで色々ハマるより、Ubuntu仮想マシンで実行するのがオススメです。
私の環境はこんな感じです。
環境:Windows10 Home(64bit) + VirtualBox + Ubuntu(64bit) 16.04 LTS

インストールについては、このあたりでどうぞ。
(バージョンちょっと違うけど、手順は似たようなもんです)

 特に、sambaの設定をしておくと、WindowsからネットワークドライブとしてUbubtuのディスクが見えるので使い慣れたエディタが使えて便利です。

 

以下、ツールのインストールからビルド、書き込みまでの手順です。

使用するツール類をインストールします。

sudo apt-get install -y git wget make libncurses-dev flex bison gperf python python-serial

シリアルターミナルにgtktermを使いたい場合はインストールします

sudo apt-get install -y gtkterm

使わないっぽいけど入れておいてもいいかな?(たぶんesp-idfのサンプルをmakeするときに必要?)

sudo apt-get install -y autoconf  libtool

シリアルポートを使用するための設定をします。これをやらないとシリアルポートを使おうとしたときに「ぱーみっしょんでないど~」と怒られます。

sudo gpasswd -a <<ユーザ名>> dialout 

これを有効にするには一旦ログアウトして再ログインが必要ですが、後でやるのとまとめてもOKです。

 

作業ディレクトリを作成します。以降、この作業ディレクトリとして書いてありますので、自分の環境に合わせて読み替えてください。

mkdir -p /work2/esp
cd /work2/esp

コンパイラをインストールします。下記は64bit版です。32bitOSでは動きません。

wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
tar xzvf xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz

esp-idf(ESP32のドライバ)を取得します。--recursiveの指定を忘れると悲しいことになるので注意してください。

git clone https://github.com/espressif/esp-idf.git --recursive

micropythonのソースを取得します。こっちも--recursive忘れないように。

git clone https://github.com/micropython/micropython-esp32.git --recursive

micropythonのソースは Sun Jul 30 19:44:58 2017 -0400 にcommitされたもの( ハッシュ値は 79feb95670311eee5ffb61f1dfd8183901d5e441 ) で確認しています。

~/.profile に以下の設定を追加します。

# for ESP32
export PATH=$PATH:/work2/esp/xtensa-esp32-elf/bin
export IDF_PATH=/work2/esp/esp-idf

# for Micropython
export ESPIDF=/work2/esp/esp-idf

.profileの設定を有効にするため、一旦ログアウトして再度ログインしてください。

 

再ログインしたら、micropythonのbuildにかかりましょう。

まず、micropythonクロスコンパイラを生成します。

cd /work2/esp/micropython-esp32/mpy-cross
make

必要なesp-idfのバージョン(HASH値)を確認します。バージョンが異なっているとmakeに失敗したり、うまく動作しなかったりすることがあります。

cd /work2/esp/micropython-esp32/esp32
make idf-version
== 結果 ==
ESP IDF supported hash: 4ec2abbf23084ac060679e4136fa222a2d0ab0e8

このHASHを使ってesp-idfをチェックアウトします。念のため、branch作っておきます。

cd /work2/esp/esp-idf
git checkout 4ec2abbf23084ac060679e4136fa222a2d0ab0e8 -b micropythn

submoduleもupdate します。これ重要!! やらないとsubmoduleと本体のバージョンが合わなくなることがあります。

git submodule update

 

ESP32用 micropython をbuildします。

cd /work2/esp/micropython-esp32/esp32
make

buildが完了したらプログラムを書き込むためESP32を接続します。

ESP32は/dev/ttyUSB0につながっているものとします。それ以外につながっているときは、PORT=/dev/ttyほにゃらら で指定してください。

現在書き込まれているプログラムを消去します。Flash全体を消去しますので、すべてのデータが消去されます。

make erase

buildしたプログラムを書き込みます。

make deploy

Flashの書き込みで失敗する場合は、
VirtualBoxでは 一旦仮想マシンをシャットダウンし、VirtualBoxマネージャで 設定→USB の「USB 3.0(xHCI)コントローラ」を選択してから再起動してみてください。

 

ターミナルソフトを起動します。

gtkterm&

Configuration → Port でポートの設定をします

Port /dev/ttyUSB0
BaudRate 115200
Parity none
Bits 8
Stopbits 1
Flow control Xon/Xoff

 

を選択してOK

Configuration → Save configuration で設定を保存します
Configuration name にdefaultを指定し、OK
overwrite?と聞かれるのでOK

defaultに保存しておけば、次回からは設定不要です。

ターミナルソフトを起動してからESP32をリセットしないと、通信がうまくいかないようです。
ターミナルソフトを起動した後、ESP32のリセットボタンを押してください。

 

gitで最新版のファイルに差し替えるには、git pull するのが普通だけど、
今あるディレクトリを~.oldとかにリネームしておいて、再度新しくgit clone した方が間違いが少ないと思われます。(submodule関連がとくにややこしい)
開発に参加しているわけではないので、それで事足ります。
自分が修正した部分は、あらかじめgit diff を保存しておいて、新しいディレクトリでpatchをあてるのが簡単かな。