質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

5536閲覧

Arduino-ESP32でWPS接続できない

Adol

総合スコア7

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

1クリップ

投稿2019/05/30 08:39

前提・実現したいこと

秋月電子で購入したESP-WROOM-32D開発ボードで、WPS対応の無線LAN親機に
WPSプッシュボタン方式にて接続したい。

発生している問題・エラーメッセージ

ESP-WROOM-32D開発ボードのシリアル出力ログを確認すると、"WPS Successfull"のメッセージが
出力されますが、無線LAN親機のSSIDと開発ボードのIP Addressが取得できず、
無線LAN親機の管理ツール上でも開発ボードの接続は検知されていない状態です。
以下、シリアル出力のログになります。

ets Jun 8 2016 00:22:57 rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:1100 load:0x40078000,len:9232 load:0x40080400,len:6400 entry 0x400806a8 Starting WPS Station Mode Started Disconnected from station, attempting reconnection WPS Successfull, stopping WPS and connecting to: Station Mode Started Station Mode Started

該当のソースコード

EPS32メーカー公式のサンプルスケッチ“WPS.ino”をそのままコンパイル→ボード書き込みしています。

/* Example Code To Get ESP32 To Connect To A Router Using WPS =========================================================== This example code provides both Push Button method and Pin based WPS entry to get your ESP connected to your WiFi router. Hardware Requirements ======================== ESP32 and a Router having atleast one WPS functionality This code is under Public Domain License. Author: Pranav Cherukupalli <cherukupallip@gmail.com> */ #include "WiFi.h" #include "esp_wps.h" /* Change the definition of the WPS mode from WPS_TYPE_PBC to WPS_TYPE_PIN in the case that you are using pin type WPS */ #define ESP_WPS_MODE WPS_TYPE_PBC #define ESP_MANUFACTURER "ESPRESSIF" #define ESP_MODEL_NUMBER "ESP32" #define ESP_MODEL_NAME "ESPRESSIF IOT" #define ESP_DEVICE_NAME "ESP STATION" static esp_wps_config_t config; void wpsInitConfig(){ config.crypto_funcs = &g_wifi_default_wps_crypto_funcs; config.wps_type = ESP_WPS_MODE; strcpy(config.factory_info.manufacturer, ESP_MANUFACTURER); strcpy(config.factory_info.model_number, ESP_MODEL_NUMBER); strcpy(config.factory_info.model_name, ESP_MODEL_NAME); strcpy(config.factory_info.device_name, ESP_DEVICE_NAME); } String wpspin2string(uint8_t a[]){ char wps_pin[9]; for(int i=0;i<8;i++){ wps_pin[i] = a[i]; } wps_pin[8] = '\0'; return (String)wps_pin; } void WiFiEvent(WiFiEvent_t event, system_event_info_t info){ switch(event){ case SYSTEM_EVENT_STA_START: Serial.println("Station Mode Started"); break; case SYSTEM_EVENT_STA_GOT_IP: Serial.println("Connected to :" + String(WiFi.SSID())); Serial.print("Got IP: "); Serial.println(WiFi.localIP()); break; case SYSTEM_EVENT_STA_DISCONNECTED: Serial.println("Disconnected from station, attempting reconnection"); WiFi.reconnect(); break; case SYSTEM_EVENT_STA_WPS_ER_SUCCESS: Serial.println("WPS Successfull, stopping WPS and connecting to: " + String(WiFi.SSID())); esp_wifi_wps_disable(); delay(10); WiFi.begin(); break; case SYSTEM_EVENT_STA_WPS_ER_FAILED: Serial.println("WPS Failed, retrying"); esp_wifi_wps_disable(); esp_wifi_wps_enable(&config); esp_wifi_wps_start(0); break; case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT: Serial.println("WPS Timedout, retrying"); esp_wifi_wps_disable(); esp_wifi_wps_enable(&config); esp_wifi_wps_start(0); break; case SYSTEM_EVENT_STA_WPS_ER_PIN: Serial.println("WPS_PIN = " + wpspin2string(info.sta_er_pin.pin_code)); break; default: break; } } void setup(){ Serial.begin(115200); delay(10); Serial.println(); WiFi.onEvent(WiFiEvent); WiFi.mode(WIFI_MODE_STA); Serial.println("Starting WPS"); wpsInitConfig(); esp_wifi_wps_enable(&config); esp_wifi_wps_start(0); } void loop(){ //nothing to do here }

試したこと

他のサンプルで、無線LAN親機のSSIDとpassを直接ソースコード中に指定して動かすと、
無線LAN親機と問題なく接続できます。

補足情報(FW/ツールのバージョンなど)

IDE:Arduino IDE Ver 1.8.9
F/W:esp by Espressif systems Ver 1.0.2
開発ボード型番:ESP32-DevKitC-32D
開発ボード注文番号(秋月電子):M-13628

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

無線LAN親機をBuffalo WSR-1166DHP3から、ELECOMのWRH-300BK3に変えて、
WPS接続を試したところ、問題なく接続できました。
WSR-1166DHP3のAOSSは無効にしてWPSのみにしてテストしていましたが、
WSR-1166DHP3ではSSID情報すら取得できませんでした。
余っていたWRH-300BK3でWPS接続を試してみたところ、こちらは一発で成功しました。
尚、WSR-1166DHP3、WRH-300BK3共に無線認証はWPA2、暗号化はAESです。
何故、WSR-1166DHP3ではWPS接続に失敗するかの原因特定まではできておりません。
ご存じの方がいましたら、教えていただけると助かります。

投稿2019/05/31 01:33

Adol

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Adol

2019/05/31 06:48

NEC Aterm WG1200HSでもWPS接続(プッシュボタン方式)に成功しました。 今のところ、ESP-WROOM-32D開発ボードとWSR-1166DHP3の相性問題 以上のことが分かりません。 この質問については自己解決として閉じたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問