Files
DistributedCollectorGateway/main/main.c

101 lines
3.1 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "RS-485-SP3485EEN.h"
#include "ETH_CH390H.h"
#include "MQTT_ESP.h"
#include "STATUS_LED.h"
#include "MODBUS_ESP.h"
#include "SNTP_ESP.h"
#include "FLASH_SPIFS.h"
#include "OFFLINE_STORAGE.h"
#define TAG "main"
void app_main(void)
{
// 1. 初始化LED最先初始化让用户知道设备已上电
status_led_init();
status_led_blink_mode(1, 1); // LED1 快闪:系统启动中
status_led_blink_mode(2, 0); // LED2 慢闪:等待初始化
ESP_ERROR_CHECK(nvs_flash_init());
// 初始化SPIFFS文件系统
ESP_LOGI(TAG, "正在初始化SPIFFS文件系统...");
ESP_ERROR_CHECK(flash_spiffs_init());
// 初始化离线存储模块
ESP_LOGI(TAG, "正在初始化离线存储模块...");
ESP_ERROR_CHECK(offline_storage_init());
// 初始化以太网,这里包含了 esp_netif_init();和esp_event_loop_create_default();
eth_init();
// 初始化RS485
init_specific_rs485_channel(0); // 初始化通道0
start_rs485_rx_task_for_channel(0, 5, 8192); // 为通道0启动接收任务增加栈大小
// 等待网络连接建立
ESP_LOGI(TAG, "正在等待网络连接...");
esp_netif_t *eth_netif = esp_netif_get_handle_from_ifkey("ETH_DEF"); // 获取默认以太网接口
// 循环等待直到获得IP地址
while (true)
{
esp_netif_ip_info_t ip_info;
if (esp_netif_get_ip_info(eth_netif, &ip_info) == ESP_OK && ip_info.ip.addr != 0)
{
ESP_LOGI(TAG, "网络已连接IP地址: " IPSTR, IP2STR(&ip_info.ip));
break;
}
ESP_LOGI(TAG, "正在等待IP地址分配...");
vTaskDelay(pdMS_TO_TICKS(1000)); // 等待1秒后重试
}
// 初始化SNTP时间同步服务
ESP_LOGI(TAG, "正在初始化SNTP时间同步服务...");
sntp_esp_init();
// 等待时间同步完成最长等待10秒
if (sntp_esp_wait_sync(10000)) {
ESP_LOGI(TAG, "时间同步完成");
} else {
ESP_LOGW(TAG, "时间同步超时,使用本地时间");
}
ESP_LOGI(TAG, "正在启动MQTT客户端...");
// 启动MQTT客户端
mqtt_app_start();
// 网络连接成功后
status_led_set(1, 1); // LED1 常亮:网络正常
// MQTT 启动后
status_led_blink_mode(2, 2); // LED2 心跳:系统运行正常
// ============================
// 配置并标记设备状态上报任务将在MQTT连接后自动启动
// ============================
if (mqtt_start_device_status_task(10000) == pdPASS) {
ESP_LOGI(TAG, "设备状态上报任务已配置将在MQTT连接后自动启动");
} else {
ESP_LOGE(TAG, "配置设备状态上报任务失败");
}
// ============================
// 启动离线数据补传任务
// ============================
if (mqtt_start_offline_upload_task() == pdPASS) {
ESP_LOGI(TAG, "离线数据上传任务已启动");
} else {
ESP_LOGE(TAG, "启动离线数据上传任务失败");
}
ESP_LOGI(TAG, "正在等待MQTT发送MODBUS轮询命令...");
for (;;)
{
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}