Measured how long ESP8266 takes time connecting Wi-Fi AP since power-up. Found that it only takes 1.4 seconds to get an HTTP reply after deep-sleep wakeup if we apply IP address statically (without DHCP)!
まずは DHCP を使ってみる。これだと遅そう
ESP8266 マイコンが電源投入から Wi-Fi 接続までどれくらいかかるか調べてみました。ハードリセットからだと約 5秒。(環境にも依ると思いますが)
ちなみに、deep sleep からの復帰だと約 3秒。何か情報を保存しているみたいで、deep sleep からの復帰のほうが早いみたいです。(下記画面ダンプで、271 と 3235 はデバイス起動からの経過時間です。単位はミリ秒。)
それでも 3秒ですか。アプリケーションに依っては遅すぎるかも知れません。あと、定期的に起き上がって状態を報告するアプリでは、バッテリー消費のインパクトがありますね。やはり、こういう応用では ZigBee や Bluetooth LE には敵わないかも知れません。
DHCP を使わないで試してみた
上記を見てみると、なんか DHCP による情報取得に時間がかかっている気がしてきました。そこで、静的に IP アドレスを割り当てる実験をしてみたところ、なんと接続時間が劇的に短くなりました。ESP8266、侮るべからずです!
これは deep sleep からの復帰で試した例ですが、deep sleep 復帰から 0.4秒で Wi-Fi AP に接続し、同じく 1.4秒で HTTP での結果を得られています。(HTTP サーバーのアドレスは IP アドレスで指定し、DNS を引かなくて良いようにしています。)
ちなみに、deep sleep からの復帰ではなくハードリセットからだと、それぞれ 2.4秒(Wi-Fi AP 接続)と 3.4秒(HTTP 完了)程度でした。
素晴らしい。これならばいろいろと応用が広がりそうです。
まとめ(9月16日加筆)
結果をまとめておきました。起動(deep sleep からの復帰)から HTTP の応答を得るまでの所要時間です。環境に依存すると思いますので、あくまでも参考として御覧ください。
ハードリセットから | deep sleep から復帰 | |
---|---|---|
DHCP あり,ローカル HTTP サーバー | 5.5〜5.6秒 | 3.4〜3.5秒 |
DHCP あり,米国 HTTP サーバー | 5.8〜6.0秒 | 3.7〜4.0秒 |
DHCP なし,ローカル HTTP サーバー | 3.5〜3.6秒 | 1.3〜1.4秒 |
DHCP なし,米国 HTTP サーバー | 3.8〜3.9秒 | 1.7〜1.8秒 |
参考までにコード(main.py)
参考までにコードを上げておきます。これを main.py として保存して評価しました。
import network sta_if = network.WLAN(network.STA_IF)sta_if.ifconfig(('172.21.141.74', '255.255.255.0', '172.21.141.222', '172.21.141.222')) # print(sta_if.ifconfig()) import time print(time.ticks_ms(), "ms") while not sta_if.isconnected(): time.sleep_ms(100) print(sta_if.ifconfig()) print("Now connected") print(time.ticks_ms(), "ms") import socket s = socket.socket() s.connect(('172.21.141.6', 8080)) s.send('GET /\r\n') print(s.recv(1000)) s.close() print(time.ticks_ms(), "ms")