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
19
static
const
char
*
TAG
=
"main"
;
20
29
void
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
{
50
ds3231_datetime_t
dt;
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
}
ds3231_init
esp_err_t ds3231_init(void)
Добавляет DS3231 на общую I2C-шину и проверяет доступность.
Definition
ds3231.c:89
ds3231_get_temperature
esp_err_t ds3231_get_temperature(float *temp_c)
Прочитать температуру с встроенного датчика DS3231.
Definition
ds3231.c:184
ds3231_get_time
esp_err_t ds3231_get_time(ds3231_datetime_t *dt)
Прочитать текущие дату и время из DS3231.
Definition
ds3231.c:128
ds3231_is_oscillator_stopped
esp_err_t ds3231_is_oscillator_stopped(bool *stopped)
Проверить, был ли остановлен осциллятор (потеря питания / батареи).
Definition
ds3231.c:201
ds3231.h
Драйвер часов реального времени Maxim DS3231 (I2C).
ethernet_start
esp_err_t ethernet_start(void)
Инициализирует и запускает Ethernet на плате WT32-ETH01.
Definition
ethernet.c:174
ethernet.h
Публичный интерфейс модуля Ethernet для WT32-ETH01.
i2c_bus_init
esp_err_t i2c_bus_init(void)
Создаёт master-шину I2C (идемпотентно).
Definition
i2c_bus.c:16
i2c_bus.h
Общая I2C-шина master (I2C_NUM_0) для всех периферийных устройств.
i2c_cmd_device_init
esp_err_t i2c_cmd_device_init(void)
Добавляет LCM как устройство на общую шину (i2c_bus_init при необходимости).
Definition
i2c_cmd_device.c:37
i2c_cmd_device_start
esp_err_t i2c_cmd_device_start(void)
Запускает задачу циклической отправки команд на LCM.
Definition
i2c_cmd_device.c:73
i2c_cmd_device.h
Периодическая отправка команд на LCM по общей I2C-шине.
TAG
static const char * TAG
Тег для сообщений ESP_LOG в этом модуле
Definition
main.c:19
app_main
void app_main(void)
Главная функция приложения ESP-IDF.
Definition
main.c:29
modbus_app_start
esp_err_t modbus_app_start(void)
Инициализирует Modbus master и запускает задачу опроса шины.
Definition
modbus_app.c:121
modbus_app.h
Modbus RTU master на RS485.
ds3231_datetime_t
Дата и время DS3231.
Definition
ds3231.h:21
ds3231_datetime_t::month
uint8_t month
1…12
Definition
ds3231.h:23
ds3231_datetime_t::date
uint8_t date
1…31
Definition
ds3231.h:24
ds3231_datetime_t::weekday
uint8_t weekday
1…7
Definition
ds3231.h:25
ds3231_datetime_t::year
uint16_t year
2000…2099
Definition
ds3231.h:22
ds3231_datetime_t::hour
uint8_t hour
0…23
Definition
ds3231.h:26
ds3231_datetime_t::minute
uint8_t minute
0…59
Definition
ds3231.h:27
ds3231_datetime_t::second
uint8_t second
0…59
Definition
ds3231.h:28
main
main.c
Generated by
1.11.0