connect_wifi_ap.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include "defines.h"
  2. #include "Helper.h"
  3. #include "connect_wifi_ap.h"
  4. #include <string.h>
  5. #include <string>
  6. #include "freertos/FreeRTOS.h"
  7. #include "freertos/task.h"
  8. #include "esp_mac.h"
  9. #include "esp_wifi.h"
  10. #include "esp_log.h"
  11. #include "nvs_flash.h"
  12. #include "stdio.h"
  13. #include "time_sntp.h"
  14. #include "ClassLogFile.h"
  15. #include "server_help.h"
  16. #include "statusled.h"
  17. #include "server_ota.h"
  18. #include "basic_auth.h"
  19. #include "lwip/err.h"
  20. #include "lwip/sys.h"
  21. static const char *TAG = "WIFI AP";
  22. esp_netif_t *my_ap_netif = NULL;
  23. wifi_init_config_t my_ap_wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
  24. wifi_config_t my_ap_wifi_config = {};
  25. static bool wifi_ap_initialized = false;
  26. static bool wifi_ap_connected = false;
  27. static bool wifi_ap_connection_successful = false;
  28. static int wifi_ap_reconnect_cnt = 0;
  29. static void wifi_ap_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
  30. {
  31. if (event_id == WIFI_EVENT_AP_STACONNECTED)
  32. {
  33. wifi_event_ap_staconnected_t *event = (wifi_event_ap_staconnected_t *)event_data;
  34. ESP_LOGI(TAG, "station " MACSTR " join, AID=%d", MAC2STR(event->mac), event->aid);
  35. }
  36. else if (event_id == WIFI_EVENT_AP_STADISCONNECTED)
  37. {
  38. wifi_event_ap_stadisconnected_t *event = (wifi_event_ap_stadisconnected_t *)event_data;
  39. ESP_LOGI(TAG, "station " MACSTR " leave, AID=%d", MAC2STR(event->mac), event->aid);
  40. }
  41. }
  42. esp_err_t wifi_init_ap(void)
  43. {
  44. LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Wifi AP init...");
  45. esp_err_t retval = esp_netif_init();
  46. if (retval != ESP_OK)
  47. {
  48. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_netif_init: Error: " + std::to_string(retval));
  49. return retval;
  50. }
  51. retval = esp_event_loop_create_default();
  52. if (retval != ESP_OK)
  53. {
  54. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_event_loop_create_default: Error: " + std::to_string(retval));
  55. return retval;
  56. }
  57. my_ap_netif = esp_netif_create_default_wifi_ap();
  58. assert(my_ap_netif);
  59. retval = esp_wifi_init(&my_ap_wifi_init_config);
  60. if (retval != ESP_OK)
  61. {
  62. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_wifi_init: Error: " + std::to_string(retval));
  63. return retval;
  64. }
  65. // Register an instance of event handler to the default loop.
  66. retval = esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_ap_event_handler, NULL, NULL);
  67. if (retval != ESP_OK)
  68. {
  69. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_event_handler_instance_register - WIFI_ANY: Error: " + std::to_string(retval));
  70. return retval;
  71. }
  72. //////////////////////////////////////////////////////////////
  73. uint8_t ssid[32] = {};
  74. uint8_t password[64] = {};
  75. strcpy((char *)ssid, ESP_WIFI_AP_SSID);
  76. strcpy((char *)password, ESP_WIFI_AP_PASS);
  77. memcpy(&my_ap_wifi_config.ap.ssid, &ssid, sizeof(ssid));
  78. memcpy(&my_ap_wifi_config.ap.password, &password, sizeof(password));
  79. //////////////////////////////////////////////////////////////
  80. my_ap_wifi_config.ap.channel = ESP_WIFI_AP_CHANNEL;
  81. my_ap_wifi_config.ap.max_connection = ESP_WIFI_AP_MAX_STA_CONN;
  82. my_ap_wifi_config.ap.authmode = WIFI_AUTH_WPA_WPA2_PSK;
  83. if (strlen(ESP_WIFI_AP_PASS) == 0)
  84. {
  85. my_ap_wifi_config.ap.authmode = WIFI_AUTH_OPEN;
  86. }
  87. retval = esp_wifi_set_mode(WIFI_MODE_AP);
  88. if (retval != ESP_OK)
  89. {
  90. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_wifi_set_mode: Error: " + std::to_string(retval));
  91. return retval;
  92. }
  93. ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &my_ap_wifi_config));
  94. retval = esp_wifi_set_config(WIFI_IF_AP, &my_ap_wifi_config);
  95. if (retval != ESP_OK)
  96. {
  97. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_wifi_set_config: Error: " + std::to_string(retval));
  98. return retval;
  99. }
  100. retval = esp_wifi_start();
  101. if (retval != ESP_OK)
  102. {
  103. LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "esp_wifi_start: Error: " + std::to_string(retval));
  104. return retval;
  105. }
  106. ESP_LOGI(TAG, "started with SSID \"%s\", password: \"%s\", channel: %d. Connect to AP and open http://192.168.4.1", ESP_WIFI_AP_SSID, ESP_WIFI_AP_PASS, ESP_WIFI_AP_CHANNEL);
  107. return retval;
  108. }
  109. void wifi_deinit_ap(void)
  110. {
  111. LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Wifi AP deinit...");
  112. wifi_ap_initialized = false;
  113. ESP_LOGD(TAG, "esp_wifi_disconnect()");
  114. ESP_ERROR_CHECK(esp_wifi_disconnect());
  115. ESP_LOGD(TAG, "esp_wifi_stop()");
  116. ESP_ERROR_CHECK(esp_wifi_stop());
  117. ESP_LOGD(TAG, "esp_netif_destroy(my_ap_netif)");
  118. esp_netif_destroy(my_ap_netif);
  119. ESP_LOGD(TAG, "esp_netif_deinit()");
  120. ESP_ERROR_CHECK(esp_netif_deinit());
  121. ESP_LOGD(TAG, "esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_ap_event_handler)");
  122. ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, wifi_ap_event_handler));
  123. ESP_LOGD(TAG, "esp_wifi_deinit()");
  124. ESP_ERROR_CHECK(esp_wifi_deinit());
  125. LogFile.WriteToFile(ESP_LOG_INFO, TAG, "Wifi AP deinit done");
  126. }
  127. bool get_wifi_ap_is_connected(void)
  128. {
  129. return wifi_ap_connected;
  130. }