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をあてるのが簡単かな。