104 lines
3.5 KiB
C
104 lines
3.5 KiB
C
#ifndef __ESP8266_H
|
||
#define __ESP8266_H
|
||
|
||
#include "stm32f10x.h"
|
||
|
||
// 定义布尔类型,方便返回状态
|
||
#define ESP8266_SUCCESS 1
|
||
#define ESP8266_FAIL 0
|
||
|
||
// 时间结构体
|
||
typedef struct {
|
||
uint16_t year;
|
||
uint8_t month;
|
||
uint8_t day;
|
||
uint8_t hour;
|
||
uint8_t minute;
|
||
uint8_t second;
|
||
} ESP8266_DateTime;
|
||
|
||
/*
|
||
--- 公共函数接口 ---
|
||
*/
|
||
|
||
/**
|
||
* @brief 对ESP8266模块进行基础设置
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:初始化 ESP8266 模块并配置基础 AT 工作模式。
|
||
uint8_t ESP8266_Setup(void);
|
||
|
||
/**
|
||
* @brief 命令ESP8266连接到指定的WiFi网络
|
||
* @param ssid 要连接的WiFi名称 (SSID)
|
||
* @param password WiFi的密码
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:控制 ESP8266 连接指定 WiFi 网络。
|
||
uint8_t ESP8266_ConnectWiFi(const char* ssid, const char* password);
|
||
|
||
/**
|
||
* @brief 命令ESP8266连接到HTTP服务器(新增)
|
||
* @param ip 服务器的IP地址
|
||
* @param port 服务器的端口号
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:控制 ESP8266 与指定 HTTP 服务器建立 TCP 连接。
|
||
uint8_t ESP8266_ConnectHTTPServer(const char* ip, const char* port);
|
||
|
||
/**
|
||
* @brief 通过ESP8266发送HTTP POST请求(新增 - 加密版本)
|
||
* @param encrypted_data 加密后的Base64数据
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:通过 ESP8266 发送加密后的考勤 HTTP POST 数据。
|
||
uint8_t ESP8266_SendEncryptedData(const char* encrypted_data);
|
||
|
||
/**
|
||
* @brief 检查TCP连接是否正常
|
||
* @retval 1 表示已连接, 0 表示未连接
|
||
*/
|
||
// 函数作用:检查 ESP8266 当前 TCP/网络连接是否仍然可用。
|
||
uint8_t ESP8266_CheckConnection(void);
|
||
|
||
/**
|
||
* @brief 从网络获取当前时间(NTP/SNTP)
|
||
* @param datetime 时间结构体指针,用于存储获取的时间
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:从网络时间服务或服务端接口获取当前日期时间。
|
||
uint8_t ESP8266_GetNetworkTime(ESP8266_DateTime* datetime);
|
||
|
||
/**
|
||
* @brief 发送HTTP GET请求并接收响应(新增)
|
||
* @param path 请求路径(如"/api/v1/config/time-slots")
|
||
* @param response_buffer 接收响应数据的缓冲区
|
||
* @param buffer_size 缓冲区大小
|
||
* @retval 1 表示成功, 0 表示失败
|
||
*/
|
||
// 函数作用:通过 ESP8266 发起 HTTP GET 请求并把响应写入缓冲区。
|
||
uint8_t ESP8266_HttpGet(const char* path, char* response_buffer, uint16_t buffer_size);
|
||
|
||
/**
|
||
* @brief 查询学生在指定时段是否已签到(服务器端查重)
|
||
* @param student_id 学号
|
||
* @param slot_start 时段开始时间(格式"HH:MM")
|
||
* @param slot_end 时段结束时间(格式"HH:MM")
|
||
* @retval 1 表示已签到(重复), 0 表示未签到
|
||
*/
|
||
// 函数作用:调用服务端查重接口,判断学生在指定时段是否已签到。
|
||
uint8_t ESP8266_CheckDuplicate(const char* student_id, const char* slot_start, const char* slot_end);
|
||
|
||
/**
|
||
* @brief 下载今日已签到学生列表(开机时调用)
|
||
* @param slot_start 时段开始时间(格式"HH:MM")
|
||
* @param slot_end 时段结束时间(格式"HH:MM")
|
||
* @param student_ids 输出:学号数组(逗号分隔的字符串)
|
||
* @param buffer_size 缓冲区大小
|
||
* @retval 成功下载的学号数量
|
||
*/
|
||
// 函数作用:下载指定时段内今日已签到学生列表,用于本地去重缓存恢复。
|
||
uint8_t ESP8266_DownloadTodayRecords(const char* slot_start, const char* slot_end, char* student_ids, uint16_t buffer_size);
|
||
|
||
#endif
|