]> granicus.if.org Git - esp-idf/blob - examples/wifi/wps/main/wps.c
example: adding wifi example wps and power save.
[esp-idf] / examples / wifi / wps / main / wps.c
1 /* WiFi Connection Example using WPS
2  * 
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.
4  *
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.
6  */
7 #include "freertos/FreeRTOS.h"
8 #include "freertos/event_groups.h"
9 #include "esp_wifi.h"
10 #include "esp_log.h"
11 #include "esp_wps.h"
12 #include "esp_event_loop.h"
13
14
15 /*set wps mode here*/
16 #define WPS_TEST_MODE WPS_TYPE_PBC
17 //#define WPS_TEST_MODE WPS_TYPE_PIN
18 //#define WPS_TEST_MODE WPS_TYPE_MAX 
19
20
21 #ifndef PIN2STR
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"
24 #endif
25
26 /* FreeRTOS event group to signal when we are connected & ready to make a request */
27 static EventGroupHandle_t wifi_event_group;
28
29 static const char *TAG = "example_wps";
30
31
32 static esp_err_t event_handler(void *ctx, system_event_t *event)
33 {
34     switch(event->event_id) {
35     case SYSTEM_EVENT_STA_START:
36         ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START");
37         break;
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));
42         break;
43     case SYSTEM_EVENT_STA_DISCONNECTED:
44         ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED");
45         ESP_ERROR_CHECK(esp_wifi_connect());
46         break;
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
50          * */
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());
54         break;
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));
60         break;
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));
66         break;
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));
71         break;
72     default:
73         break;
74     }
75     return ESP_OK;
76 }
77
78 /*init wifi as sta and start wps*/
79 static void start_wps(void)
80 {
81     tcpip_adapter_init();
82     wifi_event_group = xEventGroupCreate();
83     ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL));
84
85     wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
86     ESP_ERROR_CHECK(esp_wifi_init(&cfg));
87     
88     ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
89     ESP_ERROR_CHECK(esp_wifi_start());
90     
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));
95 }
96
97 void app_main()
98 {
99     start_wps();
100 }