ESP8266用の環境構築の続きです。
7.MicroPythonをビルドしてみる
ExampleはMakefileが複雑すぎる、ということでESP8266用のMicroPythonをビルドしてみました。
1)ソースコードのダウンロード
gitでダウンロードしてきます。
~$ git clone https://github.com/micropython/micropython Cloning into 'micropython'... remote: Counting objects: 26530, done. remote: Compressing objects: 100% (341/341), done. remote: Total 26530 (delta 165), reused 0 (delta 0), pack-reused 26185 Receiving objects: 100% (26530/26530), 17.02 MiB | 1.85 MiB/s, done. Resolving deltas: 100% (18858/18858), done. Checking connectivity... done. ~$
2)ビルドしてみる
makeしてみます。
~$ cd micropython/ ~/micropython$ ls ACKNOWLEDGEMENTS bare-arm esp8266 logo stmhal unix CODECONVENTIONS.md cc3200 examples minimal teensy unix-cpy LICENSE docs extmod py tests windows README.md drivers lib qemu-arm tools ~/micropython$ cd esp8266/ ~/micropython/esp8266$ make Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity. mkdir -p build/genhdr CPP ../py/qstrdefs.h makeqstrdata ../py/qstrdefs.h qstrdefsport.h Generating build/genhdr/py-version.h mkdir -p build/lib/mp-readline mkdir -p build/py mkdir -p build/py/../extmod mkdir -p build/stmhal CC ../py/mpstate.c CC ../py/nlrx86.S : : CC ../py/../extmod/moduhashlib.c CC ../py/../extmod/modubinascii.c CC strtoll.c CC main.c CC esp_mphal.c esp_mphal.c:28:21: fatal error: ets_sys.h: No such file or directory #include "ets_sys.h" ^ compilation terminated. make: *** [build/esp_mphal.o] エラー 1 ~/micropython/esp8266$
ということで、ヘッダファイルが見つからないようで、エラーになってしまいました。
3)原因調査とMakefileの修正
このファイルはSDKの中に含まれているようです。
~$ find . -name "ets_sys.h" -print ./esp-open-sdk/esp_iot_sdk_v0.9.5/include/ets_sys.h
~/esp-open-sdk ディレクトリの下では、SDKのインストール時に sdk から esp_iot_sdk_v0.9.5 へのシンボリックリンクが張られているので、Makefileの冒頭にあるESP_SDKの定義を以下のとおり修正します。(コメントアウトしたのが修正前の内容)
#ESP_SDK = $(shell $(CC) -print-sysroot)/usr ESP_SDK = /home/xxx/esp-open-sdk/sdk
4)ビルドの続き
ビルドの続きを行います。
~/micropython/esp8266$ make Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity. Generating build/genhdr/py-version.h CC esp_mphal.c CC gccollect.c CC uart.c CC modpyb.c CC modpybpin.c CC modesp.c AS gchelper.s CC ../stmhal/printf.c CC ../stmhal/string0.c CC ../stmhal/pyexec.c CC ../stmhal/pybstdio.c CC ../lib/mp-readline/readline.c LINK build/firmware.elf text data bss dec hex filename 283992 1456 48664 334112 51920 build/firmware.elf Create build/firmware-combined.bin ('flash ', 48288) ('padding ', 17248) ('irom0text', 237208) ('total ', 302744) ~/micropython/esp8266$
無事にビルドができました。
8.esptoolの準備
ESP8266のROM書き換えのためのツールである esptool も ~/esp-open-sdk/esptool の下に準備されます。
ESP8266との接続の方法はこのディレクトリ内の README.md に記述されています。
## Protocol If GPIO0 and GPIO15 is pulled down and GPIO2 is pulled high when the module leaves reset, then the bootloader will enter the UART download mode. The ROM auto-bauds, that is, it will automagically detect which baud rate you are using. esptool defaults to 115200. esptool uses the RTS and DTR modem status lines to automatically enter the bootloader. Connect RTS to CH_PD (which is used as active-low reset) and DTR to GPIO0.
ということで、ESP8266とUSB-UARTモジュールの間を以下の結線をします。
- CH-PDをRTSに接続
- GPIO0をDTRに接続
- GPIO15をGNDへプルダウン
- GPIO2を3.3Vへプルアップ
この接続をしておけばesptoolが勝手にESP8266をブートローダモードに移行させてくれるようです。
<esptoolsの参考情報>
https://testpypi.python.org/pypi/esptool/0.1.0
9.Hack a Dayで発見した記事
Hack a DayでESP8266に書き込む方法が載ってました。