- I (950485) wifi:wifi driver task: 3ffd26ec, prio:23, stack:6656, core=0
- I (950495) wifi:wifi firmware version: c7d0450
- I (950495) wifi:wifi certification version: v7.0
- I (950495) wifi:config NVS flash: enabled
- I (950495) wifi:config nano formating: disabled
- I (950495) wifi:Init data frame dynamic rx buffer num: 32
- I (950505) wifi:Init management frame dynamic rx buffer num: 32
- I (950505) wifi:Init management short buffer num: 32
- I (950515) wifi:Init static tx buffer num: 16
- I (950515) wifi:Init tx cache buffer num: 32
- I (950525) wifi:Init static rx buffer size: 1600
- I (950525) wifi:Init static rx buffer num: 10
- I (950535) wifi:Init dynamic rx buffer num: 32
- I (950535) wifi_init: rx ba win: 6
- I (950535) wifi_init: tcpip mbox: 32
- I (950545) wifi_init: udp mbox: 6
- I (950545) wifi_init: tcp mbox: 6
- I (950545) wifi_init: tcp tx win: 5744
- I (950555) wifi_init: tcp rx win: 5744
- I (950555) wifi_init: tcp mss: 1440
- I (950555) wifi_init: WiFi IRAM OP enabled
- I (950565) wifi_init: WiFi RX IRAM OP enabled
- Connecting to "KatzenWave_24" with PSK "************"
- I (950575) wifi:mode : sta (3c:61:05:0c:10:94)
- I (950575) wifi:enable tsf
- Connecting Wifi...
- Retry: 0
- Retry: 1
- Retry: 2
- Retry: 3
- Retry: 4
- Failed!
- Failed test...
- I (962865) wifi:flush txq
- I (962865) wifi:stop sw txq
- I (962865) wifi:lmac stop hw txq
- I (962865) wifi:Deinit lldesc rx mblock:10
The chip is fine as i crosschecked with the Arduino library and there it connects just fine, what could be wrong?
Logfile:
- #include <string.h>
- #include "kt_wifi.h"
- #define DEFAULT_SCAN_LIST_SIZE 28
- #define WIFI_CONNECTED_BIT BIT0
- #define WIFI_FAIL_BIT BIT1
- static EventGroupHandle_t s_wifi_event_group;
- static int s_retry_num = 0;
- static void event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
- {
- if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
- {
- printf("Connecting Wifi...\n");
- esp_wifi_connect();
- } else
- if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
- {
- if (s_retry_num < 5)
- {
- printf("Retry: %d\n",s_retry_num);
- esp_wifi_connect();
- s_retry_num++;
- }
- else
- {
- printf("Failed!\n");
- xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
- }
- }
- else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
- {
- printf("Connected!\n");
- ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;
- printf("IP: "IPSTR"\n", IP2STR(&event->ip_info.ip));
- s_retry_num = 0;
- xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
- }
- }
- KittenWifi::KittenWifi()
- {
- 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);
- s_wifi_event_group = xEventGroupCreate();
- ESP_ERROR_CHECK(esp_netif_init());
- ESP_ERROR_CHECK(esp_event_loop_create_default());
- sta_netif = esp_netif_create_default_wifi_sta();
- assert(sta_netif);
- cfg = WIFI_INIT_CONFIG_DEFAULT();
- ESP_ERROR_CHECK(esp_wifi_init(&cfg));
- ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
- ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
- ESP_EVENT_ANY_ID,
- &event_handler,
- NULL,
- &instance_any_id));
- ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
- IP_EVENT_STA_GOT_IP,
- &event_handler,
- NULL,
- &instance_got_ip));
- }
- KittenWifi::~KittenWifi()
- {
- esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &instance_any_id);
- esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &instance_got_ip);
- ESP_ERROR_CHECK(esp_event_loop_delete_default());
- esp_netif_destroy(sta_netif);
- vEventGroupDelete(s_wifi_event_group);
- memset(&s_wifi_event_group, 0, sizeof(s_wifi_event_group));
- }
- void KittenWifi::WifiStart()
- {
- if (!wifiIsActive)
- {
- ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
- ESP_ERROR_CHECK(esp_wifi_start());
- wifiIsActive = true;
- }
- }
- void KittenWifi::WifiStop()
- {
- if (wifiIsActive)
- {
- ESP_ERROR_CHECK(esp_wifi_disconnect());
- ESP_ERROR_CHECK(esp_wifi_stop());
- ESP_ERROR_CHECK(esp_wifi_deinit());
- wifiIsActive = false;
- }
- }
- bool KittenWifi::WifiStartConnectAP(std::string SSID, std::string PSK)
- {
- if (wifiIsActive) return false;
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wstringop-truncation"
- memset(&wifi_config, 0, sizeof(wifi_config));
- strncpy((char *)wifi_config.sta.ssid, SSID.c_str(), sizeof(wifi_config.sta.ssid));
- strncpy((char *)wifi_config.sta.password, PSK.c_str(), sizeof(wifi_config.sta.password));
- printf("Connecting to \"%s\" with PSK \"%s\"\n",wifi_config.sta.ssid,wifi_config.sta.password);
- #pragma GCC diagnostic pop
- wifi_config.sta.threshold.authmode = WIFI_AUTH_WPA_WPA2_PSK; // TODO: Make this user configurable if something under WPA2 is allowed
- wifi_config.sta.pmf_cfg.capable = true;
- wifi_config.sta.pmf_cfg.required = false;
- wifi_config.sta.bssid_set = false;
- wifi_config.sta.scan_method = WIFI_ALL_CHANNEL_SCAN;
- wifi_config.sta.channel = 0;
- s_retry_num = 0;
- ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
- ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
- ESP_ERROR_CHECK(esp_wifi_start());
- wifiIsActive = true;
- EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
- WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
- pdFALSE,
- pdFALSE,
- portMAX_DELAY);
- if (bits & WIFI_CONNECTED_BIT)
- return true;
- return false;
- }
- char* KittenWifi::GetURL(std::string URL, int *returncode)
- {
- esp_http_client_config_t httpclientconfig = {
- .url = URL.c_str()
- };
- esp_http_client_handle_t client = esp_http_client_init(&httpclientconfig);
- esp_err_t err = esp_http_client_perform(client);
- if (err == ESP_OK)
- {
- /* ESP_LOGI(TAG, "Status = %d, content_length = %d",
- esp_http_client_get_status_code(client),
- esp_http_client_get_content_length(client)); */
- int statuscode = esp_http_client_get_status_code(client);
- *returncode = statuscode;
- if (statuscode != 200)
- return nullptr;
- uint32_t len = esp_http_client_get_content_length(client);
- char *buffer = (char *)malloc(len);
- int actualdataread = esp_http_client_read(client,buffer,len);
- printf("Do we have a corruption? \"%s\"\n",buffer);
- esp_http_client_close(client);
- esp_http_client_cleanup(client);
- return buffer;
- }
- esp_http_client_cleanup(client);
- return nullptr;
- }
- std::map<std::string, std::string> KittenWifi::ScanNetwork()
- {
- std::map<std::string, std::string> returnmap;
- uint16_t number = DEFAULT_SCAN_LIST_SIZE;
- wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE];
- uint16_t ap_count = 0;
- memset(ap_info, 0, sizeof(ap_info));
- ESP_ERROR_CHECK(esp_wifi_disconnect());
- esp_wifi_scan_start(NULL, true);
- ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));
- ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));
- for (int i = 0; i < number + 1; i++)
- {
- std::string key = "";
- std::string value = "";
- key.insert(0, (char *)ap_info[i].ssid);
- switch (ap_info[i].pairwise_cipher)
- {
- case WIFI_CIPHER_TYPE_NONE:
- break;
- case WIFI_CIPHER_TYPE_WEP40:
- value += "P:WEP40 ";
- break;
- case WIFI_CIPHER_TYPE_WEP104:
- value += "P:WEP104 ";
- break;
- case WIFI_CIPHER_TYPE_TKIP:
- value += "P:TKIP ";
- break;
- case WIFI_CIPHER_TYPE_CCMP:
- value += "P:CCMP ";
- break;
- case WIFI_CIPHER_TYPE_TKIP_CCMP:
- value += "P:TKIP_CCMP ";
- break;
- default:
- value += "P:??? ";
- break;
- }
- switch (ap_info[i].group_cipher)
- {
- case WIFI_CIPHER_TYPE_NONE:
- break;
- case WIFI_CIPHER_TYPE_WEP40:
- value += "G:WEP40";
- break;
- case WIFI_CIPHER_TYPE_WEP104:
- value += "G:WEP104";
- break;
- case WIFI_CIPHER_TYPE_TKIP:
- value += "G:TKIP";
- break;
- case WIFI_CIPHER_TYPE_CCMP:
- value += "G:CCMP";
- break;
- case WIFI_CIPHER_TYPE_TKIP_CCMP:
- value += "G:TKIP_CCMP";
- break;
- default:
- value += "G:???";
- break;
- }
- returnmap[key] = value;
- }
- return returnmap;
- }
- #ifndef __KT_WIFI_H__
- #define __KT_WIFI_H__
- #include <string>
- #include <vector>
- #include <map>
- #include "freertos/FreeRTOS.h"
- #include "freertos/event_groups.h"
- #include "esp_wifi.h"
- #include "esp_log.h"
- #include "esp_event.h"
- #include "esp_http_client.h"
- #include "nvs_flash.h"
- class KittenWifi
- {
- public:
- KittenWifi();
- ~KittenWifi();
- // Start and stop the wifi. This should save some power when the wifi is not needed by the current application.
- void WifiStart();
- void WifiStop();
- // Connect to a given access point
- bool WifiStartConnectAP(std::string SSID, std::string PSK);
- // Grab the content of an URL and return it in buffer. Return value is a buffer, it is the callers duty to remove it with free()
- char* GetURL(std::string URL, int *returncode);
- //Scan the network for open APs and return a string list of them
- std::map<std::string,std::string> ScanNetwork();
- private:
- std::string connectedAPName = "";
- esp_netif_t *sta_netif = nullptr;
- wifi_init_config_t cfg;
- wifi_config_t wifi_config;
- esp_event_handler_instance_t instance_any_id;
- esp_event_handler_instance_t instance_got_ip;
- bool wifiIsActive = false;
- };
- #endif