RCM — ESP32 Room Controller
WT32-ETH01 firmware
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1
10#include "esp_log.h"
11#include "nvs_flash.h"
12#include "ethernet.h"
13#include "ds3231.h"
14#include "i2c_bus.h"
15#include "i2c_cmd_device.h"
16#include "modbus_app.h"
17
19static const char *TAG = "main";
20
29void app_main(void)
30{
31 /* Инициализация раздела NVS во flash-памяти */
32 esp_err_t ret = nvs_flash_init();
33 if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
34 /* Раздел переполнен или изменилась схема — стираем и инициализируем заново */
35 ESP_ERROR_CHECK(nvs_flash_erase());
36 ret = nvs_flash_init();
37 }
38 ESP_ERROR_CHECK(ret);
39
40 ESP_LOGI(TAG, "Starting WT32-ETH01");
41
42 /* Одна master-шина на GPIO14/15; LCM (0x7F) и DS3231 (0x68) — два устройства.
43 * Отсутствие RTC не должно валить прошивку: LCM работает дальше. */
44 ESP_ERROR_CHECK(i2c_bus_init());
45
46 ret = ds3231_init();
47 if (ret != ESP_OK) {
48 ESP_LOGW(TAG, "RTC unavailable (%s) — continuing without DS3231", esp_err_to_name(ret));
49 } else {
51 float temp_c = 0.0f;
52 bool osf = false;
53
54 if (ds3231_is_oscillator_stopped(&osf) == ESP_OK && osf) {
55 ESP_LOGW(TAG, "DS3231 OSF set — time may be invalid, set via ds3231_set_time()");
56 }
57 if (ds3231_get_time(&dt) == ESP_OK) {
58 ESP_LOGI(TAG, "RTC %04u-%02u-%02u %02u:%02u:%02u (wd=%u)",
59 dt.year, dt.month, dt.date, dt.hour, dt.minute, dt.second, dt.weekday);
60 }
61 if (ds3231_get_temperature(&temp_c) == ESP_OK) {
62 ESP_LOGI(TAG, "DS3231 temp %.2f C", temp_c);
63 }
64 }
65
66 ESP_ERROR_CHECK(i2c_cmd_device_init());
67 ESP_ERROR_CHECK(i2c_cmd_device_start());
68
69 ESP_ERROR_CHECK(modbus_app_start());
70
71 /* Запуск Ethernet: драйвер PHY, netif, обработчики событий, DHCP */
72 ESP_ERROR_CHECK(ethernet_start());
73}
esp_err_t ds3231_init(void)
Добавляет DS3231 на общую I2C-шину и проверяет доступность.
Definition ds3231.c:89
esp_err_t ds3231_get_temperature(float *temp_c)
Прочитать температуру с встроенного датчика DS3231.
Definition ds3231.c:184
esp_err_t ds3231_get_time(ds3231_datetime_t *dt)
Прочитать текущие дату и время из DS3231.
Definition ds3231.c:128
esp_err_t ds3231_is_oscillator_stopped(bool *stopped)
Проверить, был ли остановлен осциллятор (потеря питания / батареи).
Definition ds3231.c:201
Драйвер часов реального времени Maxim DS3231 (I2C).
esp_err_t ethernet_start(void)
Инициализирует и запускает Ethernet на плате WT32-ETH01.
Definition ethernet.c:174
Публичный интерфейс модуля Ethernet для WT32-ETH01.
esp_err_t i2c_bus_init(void)
Создаёт master-шину I2C (идемпотентно).
Definition i2c_bus.c:16
Общая I2C-шина master (I2C_NUM_0) для всех периферийных устройств.
esp_err_t i2c_cmd_device_init(void)
Добавляет LCM как устройство на общую шину (i2c_bus_init при необходимости).
esp_err_t i2c_cmd_device_start(void)
Запускает задачу циклической отправки команд на LCM.
Периодическая отправка команд на LCM по общей I2C-шине.
static const char * TAG
Тег для сообщений ESP_LOG в этом модуле
Definition main.c:19
void app_main(void)
Главная функция приложения ESP-IDF.
Definition main.c:29
esp_err_t modbus_app_start(void)
Инициализирует Modbus master и запускает задачу опроса шины.
Definition modbus_app.c:121
Modbus RTU master на RS485.
Дата и время DS3231.
Definition ds3231.h:21
uint8_t month
1…12
Definition ds3231.h:23
uint8_t date
1…31
Definition ds3231.h:24
uint8_t weekday
1…7
Definition ds3231.h:25
uint16_t year
2000…2099
Definition ds3231.h:22
uint8_t hour
0…23
Definition ds3231.h:26
uint8_t minute
0…59
Definition ds3231.h:27
uint8_t second
0…59
Definition ds3231.h:28