安いWi-Fi機能付きのESP8266マイコンを試す（WPS対応　失敗編）

## 前の記事

### 準備編
https://qiita.com/Tama79/items/dec21779bb16a1d04c1e

### 応用編
https://qiita.com/Tama79/items/5a1f9b6b7a07f6b8ad40


## Arudiono IDEで使う
### 作りたかった機能
WPS接続する！

うまくいかない・・。ルーター変えたりいろいろ試してみてうまくいったら記事の追加／更新します。

### つながらなかったサーバ
|-|内容  |
|:--|:--|
|メーカー|IOデータ  |
|製品|WN-DX1167GR  |
|ファームウェアバージョン|1.11.000|
|ブートコードのバージョン|1.24.06|
|IPアドレス割当|DHCP|

### 試行した結果
#### 試行その1
##### 試行1.WiFi.begin()利用編
WiFi.begin("","")で接続
#### 結果1.接続はできるが、IPアドレスがふられない

<details><summary>WiFi.begin編スケッチ</summary><div>
スケッチ

```
//  WiFi(Connect)
bool connect_WiFi(const char* ssid, const char* password, long connectTimeoutMS) {
  bool  connected = false;
  long  connectCheckTime = 0;
  wl_status_t connectStatus;

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  connectStatus = WiFi.status();
  while (connectStatus != WL_CONNECTED) {
    connectCheckTime = connectCheckTime + WIFI_CONNECTED_CHECK_MS;
    delay(WIFI_CONNECTED_CHECK_MS);
    connectStatus = WiFi.status();
    Serial.printf("connected = %d\r\n", connectStatus);

    if (connectStatus == WL_CONNECTED)
    {
      connected = true;
      break;
    }
    if (connectStatus == WL_CONNECT_FAILED)
    {
      Serial.printf("WL_CONNECT_FAILED");
      connected = false;
      break;
    }
    if (connectStatus == WL_DISCONNECTED)
    {
      Serial.printf("WL_DISCONNECTED");
      connected = false;
      //  Loopは継続する（接続中もこのステータス）
    }
    if (connectCheckTime > connectTimeoutMS)
    {
      connected = false;
      break;
    }
    Serial.printf("connected = %d\r\n", connectStatus);
  }

  return connected;
}

```
</div>
</details>

#### 試行その2
##### 試行2.beginWPSConfig()利用編
beginWPSConfigで接続
##### 結果2.接続はできるが、IPアドレスがふられない

<details><summary>beginWPSConfig編スケッチ</summary><div>
スケッチ

```
#include <ESP8266WiFi.h>


bool startWPSPBC() {
  // wpstest.ino
  Serial.println("WPS config start");
  bool wpsSuccess = WiFi.beginWPSConfig();
  if(wpsSuccess) {
      String newSSID = WiFi.SSID();
      if(newSSID.length() > 0) {
        //  newSSIDが割り当てられたら成功
        Serial.printf("WPS finished. Connected successfull to SSID '%s'\n", newSSID.c_str());
      } else {
        wpsSuccess = false;
        Serial.println("(- -)");
      }
  }
  if (wpsSuccess) {
    Serial.println("WPS config success.");
    Serial.print("WPS Connected. local IP address: ");
    Serial.println(WiFi.localIP());

  } else {
    Serial.println("WPS config fault.");
  }
//  WiFi.disconnect();
//  delay(500);
//  Serial.println("WPS disconnect...");

  if (wpsSuccess)
  {
      delay(500);
      Serial.printf("Try to connect to SSID '%s'\n", WiFi.SSID().c_str());
      //Serial.printf("Try to connect to password '%s'\n", WiFi.psk().c_str());
 
      //WiFi.begin(WiFi.SSID().c_str(),WiFi.psk().c_str()); // reading data from EPROM, 
      WiFi.begin(); // reading data from EPROM, 
      while (WiFi.status() == WL_DISCONNECTED) {          // last saved credentials
        delay(500);
        Serial.print("."); // show wait for connect to AP
      }
      Serial.printf("Connected SSID '%s'\n", WiFi.SSID().c_str());
    Serial.print("Reconnected. local IP address: ");
    Serial.println(WiFi.localIP());

  }
  return wpsSuccess; 
}

```
</div>
</details>

## 謝辞
### 以下の記事を参考に作りました。
https://qiita.com/wamisnet/items/18527fd7f2d4e53f5095

## 最後に
スケッチコードはCC BY-SA 4.0（著作者の情報とCCライセンス継承はお願いします。商用利用・改変・再配布は問題なし）です。