diff --git a/Core/Html/index.html b/Core/Html/index.html
index c69d5f5..5ac1c7a 100644
--- a/Core/Html/index.html
+++ b/Core/Html/index.html
@@ -1,5 +1,6 @@
R"(
+
+
参数设置
-
- Network Status: %s
+
)"
\ No newline at end of file
diff --git a/Core/Src/http_server.c b/Core/Src/http_server.c
index feb2628..edfff04 100644
--- a/Core/Src/http_server.c
+++ b/Core/Src/http_server.c
@@ -75,19 +75,15 @@ static void send_chunk_end(uint8_t sn)
static void handle_config_page(uint8_t sn)
{
char buffer[CHUNK_SIZE];
- bool is_connected = (wizphy_getphylink() == PHY_LINK_ON);
- char* link_status = is_connected ? "Connected" : "Disconnected";
- char* status_class = is_connected ? "connected" : "disconnected";
// 先将完整的HTML内容格式化到一个临时缓冲区
- char full_page[8192]; // 确保足够大
- int total_len = sprintf(full_page, index_html,
+ char full_page[1024*15]; // 确保足够大
+ int total_len = sprintf(full_page, index_html,0,
gWIZNETINFO.mac[0], gWIZNETINFO.mac[1], gWIZNETINFO.mac[2],
gWIZNETINFO.mac[3], gWIZNETINFO.mac[4], gWIZNETINFO.mac[5],
gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3],
gWIZNETINFO.sn[0], gWIZNETINFO.sn[1], gWIZNETINFO.sn[2], gWIZNETINFO.sn[3],
- gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3],
- status_class, link_status);
+ gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3]);
// 发送响应头
send_chunked_response_header(sn);
@@ -145,6 +141,118 @@ void http_server_init(void)
listen(HTTP_SERVER_SOCKET);
}
+
+
+// 三通阀结构体
+typedef struct {
+ uint8_t angle1; // 阀门1角度 (120/210)
+ uint8_t angle2; // 阀门2角度 (120/210)
+} ValveStatus;
+
+// 泵结构体
+typedef struct {
+ uint8_t status1; // 泵1运行状态 (停止/顺时针/逆时针)
+ uint8_t status2; // 泵2运行状态 (停止/顺时针/逆时针)
+ uint8_t speed1; // 泵1速度百分比 (0-100)
+ uint8_t speed2; // 泵2速度百分比 (0-100)
+} PumpStatus;
+
+// 设备状态结构体
+// 1.下挂设备在位状态,在位为1,否则为0,当前为气泡感应器,1个字节
+// 2.两个三通阀实时角度,每个角度占用1个字节,只能为210或120
+// 3.泵状态,1表示泵顺时针转动中,2表示泵逆时针转动中,0表示停止,两个泵共2个字节
+// 4.泵速度,2个字节,每个泵的速度占用一个字节,表示当前泵设定的速度百分比
+// 5.气泡感应器读值,1表示监测到气泡,0表示没有气泡,共1个字节
+// 6.急停按键状态,1个字节,1为按下,0为正常。
+// 7.错误码1个字节,用于监控当前系统总体状态,如通信异常、控制异常等等,具体错误码待定
+// 8.初始化状态,1个字节, 0表示初始化执行中,1表示初始化执行成功,2表示初始化执行失败。
+typedef struct {
+ uint8_t deviceStatus; // 下挂设备状态
+ ValveStatus valves; // 两个三通阀状态
+ PumpStatus pumps; // 两个泵状态
+ uint8_t bubbleStatus; // 气泡状态
+ uint8_t stopStatus; // 急停状态
+ uint8_t errorCode; // 错误码
+ uint8_t initStatus; // 初始化状态
+} DeviceStatus;
+DeviceStatus deviceStatus={
+ .deviceStatus=1,
+ .valves={
+ .angle1=0,
+ .angle2=0
+ },
+ .pumps={
+ .status1=0,
+ .status2=0,
+ .speed1=60,
+ .speed2=70
+ },
+ .bubbleStatus=0,
+ .stopStatus=0,
+ .errorCode=0,
+ .initStatus=1
+};
+
+// 发送JSON响应头
+static void send_json_response_header(uint8_t sn)
+{
+ const char* header =
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Type: application/json\r\n"
+ "Access-Control-Allow-Origin: *\r\n"
+ "Connection: close\r\n" // 明确指示关闭连接
+ "Cache-Control: no-cache, no-store\r\n" // 禁止缓存
+ "\r\n";
+
+ send_all(sn, (uint8_t*)header, strlen(header));
+}
+
+// 处理状态请求
+static void handle_status_request(uint8_t sn)
+{
+ char json_buffer[512];
+ // DeviceStatus deviceStatus; // 确保能访问到deviceStatus变量
+
+ // 构建JSON响应
+ int len = sprintf(json_buffer,
+ "{"
+ "\"deviceStatus\":%d,"
+ "\"valves\":{"
+ "\"angle1\":%d,"
+ "\"angle2\":%d"
+ "},"
+ "\"pumps\":{"
+ "\"status1\":%d,"
+ "\"status2\":%d,"
+ "\"speed1\":%d,"
+ "\"speed2\":%d"
+ "},"
+ "\"bubbleStatus\":%d,"
+ "\"stopStatus\":%d,"
+ "\"errorCode\":%d,"
+ "\"initStatus\":%d"
+ "}",
+ deviceStatus.deviceStatus,
+ deviceStatus.valves.angle1,
+ deviceStatus.valves.angle2,
+ deviceStatus.pumps.status1,
+ deviceStatus.pumps.status2,
+ deviceStatus.pumps.speed1,
+ deviceStatus.pumps.speed2,
+ deviceStatus.bubbleStatus,
+ deviceStatus.stopStatus,
+ deviceStatus.errorCode,
+ deviceStatus.initStatus
+ );
+
+ // 发送响应
+ send_json_response_header(sn);
+ send_all(sn, (uint8_t*)json_buffer, len);
+
+ // 发送完成后主动关闭连接
+ disconnect(sn);
+}
+
void http_server_task(void)
{
uint8_t buffer[2048];
@@ -153,13 +261,16 @@ void http_server_task(void)
switch(status)
{
+ case SOCK_INIT:
+ listen(HTTP_SERVER_SOCKET);
+ break;
+
case SOCK_LISTEN:
// 等待连接
break;
case SOCK_ESTABLISHED:
{
- // 接收数据
if((size = getSn_RX_RSR(HTTP_SERVER_SOCKET)) > 0)
{
size = recv(HTTP_SERVER_SOCKET, buffer, sizeof(buffer));
@@ -169,11 +280,14 @@ void http_server_task(void)
parse_http_request(buffer, size, &req);
if(req.method == HTTP_GET) {
- handle_config_page(HTTP_SERVER_SOCKET);
+ if(strcmp(req.uri, "/status") == 0) {
+ handle_status_request(HTTP_SERVER_SOCKET);
+ } else {
+ handle_config_page(HTTP_SERVER_SOCKET);
+ }
}
else if(req.method == HTTP_POST && strcmp(req.uri, "/config") == 0) {
update_network_config((char*)req.body);
- // 重定向回配置页面
send_chunked_response_header(HTTP_SERVER_SOCKET);
send_chunk(HTTP_SERVER_SOCKET,
"
",
@@ -191,7 +305,6 @@ void http_server_task(void)
case SOCK_CLOSED:
socket(HTTP_SERVER_SOCKET, Sn_MR_TCP, HTTP_SERVER_PORT, 0);
- listen(HTTP_SERVER_SOCKET);
break;
}
}
\ No newline at end of file