Select one of the symbols to view example projects that use it.
 
Outline
#include "freertos/FreeRTOS.h"
#include "freertos/event_groups.h"
#include "esp_wifi.h"
#include "esp_log.h"
#include "esp_wps.h"
#include "esp_event.h"
#include "nvs_flash.h"
#include <string.h>
#define WPS_MODE
#define WPS_MODE
#define WPS_MODE
#define MAX_RETRY_ATTEMPTS
#define PIN2STR
#define PINSTR
TAG
config
wps_ap_creds
s_ap_creds_num
s_retry_num
wifi_event_handler(void *, esp_event_base_t, int32_t, void *)
got_ip_event_handler(void *, esp_event_base_t, int32_t, void *)
start_wps()
app_main()
Files
loading...
SourceVuESP-IDF Framework and Exampleswps samplemain/wps.c
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/* WiFi Connection Example using WPS This example code is in the Public Domain (or CC0 licensed, at your option.) Unless required by applicable law or agreed to in writing, this software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *//* ... */ /* This example demonstrates how to use WPS. It supports two modes, which can be selected in menuconfig. WPS_TYPE_PBC: Start ESP32 and it will enter WPS PBC mode. Then push WPS button on the router. ESP32 will receive SSID and password, and connect to the router. WPS_TYPE_PIN: Start ESP32, you'll see an eight-digit PIN number in log output. Enter the PIN code on the router and then the ESP32 will get connected to router. *//* ... */ #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_log.h" #include "esp_wps.h" #include "esp_event.h" #include "nvs_flash.h" #include <string.h>8 includes /*set wps mode via project configuration */ #if CONFIG_EXAMPLE_WPS_TYPE_PBC #define WPS_MODE WPS_TYPE_PBC #elif CONFIG_EXAMPLE_WPS_TYPE_PIN #define WPS_MODE WPS_TYPE_PIN #else #define WPS_MODE WPS_TYPE_DISABLE #endif /*CONFIG_EXAMPLE_WPS_TYPE_PBC*/ #define MAX_RETRY_ATTEMPTS 2 #ifndef PIN2STR #define PIN2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5], (a)[6], (a)[7] #define PINSTR "%c%c%c%c%c%c%c%c"/* ... */ #endif static const char *TAG = "example_wps"; static esp_wps_config_t config = WPS_CONFIG_INIT_DEFAULT(WPS_MODE); static wifi_config_t wps_ap_creds[MAX_WPS_AP_CRED]; static int s_ap_creds_num = 0; static int s_retry_num = 0; static void wifi_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { static int ap_idx = 1; switch (event_id) { case WIFI_EVENT_STA_START: ESP_LOGI(TAG, "WIFI_EVENT_STA_START"); break;... case WIFI_EVENT_STA_DISCONNECTED: ESP_LOGI(TAG, "WIFI_EVENT_STA_DISCONNECTED"); if (s_retry_num < MAX_RETRY_ATTEMPTS) { esp_wifi_connect(); s_retry_num++; }{...} else if (ap_idx < s_ap_creds_num) { /* Try the next AP credential if first one fails */ if (ap_idx < s_ap_creds_num) { ESP_LOGI(TAG, "Connecting to SSID: %s, Passphrase: %s", wps_ap_creds[ap_idx].sta.ssid, wps_ap_creds[ap_idx].sta.password); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wps_ap_creds[ap_idx++]) ); esp_wifi_connect(); }{...} s_retry_num = 0; }{...} else { ESP_LOGI(TAG, "Failed to connect!"); }{...} break;... case WIFI_EVENT_STA_WPS_ER_SUCCESS: ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_SUCCESS"); { wifi_event_sta_wps_er_success_t *evt = (wifi_event_sta_wps_er_success_t *)event_data; int i; if (evt) { s_ap_creds_num = evt->ap_cred_cnt; for (i = 0; i < s_ap_creds_num; i++) { memcpy(wps_ap_creds[i].sta.ssid, evt->ap_cred[i].ssid, sizeof(evt->ap_cred[i].ssid)); memcpy(wps_ap_creds[i].sta.password, evt->ap_cred[i].passphrase, sizeof(evt->ap_cred[i].passphrase)); }{...} /* If multiple AP credentials are received from WPS, connect with first one */ ESP_LOGI(TAG, "Connecting to SSID: %s, Passphrase: %s", wps_ap_creds[0].sta.ssid, wps_ap_creds[0].sta.password); ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wps_ap_creds[0]) ); }{...} /* * If only one AP credential is received from WPS, there will be no event data and * esp_wifi_set_config() is already called by WPS modules for backward compatibility * with legacy apps. So directly attempt connection here. *//* ... */ ESP_ERROR_CHECK(esp_wifi_wps_disable()); esp_wifi_connect(); }{...} break;... case WIFI_EVENT_STA_WPS_ER_FAILED: ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_FAILED"); ESP_ERROR_CHECK(esp_wifi_wps_disable()); ESP_ERROR_CHECK(esp_wifi_wps_enable(&config)); ESP_ERROR_CHECK(esp_wifi_wps_start(0)); break;... case WIFI_EVENT_STA_WPS_ER_TIMEOUT: ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_TIMEOUT"); ESP_ERROR_CHECK(esp_wifi_wps_disable()); ESP_ERROR_CHECK(esp_wifi_wps_enable(&config)); ESP_ERROR_CHECK(esp_wifi_wps_start(0)); break;... case WIFI_EVENT_STA_WPS_ER_PIN: ESP_LOGI(TAG, "WIFI_EVENT_STA_WPS_ER_PIN"); /* display the PIN code */ wifi_event_sta_wps_er_pin_t* event = (wifi_event_sta_wps_er_pin_t*) event_data; ESP_LOGI(TAG, "WPS_PIN = " PINSTR, PIN2STR(event->pin_code)); break;... default: break;... }{...} }{ ... } static void got_ip_event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data) { ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; ESP_LOGI(TAG, "got ip: " IPSTR, IP2STR(&event->ip_info.ip)); }{ ... } /*init wifi as sta and start wps*/ static void start_wps(void) { ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); assert(sta_netif); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &got_ip_event_handler, NULL)); ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_start()); ESP_LOGI(TAG, "start wps..."); ESP_ERROR_CHECK(esp_wifi_wps_enable(&config)); ESP_ERROR_CHECK(esp_wifi_wps_start(0)); }{ ... } void app_main(void) { /* Initialize NVS — it is used to store PHY calibration data */ esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); }{...} ESP_ERROR_CHECK( ret ); start_wps(); }{ ... }
Details
Show:
from
Types: Columns:
This file uses the notable symbols shown below. Click anywhere in the file to view more details.