こんばんは。
最近、Facebook や Twitter で話題になっていた、ESP-WROOM-02 ( ESP8266 ) のフラッシュメモリサイズが 2MB だったという件について、調べてみたいと思います。
それは、スイッチサイエンスさんの以下の記事が発端でした。
ESP-WROOM-02のFlash ROMが2MBになっていた(減ってた)
これについては、ESP8266/ESP32環境向上委員会 やTwitterの情報によると、実はかなり以前からそういう情報があったようです。
要するに、ボードの型番が全く同じなのに、異なる仕様になっていたということのようです。
ESP-WROOM-02 をメーカーに発注する際に、4MB を指定しないと2MB で納品されてしまうことがあるそうです。
ホンマかいな・・・。
ということで、私もたまたま古いデータシートがあったので見てみました。
2015年6月2日 ESPRESSIF社発行の ESP-WROOM-02 データシート( Version 0.3 )は下図の様になっていました。
では、2016年12月発行( Version 2.1) のデータシートではどうなっていたかというと、以下のようになっていました。
ホンマでした。
データシートが日々バージョンアップされているので、ちょっと不思議に思っていましたが、まさかフラッシュメモリまで変更になっているとは思いませんからね。
でも、ふと記憶をたどってみると、そんな情報が2016年に流れていたような気がしないでもないです。
正直言って、これは無茶苦茶だと思います。
何でこういう仕様変更をするのか、理解に苦しみますね。
データシートを見ない方が悪いと言われればそれまでですが、さすがにスイッチサイエンスさんに同情してしまいます。
ということで、手持ちの ESP-WROOM-02 をチェックすべく、チップ情報やその他の知りたい情報を列挙するスケッチを組んでみました。
サンプルスケッチには無い情報も表示させてみました。
Chip ID や、SDKバージョン、ヒープメモリサイズ、スケッチメモリサイズ、MACアドレスなど、私が個人的に知りたい情報を詰め込んでみました。
因みに、Arduino IDE のみのチェック方法です。
(ESP-WROOM-32 についての情報は、後日別記事で紹介します)
ESP-WROOM-02 ( ESP8266 )開発ボードはスイッチサイエンスさんの以下のボードで動作確認しています。
これの使い方は以下のページを参照してください。
ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介
事前にArduino IDE に ESP8266ボードをインストールしておく
予め、Arduino IDE に ESP8266 ボードをインストールしておきます。
Arduino IDE は 1.8.4 で動作確認取れています。
インストール方法は以下のページを参照してください。
Arduino IDE に Stable ( Staging )版 ESP8266 ボードをインストールする方法
チップ情報取得スケッチの入力
では、以下のスケッチを入力してみてください。
一番下のコメント欄で、「つ★」さんから Arduino IDEメニューの「Flash Size」設定に左右されない Flash Size 表示方法を教えていただきました。
「つ★」さん、有益な情報ありがとうございます。
m(_ _)m
それに伴い、スケッチを変更しました。
(2017/10/14)
【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)
#include <ESP8266WiFi.h> void setup(void) { delay(1000); Serial.begin(115200); Serial.println(); Serial.println("-----ESP-WROOM-02 ( ESP8266 ) Chip Infomation -----"); Serial.println(); Serial.print("Core Version = "); Serial.println(ESP.getCoreVersion()); Serial.print("CPU Frequency = "); Serial.print(ESP.getCpuFreqMHz()); Serial.println(" MHz"); Serial.print("ChipID = "); Serial.println(ESP.getChipId(), HEX); //MACアドレスの下位3バイト Serial.print("Flash ID = "); Serial.println(ESP.getFlashChipId(), HEX); Serial.print("SDK version = "); Serial.println(ESP.getSdkVersion()); Serial.print("Boot version = "); Serial.println(ESP.getBootVersion()); Serial.print("Boot Mode = "); Serial.println(ESP.getBootMode()); Serial.print("Flash Chip IDE Size = "); Serial.print(ESP.getFlashChipSize()); //Arduino IDE 設定の Flash Size になる Serial.println(" byte"); Serial.print("Flash Chip Real Size = "); Serial.print(ESP.getFlashChipRealSize()); //ESP-WROOM-32 内蔵最大 Flash Size になる Serial.println(" byte"); Serial.print("Flash Frequency = "); Serial.print(ESP.getFlashChipSpeed()); Serial.println(" Hz"); String mode_str; switch( ESP.getFlashChipMode() ){ case 0: mode_str = "QIO"; break; case 1: mode_str = "QOUT"; break; case 2: mode_str = "DIO"; break; case 3: mode_str = "DOUT"; break; case 4: mode_str = "Unknown"; break; default: break; } Serial.println("Flash Chip Mode = " + mode_str); Serial.print("Free Heap Size = "); Serial.println(ESP.getFreeHeap()); Serial.print("Free Sketch Size = "); Serial.println(ESP.getFreeSketchSpace()); Serial.print("Sketch Size = "); Serial.println(ESP.getSketchSize()); Serial.println(); uint8_t mac0[6]; WiFi.macAddress(mac0); Serial.printf("WiFi StationAP Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac0[0], mac0[1], mac0[2], mac0[3], mac0[4], mac0[5]); uint8_t mac1[6]; WiFi.softAPmacAddress(mac1); Serial.printf("WiFi SoftAP Mac Address = %02X:%02X:%02X:%02X:%02X:%02X\r\n", mac1[0], mac1[1], mac1[2], mac1[3], mac1[4], mac1[5]); } void loop() { }
コンパイル書き込み実行
コンパイルする前に、下図の様に「ツール」メニューの「 Flash Size 」を4MBにしてください。
このスケッチは、Arduino core for ESP8266 の設定で変わりますので、必ず最大値でコンパイルしてください。
ESP-WROOM-02 の実装メモリが 2MB だったとしたら、おそらくこのメニューに 4MB は表示されないのではないかと思われます。
では、その設定が終わったら、スケッチをコンパイル書き込みしてください。
シリアルモニターを 115200 bps で起動して、こんな感じに表示されればOKです。
スケッチサイズ等は、Arduino IDE のコンパイルメッセージ表示とは多少異なりますが、概ねの目安ができますのでこの情報は良いですね。
まとめ
ハードウェアを販売している業者の方々は、今回の件は大変だろうと思います。
ホントに同情します。
このことは ESP-WROOM-32 でも有り得ることなので、十分注意しないといけないですね。
後日、ESP-WROOM-32 のチップ情報もこのブログで紹介する予定です。
ということで、今回はここまでです。
ではまた・・・。
Amazon.co.jp 当ブログのおすすめ
コメント
スケッチの公開ありがとうございます。
残念ながら実装されているチップの情報ではなく、ビルドするときのIDEオプション設定が反映されてしまっているようです。「ツール」メニューの Flash Size: オプションに2M(1M SPIFFS)を選んでビルドすると、
Flash Chip Size = 2097152 byte
となり、同じもので Flash Size: を4M(3M SPIFFS)を選んでビルドしなおすと、
Flash Chip Size = 4194304 byte
になりました。
E直虎さん
記事をご覧いただきありがとうございます。
すいません。
「ツール」メニューの設定を明記するの忘れてました。
それと、実装メモリのサイズではないですね。
Arduino IDE の設定で変わってしまいます。
最大値設定でコンパイルしないと意味ないですね。
早速記事を修正したいと思います。
ご指摘ありがとうございました。
m(_ _)m
修正いたしました。
失礼いたしました。
m(_ _)m
いろいろ参考にさせてもらっている つ★ です.
この件ですが,Arduino IDEのESP8266のサンプルにある
「CheckFlashConfig」を使えばラクチンでした♪
このスケッチだと,設定しているメモリ情報の正誤まで
判定してくれ,けっこー便利ですんで……いかがでしょう?
つ★ さん
記事をご覧いただき、ありがとうございます。
これは知りませんでした。
というか、Arduino IDE に ver 2.3.0 の ESP8266ボードをインストールしただけでは、サンプルスケッチが古いんですよね。
GitHub 上では最新版になっていて、そのサンプルスケッチには
ESP.getFlashChipRealSize();
という関数が追加されていましたね。
実際、これでやったら、確かに IDE の Flash サイズを変えても、4MB と表示されましたね。
いや~・・・、やっぱり最新版の Arduino core for ESP8266 を使うべきだなぁと改めて思いました。
とても有益な情報を教えていただき、ホントにありがとうございました。
m(_ _)m
ずっとArduinoを使っている者です。
こちらのサイトを見かけてESP-WROOM32に興味を持ち始めたのですが、メモリが4Mか2Mかは買ってみるまで分からないのでしょうか?
古い記事宛の返信で恐縮ですがご教示いただければ幸いです。
タコツボさん
記事をご覧いただき、ありがとうございます。
この記事はESP8266用ですが、ESP32-WROOM-32に興味をお持ちということですね。
ESP8266をモジュール化して、技適を取得して日本で使えるモジュールがESP-WROOM-02ですが、現在流通している多くのものが2MBフラッシュだと思います。
対して、ESP8266の上位バージョンESP32をモジュール化して、技適を取得したものがESP32-WROOM-32です。
日本の電波法をクリアした、ESP32系のものは、ESP32-WROOM-32の他に、M5Stackも技適を取得しています。
ESP32系の流通は殆どが4Mのフラッシュだと思います。
2MBの可能性があるのはESP-WROOM-02ですので気を付けてください。
販売元でフラッシュのサイズを明記していないところは、疑った方が良いです。
スイッチサイエンスさんや秋月電子通商さんで販売しているものはちゃんとフラッシュサイズを明記していますので、そういう信頼できる販売店から購入すると良いと思います。
得体のしれない販売店で買うのは避けた方が無難です。
因みに、ESP32-WROOM-32を買う場合、開発ボードを買うとすぐに使えて便利です。
例えば、ESP32-DevKitC や ESPr Developer 32、またはM5Stack Basicなどがおススメです。
早速のお返事ありがとうございます。
実は「02」と「32」の違いを投稿後に把握した次第です。
お店選びのご助言感謝します。
つい送料などを節約して安い物を買いがちですが、
数百円で思わぬ悩みを抱えずに済むと思えば安いことと思います。
どの機材をどこで選ぶかもう少し情報収集してみます。
そうでしたか。
02の方ですね。
私は2Mのサイズではとても足りないので、早々にESP32に移行して、ESP8266の開発は今は全くやっていません。
ESP32を使うと、もうESP8266には戻れなくなりました。
どうやら大は小を兼ねそうなので、ESP32で暗中模索してみます。
ありがとうございました。
いえいえ。
メモリを沢山使いそうならば、多分それが無難だと思います。