ESP-WROOM-02でWi-Fiのアクセスポイントをスキャンする


ESP-WROOM-02へArduinoスケッチ(プログラム)を書き込めるようにするライブラリ「ESP8266 Arduino Core」には、さまざまなサンプルが用意されています。今回はその中で、ESP-WROOM-02がキャッチできるアクセスポイントとその信号の強度(RSSI)をスキャンするサンプルを取り上げます。

サンプルスケッチ

Arduino IDEのメニューから、[ファイル]→[スケッチの例]→[ESP8266WiFi]→[WiFiScan]を選択してサンプルスケッチを開きます。Wi-Fi自体には接続しないので、SSIDやパスワードの入力は不要です。

WiFiScan

/*
 *  This sketch demonstrates how to scan WiFi networks. 
 *  The API is almost the same as with the WiFi Shield library, 
 *  the most obvious difference being the different file you need to include:
 */
#include "ESP8266WiFi.h"

void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");
}

void loop() {
  Serial.println("scan start");

  // WiFi.scanNetworks will return the number of networks found
  int n = WiFi.scanNetworks();
  Serial.println("scan done");
  if (n == 0)
    Serial.println("no networks found");
  else
  {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}

元々接続していたWi-Fiとの接続を一旦切ります。

// Set WiFi to station mode and disconnect from an AP if it was previously connected
WiFi.mode(WIFI_STA);
WiFi.disconnect();

アクセスポイントの数を取得します。

int n = WiFi.scanNetworks();

アクセスポイント名とRSSIを1つずつ見ていきます。

for (int i = 0; i < n; ++i)
{
  // Print SSID and RSSI for each network found
  Serial.print(i + 1);
  Serial.print(": ");
  Serial.print(WiFi.SSID(i));
  Serial.print(" (");
  Serial.print(WiFi.RSSI(i));
  Serial.print(")");
  Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
  delay(10);
}

どんなことに使える?

実際にどういうことに使えるのか少しピンときませんね
取得したアクセスポイントの中から信号の強度が最も強いものを選んで接続したり、特定のアクセスポイントが生きているのか確認するなどでしょうか?