commit 18a57c6aa241aa2dfbf3878500bb61700d13e26e Author: thomasabishop Date: Tue Jan 13 18:30:18 2026 +0000 initial commit diff --git a/domestic-climate-monitor/.cache/clangd/index/main.c.E68D462CC33038EF.idx b/domestic-climate-monitor/.cache/clangd/index/main.c.E68D462CC33038EF.idx new file mode 100644 index 0000000..a88d36b Binary files /dev/null and b/domestic-climate-monitor/.cache/clangd/index/main.c.E68D462CC33038EF.idx differ diff --git a/domestic-climate-monitor/.cache/clangd/index/wifi.c.B2A3B654A729D972.idx b/domestic-climate-monitor/.cache/clangd/index/wifi.c.B2A3B654A729D972.idx new file mode 100644 index 0000000..7168681 Binary files /dev/null and b/domestic-climate-monitor/.cache/clangd/index/wifi.c.B2A3B654A729D972.idx differ diff --git a/domestic-climate-monitor/.cache/clangd/index/wifi.h.77B3E4CA2E09F668.idx b/domestic-climate-monitor/.cache/clangd/index/wifi.h.77B3E4CA2E09F668.idx new file mode 100644 index 0000000..3c09a64 Binary files /dev/null and b/domestic-climate-monitor/.cache/clangd/index/wifi.h.77B3E4CA2E09F668.idx differ diff --git a/domestic-climate-monitor/.gitignore b/domestic-climate-monitor/.gitignore new file mode 100644 index 0000000..c47f1da --- /dev/null +++ b/domestic-climate-monitor/.gitignore @@ -0,0 +1,75 @@ +# ESP-IDF Build Output +build/ +sdkconfig +sdkconfig.old +*.pyc + +# Dependencies +dependencies.lock +managed_components/ + +# Flash Download Tool +flash_project_args + +# VS Code +.vscode/ +*.code-workspace + +# Eclipse +.cproject +.project +.settings/ + +# CLion +.idea/ +cmake-build-*/ + +# Emacs +*~ +\#*\# +.\#* + +# Vim +*.swp +*.swo +*~ + +# macOS +.DS_Store + +# Windows +Thumbs.db + +# Python virtual environments (for ESP-IDF) +venv/ +.venv/ +env/ +.env/ + +# Component build artifacts +**/*.o +**/*.a +**/*.so +**/*.elf +**/*.bin +**/*.map + +# Logs +*.log + +# Menuconfig backups +sdkconfig.defaults.* +!sdkconfig.defaults + +# pytest cache +.pytest_cache/ +__pycache__/ + +# Coverage files +*.gcno +*.gcda +*.gcov + +# Secrets + +secrets.h diff --git a/domestic-climate-monitor/CMakeLists.txt b/domestic-climate-monitor/CMakeLists.txt new file mode 100644 index 0000000..41db6bb --- /dev/null +++ b/domestic-climate-monitor/CMakeLists.txt @@ -0,0 +1,7 @@ + +cmake_minimum_required(VERSION 3.16) +# This env var is sourced from: +# . /opt/esp-idf/export.sh +# when the compilation terminal session starts +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(domestic-climate-monitor) diff --git a/domestic-climate-monitor/main/CMakeLists.txt b/domestic-climate-monitor/main/CMakeLists.txt new file mode 100644 index 0000000..e33dbe5 --- /dev/null +++ b/domestic-climate-monitor/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "main.c" "wifi.c" + INCLUDE_DIRS ".") diff --git a/domestic-climate-monitor/main/main.c b/domestic-climate-monitor/main/main.c new file mode 100644 index 0000000..2071422 --- /dev/null +++ b/domestic-climate-monitor/main/main.c @@ -0,0 +1,26 @@ +#include "esp_log.h" +#include "freertos/FreeRTOS.h" +#include "freertos/event_groups.h" +#include "freertos/task.h" +#include "nvs_flash.h" + +#include "wifi.h" + +static const char *TAG = "main"; +void setup(void) { + ESP_ERROR_CHECK(nvs_flash_init()); + wifi_connect(); +} + +void loop(void) { + ESP_LOGI(TAG, "Loop running..."); + vTaskDelay(pdMS_TO_TICKS(1000)); +} + +void app_main(void) { + setup(); + + while (1) { + loop(); + } +} diff --git a/domestic-climate-monitor/main/wifi.c b/domestic-climate-monitor/main/wifi.c new file mode 100644 index 0000000..90efa38 --- /dev/null +++ b/domestic-climate-monitor/main/wifi.c @@ -0,0 +1,77 @@ +#include "esp_event.h" +#include "esp_log.h" +#include "esp_wifi.h" +#include "freertos/event_groups.h" +#include "freertos/task.h" +#include "secrets.h" + +// `TAG` is common naming convention for logs in ESP-IDF +static const char *TAG = "wifi"; // Logs are coming from this wifi module. TAG = +// common naming convention for logs in ESP-IDF +static EventGroupHandle_t s_wifi_event_group; +static int s_retry_num = 0; + +#define WIFI_CONNECTED_BIT BIT0 +#define WIFI_FAIL_BIT BIT1 +#define MAX_RETRY 5 + +static void wifi_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 < MAX_RETRY) { + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "Retrying connection..."); + } else { + xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); + } + } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { + ESP_LOGI(TAG, "Connected! Got IP"); + s_retry_num = 0; + xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + } +} + +void wifi_connect(void) { + s_wifi_event_group = xEventGroupCreate(); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + esp_netif_create_default_wifi_sta(); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + esp_event_handler_instance_t instance_any_id; + esp_event_handler_instance_t instance_got_ip; + ESP_ERROR_CHECK(esp_event_handler_instance_register( + WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register( + IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, + &instance_got_ip)); + + wifi_config_t wifi_config = { + .sta = + { + .ssid = SECRETS_WIFI_SSID, + .password = SECRETS_WIFI_PASS, + }, + }; + 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()); + + // Wait for connection + EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, + WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, + pdFALSE, pdFALSE, portMAX_DELAY); + + if (bits & WIFI_CONNECTED_BIT) { + ESP_LOGI(TAG, "WiFi connected successfully"); + } else { + ESP_LOGE(TAG, "WiFi connection failed"); + } +} diff --git a/domestic-climate-monitor/main/wifi.h b/domestic-climate-monitor/main/wifi.h new file mode 100644 index 0000000..3e25cf1 --- /dev/null +++ b/domestic-climate-monitor/main/wifi.h @@ -0,0 +1,6 @@ +#ifndef WIFI_H +#define WIFI_H + +void wifi_connect(void); + +#endif // WIFI_H