initial commit

This commit is contained in:
Thomas Bishop 2026-01-13 18:30:18 +00:00
commit 18a57c6aa2
9 changed files with 193 additions and 0 deletions

75
domestic-climate-monitor/.gitignore vendored Normal file
View file

@ -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

View file

@ -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)

View file

@ -0,0 +1,2 @@
idf_component_register(SRCS "main.c" "wifi.c"
INCLUDE_DIRS ".")

View file

@ -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();
}
}

View file

@ -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");
}
}

View file

@ -0,0 +1,6 @@
#ifndef WIFI_H
#define WIFI_H
void wifi_connect(void);
#endif // WIFI_H