ESP8266 起動から Wi-Fi 接続までの時間を実測してみた

(更新

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")