1 /* WiFi Connection Example using WPS
3 * WPS_TYPE_PBC: Start esp32 and it will inter wps PBC mode. Then push the buttom of wps on router down. The esp32 will connected to the router.
5 * WPS_TYPE_PIN: Start esp32, You'll see PIN code which is a eight-digit number showing on COM. Enter the PIN code in router and then the esp32 will connected to router.
7 #include "freertos/FreeRTOS.h"
8 #include "freertos/event_groups.h"
12 #include "esp_event_loop.h"
16 #define WPS_TEST_MODE WPS_TYPE_PBC
17 //#define WPS_TEST_MODE WPS_TYPE_PIN
18 //#define WPS_TEST_MODE WPS_TYPE_MAX
22 #define PIN2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5], (a)[6], (a)[7]
23 #define PINSTR "%c%c%c%c%c%c%c%c"
26 /* FreeRTOS event group to signal when we are connected & ready to make a request */
27 static EventGroupHandle_t wifi_event_group;
29 static const char *TAG = "example_wps";
32 static esp_err_t event_handler(void *ctx, system_event_t *event)
34 switch(event->event_id) {
35 case SYSTEM_EVENT_STA_START:
36 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START");
38 case SYSTEM_EVENT_STA_GOT_IP:
39 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP");
40 ESP_LOGI(TAG, "got ip:%s\n",
41 ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
43 case SYSTEM_EVENT_STA_DISCONNECTED:
44 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED");
45 ESP_ERROR_CHECK(esp_wifi_connect());
47 case SYSTEM_EVENT_STA_WPS_ER_SUCCESS:
48 /*point: the function esp_wifi_wps_start() only get ssid & password
49 * and we suggest you call the function esp_wifi_connect() here
51 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_WPS_ER_SUCCESS");
52 ESP_ERROR_CHECK(esp_wifi_wps_disable());
53 ESP_ERROR_CHECK(esp_wifi_connect());
55 case SYSTEM_EVENT_STA_WPS_ER_FAILED:
56 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_WPS_ER_FAILED");
57 ESP_ERROR_CHECK(esp_wifi_wps_disable());
58 ESP_ERROR_CHECK(esp_wifi_wps_enable(WPS_TEST_MODE));
59 ESP_ERROR_CHECK(esp_wifi_wps_start(0));
61 case SYSTEM_EVENT_STA_WPS_ER_TIMEOUT:
62 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_WPS_ER_TIMEOUT");
63 ESP_ERROR_CHECK(esp_wifi_wps_disable());
64 ESP_ERROR_CHECK(esp_wifi_wps_enable(WPS_TEST_MODE));
65 ESP_ERROR_CHECK(esp_wifi_wps_start(0));
67 case SYSTEM_EVENT_STA_WPS_ER_PIN:
68 ESP_LOGI(TAG, "SYSTEM_EVENT_STA_WPS_ER_PIN");
69 /*show the PIN code here*/
70 ESP_LOGI(TAG, "WPS_PIN = "PINSTR, PIN2STR(event->event_info.sta_er_pin.pin_code));
78 /*init wifi as sta and start wps*/
79 static void start_wps(void)
82 wifi_event_group = xEventGroupCreate();
83 ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
85 wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
86 ESP_ERROR_CHECK(esp_wifi_init(&cfg));
88 ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
89 ESP_ERROR_CHECK(esp_wifi_start());
91 ESP_LOGI(TAG, "start wps...");
92 //ESP_ERROR_CHECK(esp_wifi_wps_enable(WPS_TYPE_PBC));
93 ESP_ERROR_CHECK(esp_wifi_wps_enable(WPS_TEST_MODE));
94 ESP_ERROR_CHECK(esp_wifi_wps_start(0));