Arduino core for ESP8266
のんびりと進行しているwifiで操作する電動雲台の話だが、Arduino ADKのマイコンで雲台駆動用のプログラムを動かすのではなくて、ESP-WROOM-02自体にプログラムを転送し、httpクライアントとの対話やサーボの駆動を行うことにした。
そのためには、ESP8266モジュールに特化したプログラムを書くことは当然に思われるにしても、プログラムをESP8266EXのマイコン用にコンパイルしたり、コンパイル結果のバイナリコードをボードに転送したりする必要がある。特殊なボードやマイコンのための開発環境を整えていくという作業工程は昔からあるものなのだけど、素人がスペックシートを読みながら手掛けようとすると、ちょっと途方に暮れてしまいそうなところでもある。
幸いなことに、よく使われているArduino IDEに機能やライブラリを追加することによって、まるでArduinoボード用のスケッチを書くような具合にESP8266の開発を行おうというプロジェクトがgithubにあったので、これを利用させてもらうことにした。このサイトのREADME.mdに書かれている手順のうち、Arduino IDEのボードマネージャーを使う手順にしたがってソフト側の開発環境を構築した。
Arduino IDEへの機能追加
https://www.arduino.cc/en/Main/Software から、2016年1月半ばの時点での最新版である、Arduino 1.6.7をダウンロードしてインストールを実施した(Windows7のPCに導入)。インストール時には、USBドライバを導入するかどうかも問われるので、そのまま導入した(従来から利用しているArduino IDEのリビジョンがちょっと古めでもあったので、一度アンインストールしてから導入し直した)。
導入できたらArduino IDEを開始し、ファイルメニューの環境設定を開き、Additional Boards Manager URLs: という入力フィールドに、 http://arduino.esp8266.com/stable/package_esp8266com_index.json というURLを入力し、OKをクリックする。
次に、ツールメニューのマイコンボードを選択すると、このIDEが対応しているマイコンボードがズラッと表示される。その中から、たぶん一番上にあるボードマネージャーを選択すると、同じ名前のウィンドウが開く。ウィンドウ内は各種ボードのリストになっているので、(たぶん)一番下にある、esp8266 by ESP8266 Community をマウスでクリックして選択する。
ここでインストールボタンをクリックすることで、先にAdditional Boards Manager URLsに入力したサイトから、必要なパッケージをダウンロードし導入してくれる。
ESP8266 coreの導入後
たとえば、ツールメニューにおいて開発対象のマイコンボードとして “Arduino Mega ADK”を選択している場合には、以下のように表示される。
この一覧内に開発対象とする製品があれば選択すればよいのだけど、秋月電子で売っているESP8266EXベースのESP-WROOM-02 を用いて自前で回路を書いたようなものは当然一覧に出てこない。とりあえず“Generic ESP8266 Module” を選ぶと以下のようになり、構成を決定するためのオプションパラメータがいろいろと表示されるようになる。
まだ、ESP-WROOM-02とPCを接続していないので、通信用ポートはCOM1となっている。
パラメータとして何を選択すべきなのか迷うところだが、今回想定している開発時の構成(PCからのプログラム転送やモニタ用にUSBで接続)、秋月電子の製品ページにリンクされているデータシートの内容、AT+RSTに対する応答文字列といった情報から拾っていって以下のようにした。
- CPU動作周波数は80MHz.
- フラッシュの周波数は40MHz (AT+RSTの応答で判断)
- フラッシュモードはQIO(AT+RSTの応答で判断)
- プログラムのアップロード方式はOTA(Over The Air)ではなくSerialを選択
- フラッシュサイズは1M(64K SPIFFS)
- Reset Methodは”ck”
フラッシュサイズについては実際にどれだけ実装されているのか、はっきりしたデータが見つけられなかったのだが、出荷時のATコマンド用ファームウェアが有効な状態でAT+RSTを与えたとき、以下のような出力だった。
1 2 3 4 |
2nd boot version : 1.4(b1) SPI Speed : 40MHz SPI Mode : QIO SPI Flash Size & Map: 8Mbit(512KB+512KB) |
最後の行に8Mbitsとあるから1MBytesじゃないの?ということで、そのようにした。
なお、”SPIFFS”とは、”Serial Peripheral Interface Flash File System” だろうか。おそらくWROOM-02内部のフラッシュメモリ内に実現するファイルシステムなのだろう。とりあえず使わなさそうなので、小さい方の値にした。
※ 追記
実際に 開発用のハードウェアを作ってサンプルスケッチ(ESP8266 CheckFlashConfig)を走らせてみたところ、Flash Sizeに間違いがあることが分かった。
1 2 3 4 5 6 7 |
Flash real id: 001640A1 Flash real size: 4194304 Flash ide size: 1048576 Flash ide speed: 40000000 Flash ide mode: QIO Flash Chip configuration wrong! |
上記のように表示されたことから、フラッシュサイズは4MBytesが正解のようである。4M (1M SPIFFS)としてコンパイル~実行させてみたところ、上記の”configuration wrong”ではなく、”Flash Chip configuration ok.”と表示されるようになった。
中身のないsetup()とloop()が提示された空のスケッチに対して、Generic ESP8266 Moduleを選択した状態でスケッチメニューの検証・コンパイルを選んでみると以下のようになった。
1 2 |
最大958,448バイトのフラッシュメモリのうち、スケッチが198,620バイト(20%)を使っています。 最大81,920バイトのRAMのうち、グローバル変数が33,030バイト(40%)を使っていて、ローカル変数で48,890バイト使うことができます。 |
実質的に何も書いていなくても、プログラム格納用のフラッシュメモリのうちの約200Kバイト(約20%)と、変数領域のうちの33Kバイトほど(約40%)消費されるようである。
きょうのまとめ
どうやらArduino IDEを使ってArduinoボード用と同様にプログラム(スケッチ)を書き、コンパイルした結果をUSB接続経由でWROOM-02に送り込めばよさそうである。
また、ESP8266の各種機能を活かすためのライブラリも同時に組み込まれていた。
各種ライブラリのソースコードが見たくて、PCの中を探したところ、Windows 7 のPCでは、ユーザーフォルダとでもいうのか、”C:\Users\[ログオンユーザー名]\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.0.0\libraries” の下に入っていた。なかなかこういうフォルダを使わないので探してしまったが、Linuxならば、~/Arduino15… ということで自然かもしれない。
開発環境がすんなり決まったので、ESP-WROOM-02をUSB経由でPCに接続してプログラム(スケッチ)を転送したり、シリアルモニタが使えるようにする回路をブレッドボード上に実現してみることにする。