2018年4月28日土曜日

[ESP32]Window上でmicropythonをビルドする(デュアルコア対応化)

ESP32ってデュアルコアなのにビルド済みのMicropython for ESP32はシングルコアしか使っていないのが分かった。。(2018年4月時点)
なので自前ビルドを実践する事にした。


Step1.環境一式ダウンロード
https://esp-idf.readthedocs.io/en/latest/get-started/windows-setup.html
600MB弱のファイルをダウンロードして任意のフォルダに展開する。
例:D:\msys32


Step2.環境構築
d:\msys32\mingw32.exeを起動
$ cd
$ mkdir -p esp
$ cd esp
$ mv esp-idf esp-idf.old
$ git clone --recursive https://github.com/espressif/esp-idf.git


Step3.micropythonのコードをクローン
$ pacman -S python2
$ curl https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py
$ pip install pyserial

$ mv /mingw32/bin/envsubst.exe /mingw32/bin/envsubst.exe.del
$ pacman -S gettext
2$ vim ~/.profile
最後の行に
 export IDF_PATH=~/esp/esp-idf
 export ESPIDF=$IDF_PATH
を追加。
$ source ~/.profile

$ git clone --recursive https://github.com/micropython/micropython.git
$ git clone --recursive https://github.com/micropython/micropython-lib.git
https://github.com/micropython/micropython/blob/master/ports/esp32/mpthreadport.c
の136行目
TaskHandle_t id = xTaskCreateStaticPinnedToCore(freertos_entry, name, *stack_size / sizeof(StackType_t), arg, priority, stack, tcb, 0);
これを
TaskHandle_t id = xTaskCreateStaticPinnedToCore(freertos_entry, name, *stack_size / sizeof(StackType_t), arg, priority, stack, tcb, 1);
にする。

※Windowsだとシンボリック問題が発生するので、置換マクロ組んで全部置き換えました。。


Step4.ビルド開始
$ cd ~/esp/micropython/ports/esp32
$ make

★ここでHASHが異なるからビルドできないってエラーメッセージが表示されたら
ハッシュコードの部分は出力メッセージのに書き換えて
$ cd ~/esp/esp-idf
$ git checkout 3ede9f011b50999b0560683f9419538c066dd09e -b micropython
$ git submodule update

$ cd ~/esp/micropython
$ make -C mpy-cross
$ cd ~/esp/micropython/ports/esp32
$ make
$ make erase
$ make deploy

消去や書込めない場合、
$vim Makefile
ポート名は/dev/ttyS0 
など、各自環境に合わせて要調整。




諦めてビルド済みのを使う場合は、


ここからバイナリイメージをダウンロードしてきて書込み実行。

$ easy_install -U pip
$ pip install esptool
$ esptool.py --port /dev/ttyS0 --baud 460800 write_flash --flash_mode dio --flash_size=detect 0x1000 esp32-20171006-v1.9.2-276-ga9517c04.bin


追記:
Ubuntu on Windows 上で環境構築した場合、
Makefileの設定で

ポート名は、/dev/ttyS1 = COM1になります。
通信速度はデバイスマネージャに記載した通信レートを指定します。


以上!

コメントを投稿

Androider