2018年8月1日水曜日

ESP WROOM 02(ESP8266)でWiFi(メモ)

メモです。

ESP WROOM 02にArduinoのスケッチを書き込むとATコマンドを受け付けなくなります。これ知らなくてしばらく格闘していました。

オリジナルのファームウェアを書き戻すとATコマンドが使えるようになるそうです。手順が少しめんどくさいので未確認です。

参考
ArduinoのESP8266をATコマンドが使えるように戻す
wakaba-1027さんの「https://ameblo.jp/wakaba-1027/entry-12326885810.html
ラジオペンチさんの「ESP-WROOM-02をATコマンドで動かす

Wifiのサンプルプログラム(Arduino 1.8.5 / esp8266 2.4.1)


[ファイル]-[スケッチ例]-[ESP8266WiFi]-[WiFiClientBasic]

    WiFiMulti.addAP("SSID", "passpasspass");

の[SSID]、[passpasspass]を利用するWiFiアクセスポイントのものに書き換え。IPアドレスはWiFiアクセスポイントのDHCPサーバーから割り当てられます。

    const char * host = "192.168.1.1"; // ip or dns

の部分はESP8266自身のIPアドレスではなくてTCPの接続先で、書き換えなくてもWiFiがつながったかどうかは確認できます。

Arduinoのシリアルモニタの出力


Ambientのサンプルプログラム

WiFiがつながったらサーバーに接続と行きたいところですが、WindowsでHTTPサーバーを立てるのは少しめんどうです。こういうときはMacやLinuxマシンがあると楽なんですが。(全然触っていないラズパイがあった・・・)

Ambientという便利なサービスが公開されいるので利用させていただきました。

手順はAmbientのサイトで詳しく紹介されていますが、一応メモです。

●Ambientのユーザー登録

●チャンネルを作る

●Arduino IDEにAmbientのライブラリをインストール https://github.com/AmbientDataInc/Ambient_ESP8266_lib

●ライブラリにESP8266(ESP WROOM 02)用のサンプルプログラムが用意されています。[ファイル]-[スケッチ例]-[Ambient ESP8266 lib]-[ESP8266]-[Ambient ESP8266]

これは、気温・湿度センサーのHDC1000を使ったサンプルプログラムです。HDC1000のモジュールを持っているので使ってみました。

ブレッドボード配線図


●ssid, password, channelId, writekeyを書き換え

●Light Sleepモードをコメントアウト

//wifi_set_sleep_type(LIGHT_SLEEP_T);

なぜだかわかりませんが、私の環境ではLight Sleepモードを指定すると、WiFiのネゴシエーション中にSleepモードに入ってしまってWakeUpしません。setup()内の最後に移動すればWiFi接続は確立しますが、やはりSleepしたあとWakeUpせず。スリープモードを指定しないか、以下のようにModem Sleepモードを指定すれば動作しました。

wifi_set_sleep_type(MODEM_SLEEP_T);

wifi_set_sleep_typeでスリープモードを指定すると自動的にSleepモードに入るそうですが(参考「ESP8266 (ESP-WROOM-02) で消費電力を抑えるには (スリープモードまとめ) 」)Light Sleepモードでは、なんらかの割り込みをかけないとWakeUpしないのでしょうか?

Sleep無効とModem Sleepモードの電源電流


電源電流を測定するために、電源ラインに直列に0.1ΩのRを入れ、OWON B35 のDC/mVモードでRの電圧降下を測定してロギングしました。(1mV = 10mAで換算)

ESP8266のIO0は3.3Vに接続(実行モード)、OWON B35のサンプリング周期は1秒で測定しましたが、なにか間違えている感じです。


wifi_set_sleep_type()なし

Avg 5.708966667 mV
Min 2.2 mV
Max 7.37 mV

wifi_set_sleep_type(MODEM_SLEEP_T)

Avg 5.591466667 mV
Min 1.75 mV
Max 7.86 mV

<追記:2018.08.02>

WiFi接続を行うと、デフォルトで「Modem Sleep」になるそうです。

wifi_set_sleep_type(NONE_SLEEP_T);

と明示的にSleep Modeを無効にして電源電流を測定しました。

wifi_set_sleep_type(NONE_SLEEP_T)

Avg 7.1394 mV
Min 7.1 mV
Max 9.53 mV

</追記>

Deep Sleepモードも含めてもう少し試してみようと思います。

ambientのグラフ

メモ:


ESP8266 ArduinoのAPI他ドキュメント
「Welcome to ESP8266 Arduino Core’s documentation! https://arduino-esp8266.readthedocs.io/en/latest/

esp8266 libraryのインストール先(Windows10)
<ユーザーフォルダ>\AppData\Local\Arduino15\packages\esp8266

ESP8266 Low Power Solutions
https://www.espressif.com/sites/default/files/9b-esp8266-low_power_solutions_en_0.pdf