There are many different development software and tools which can be used for ESP32 programming [1]:
Of course, for programming ESP32 We can use all the previously described Arduino examples for sensors and actuators. But in our example, we will focus on programming in ESP-IDF, as this is the native Development Platform for ESP32. A detailed description of the installation of the development environment can be found here.
This example shows how to use the All Channel Scan or Fast Scan to connect to a Wi-Fi network. In the Fast Scan mode, the scan will stop as soon as the first network matching the SSID is found. In this mode, an application can set the threshold for the authentication mode and the Signal strength. Networks that do not meet the threshold requirements will be ignored. In the All Channel Scan mode, the scan will end after all the channels are scanned, and the connection will start with the best network. The networks can be sorted based on Authentication Mode or Signal Strength. The priority for the Authentication mode is: WPA2 > WPA > WEP > Open.
#include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "esp_wifi.h" #include "esp_log.h" #include "esp_event_loop.h" #include "nvs_flash.h" /*Set the SSID and Password via "make menuconfig"*/ #define DEFAULT_SSID CONFIG_WIFI_SSID #define DEFAULT_PWD CONFIG_WIFI_PASSWORD #if CONFIG_WIFI_ALL_CHANNEL_SCAN #define DEFAULT_SCAN_METHOD WIFI_ALL_CHANNEL_SCAN #elif CONFIG_WIFI_FAST_SCAN #define DEFAULT_SCAN_METHOD WIFI_FAST_SCAN #else #define DEFAULT_SCAN_METHOD WIFI_FAST_SCAN #endif /*CONFIG_SCAN_METHOD*/ #if CONFIG_WIFI_CONNECT_AP_BY_SIGNAL #define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SIGNAL #elif CONFIG_WIFI_CONNECT_AP_BY_SECURITY #define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SECURITY #else #define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SIGNAL #endif /*CONFIG_SORT_METHOD*/ #if CONFIG_FAST_SCAN_THRESHOLD #define DEFAULT_RSSI CONFIG_FAST_SCAN_MINIMUM_SIGNAL #if CONFIG_EXAMPLE_OPEN #define DEFAULT_AUTHMODE WIFI_AUTH_OPEN #elif CONFIG_EXAMPLE_WEP #define DEFAULT_AUTHMODE WIFI_AUTH_WEP #elif CONFIG_EXAMPLE_WPA #define DEFAULT_AUTHMODE WIFI_AUTH_WPA_PSK #elif CONFIG_EXAMPLE_WPA2 #define DEFAULT_AUTHMODE WIFI_AUTH_WPA2_PSK #else #define DEFAULT_AUTHMODE WIFI_AUTH_OPEN #endif #else #define DEFAULT_RSSI -127 #define DEFAULT_AUTHMODE WIFI_AUTH_OPEN #endif /*CONFIG_FAST_SCAN_THRESHOLD*/ static const char *TAG = "scan"; static esp_err_t event_handler(void *ctx, system_event_t *event) { switch (event->event_id) { case SYSTEM_EVENT_STA_START: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START"); ESP_ERROR_CHECK(esp_wifi_connect()); break; case SYSTEM_EVENT_STA_GOT_IP: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP"); ESP_LOGI(TAG, "Got IP: %s\n", ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip)); break; case SYSTEM_EVENT_STA_DISCONNECTED: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED"); ESP_ERROR_CHECK(esp_wifi_connect()); break; default: break; } return ESP_OK; } /* Initialize Wi-Fi as sta and set scan method */ static void wifi_scan(void) { tcpip_adapter_init(); ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_LOGI(TAG, DEFAULT_SSID); ESP_LOGI(TAG, DEFAULT_PWD); wifi_config_t wifi_config = { .sta = { .ssid = DEFAULT_SSID, .password = DEFAULT_PWD, .scan_method = DEFAULT_SCAN_METHOD, .sort_method = DEFAULT_SORT_METHOD, .threshold.rssi = DEFAULT_RSSI, .threshold.authmode = DEFAULT_AUTHMODE, }, }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); } void app_main() { // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK( ret ); wifi_scan(); }
To properly set up Station mode, it is necessary to enter SSID and password. To enter these values, before compiling the program, run the command:
make menuconfig
and then
make all
or
make flash