ESP8266のCPU周波数を変えて、Wi-Fi接続からデータ測定、クラウドへの送信までの処理時間がどう変化するか調べてみました。結果から先に言うと、ほとんど差が出ませんでした。。。
ESP8266のCPU周波数は標準で80MHzで、160MHzに変更でき、その方法はespressif社のフォーラムなどに書かれています。
system_update_cpu_freq(160);
で160MHzに変更できます。
まず、次のようなプログラムでCPU周波数を変えると処理速度がどう変化するか確認してみました。floatの掛け算を100万回おこなっています。
void setup() { system_update_cpu_freq(160); Serial.begin(115200); } void loop() { int t = millis(); for (int i = 0; i < 1000; i++) { for (int j = 0; j < 1000; j++) { float x, y; x = (float)i; y = (float)j; x *= y; delay(0); } } Serial.print(millis() - t); Serial.print(" "); }
system_update_cpu_freq(160); をコメントにして80MHzで動かしたときは5980(m秒)ぐらいの値が表示され、コメントを外して160MHzで動かすと3000(m秒)ぐらいの値になったので、処理速度はほぼ2倍になったことが確認できました。
次に、次のようなプログラムを動かし、消費電流を測定してみました。
- CPU周波数を160MHzに設定
- Wi-Fiの出力を0.0dBmに設定
- Wi-Fiアクセスポイントに接続
- センサーの初期化
- Ambientの初期化
- センサー値の取得
- センサー値をAmbientに送信
- Deep Sleep
実際のプログラムはgistに貼りました。
・https://gist.github.com/TakehikoShimojima/1022d80b370e2b935471b7a0d945f654
1のCPU周波数設定をコメントにして80MHzで動かした時の消費電流が次です。
コメントを外して160MHzで動かした時が次です。
どちらも動作時のベースの消費電流は68〜69mA、立ち上がりからDeep Sleepまでの時間も約6.5秒でした。
センサーやWi-Fiモジュールなどの外部デバイスをアクセスする部分は、デバイスの速度に抑えられ、CPU速度を上げても実行時間は変わらないと思います。一方で、プロトコル処理などはCPU処理中心なので、実行時間が短くなると期待したのですが、その効果は確認できませんでした。
ちなみに、Ambientへの送信はhttpsではなく、hpptです。
何か勘違いしていることがあれば、教えてください。