Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit2dbead51892e9a9aaddb27ec7b39ab63213b9c8e (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-19 16:38:12 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-19 16:38:12 +0300
Files5de78c382aa8e96f76fb07e55fb8c88cf1c23fc3
uni-projects-2dbead51892e9a9aaddb27ec7b39ab63213b9c8e.tar
uni-projects-2dbead51892e9a9aaddb27ec7b39ab63213b9c8e.tar.gz
uni-projects-2dbead51892e9a9aaddb27ec7b39ab63213b9c8e.zip
Parent9d1cc2d2c575500ff05b3fe3e35d252e34ef52c9 (diff)
[iot/goam] Rought wifi init
diff --git a/Year 3/Internet of things/goam/main/CMakeLists.txt b/Year 3/Internet of things/goam/main/CMakeLists.txt
index 656f4cb..949428f 100644
--- a/Year 3/Internet of things/goam/main/CMakeLists.txt
+++ b/Year 3/Internet of things/goam/main/CMakeLists.txt
@@ -2,4 +2,5 @@ idf_component_register(SRCS "main.c"
"ptc06.c"
"buttons.c"
"display.c"
+ "wifi.c"
INCLUDE_DIRS "")
diff --git a/Year 3/Internet of things/goam/main/main.c b/Year 3/Internet of things/goam/main/main.c
index e7d8414..e7603a6 100644
--- a/Year 3/Internet of things/goam/main/main.c
+++ b/Year 3/Internet of things/goam/main/main.c
@@ -17,6 +17,7 @@
#include "ptc06.h"
#include "buttons.h"
#include "display.h"
+#include "wifi.h"
void print_chip_data() {
/* Print chip information */
@@ -62,6 +63,10 @@ void take_photo() {
void app_main(void)
{
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
+ printf("Starting up!\n");
+
+ wifi_init();
ptc06_init();
buttons_init();
diff --git a/Year 3/Internet of things/goam/main/wifi.c b/Year 3/Internet of things/goam/main/wifi.c
new file mode 100644
index 0000000..cf60a29
--- /dev/null
+++ b/Year 3/Internet of things/goam/main/wifi.c
@@ -0,0 +1,141 @@
+#include "wifi.h"
+#include <string.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/event_groups.h"
+#include "esp_system.h"
+#include "esp_wifi.h"
+#include "esp_event.h"
+#include "esp_log.h"
+#include "nvs_flash.h"
+
+#define EXAMPLE_ESP_MAXIMUM_RETRY 3
+
+#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HUNT_AND_PECK
+#define EXAMPLE_H2E_IDENTIFIER ""
+#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK
+
+
+/* FreeRTOS event group to signal when we are connected*/
+static EventGroupHandle_t s_wifi_event_group;
+
+/* The event group allows multiple bits for each event, but we only care about two events:
+ * - we are connected to the AP with an IP
+ * - we failed to connect after the maximum amount of retries */
+#define WIFI_CONNECTED_BIT BIT0
+#define WIFI_FAIL_BIT BIT1
+
+static const char *TAG = "wifi station";
+
+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) {
+ esp_wifi_connect();
+ } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
+ if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) {
+ esp_wifi_connect();
+ s_retry_num++;
+ ESP_LOGI(TAG, "retry to connect to the AP");
+ } else {
+ xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
+ }
+ ESP_LOGI(TAG,"connect to the AP fail");
+ } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
+ ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
+ ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
+ s_retry_num = 0;
+ xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
+ }
+}
+
+static void nvs_init() {
+ 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);
+}
+
+static void netif_init() {
+ ESP_ERROR_CHECK(esp_netif_init());
+
+ ESP_ERROR_CHECK(esp_event_loop_create_default());
+ esp_netif_create_default_wifi_sta();
+}
+
+static void wifi_init_staic_station() {
+ ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
+
+ wifi_config_t wifi_config = {
+ .sta = {
+ .ssid = EXAMPLE_ESP_WIFI_SSID,
+ .password = EXAMPLE_ESP_WIFI_PASS,
+ /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8).
+ * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
+ * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
+ * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
+ */
+ .threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
+ .sae_pwe_h2e = ESP_WIFI_SAE_MODE,
+ .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
+ },
+ };
+ ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
+}
+
+static esp_event_handler_instance_t instance_any_id;
+static esp_event_handler_instance_t instance_got_ip;
+
+static void wifi_init_events() {
+ 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));
+}
+
+void wifi_init() {
+ nvs_init();
+ netif_init();
+
+ wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
+ ESP_ERROR_CHECK(esp_wifi_init(&cfg));
+
+ s_wifi_event_group = xEventGroupCreate();
+ wifi_init_events();
+
+ wifi_init_static_station();
+
+ ESP_ERROR_CHECK(esp_wifi_start());
+
+ /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
+ * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
+ EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
+ WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
+ pdFALSE,
+ pdFALSE,
+ portMAX_DELAY);
+
+ /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
+ * happened. */
+ if (bits & WIFI_CONNECTED_BIT) {
+ ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
+ EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
+ } else if (bits & WIFI_FAIL_BIT) {
+ ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
+ EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
+ } else {
+ ESP_LOGE(TAG, "UNEXPECTED EVENT");
+ }
+}
diff --git a/Year 3/Internet of things/goam/main/wifi.h b/Year 3/Internet of things/goam/main/wifi.h
new file mode 100644
index 0000000..8bcc36e
--- /dev/null
+++ b/Year 3/Internet of things/goam/main/wifi.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void wifi_init();