67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
模拟ESP32发送16宫格热成像数据响应
|
||
用于测试APP端的UDP接收功能
|
||
"""
|
||
|
||
import socket
|
||
import json
|
||
import time
|
||
import threading
|
||
|
||
def create_mock_thermal_data():
|
||
"""创建模拟的16宫格热成像数据"""
|
||
import random
|
||
grid = []
|
||
for i in range(16):
|
||
# 生成25-45度的随机温度
|
||
temp = round(25 + random.random() * 20, 1)
|
||
grid.append(temp)
|
||
|
||
return {
|
||
"type": "thermal_grid",
|
||
"timestamp": int(time.time() * 1000),
|
||
"grid": grid
|
||
}
|
||
|
||
def udp_server():
|
||
"""UDP服务器,监听APP请求并响应"""
|
||
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||
server_socket.bind(('0.0.0.0', 8899)) # 监听8899端口
|
||
|
||
print("模拟ESP32 UDP服务器启动,监听端口8899...")
|
||
print("等待APP端连接...")
|
||
|
||
while True:
|
||
try:
|
||
# 接收请求
|
||
data, addr = server_socket.recvfrom(1024)
|
||
command = data.decode('utf-8').strip()
|
||
|
||
print(f"收到来自 {addr} 的命令: {command}")
|
||
|
||
if command == "GET_THERMAL_GRID":
|
||
# 创建模拟数据
|
||
thermal_data = create_mock_thermal_data()
|
||
response = json.dumps(thermal_data)
|
||
|
||
# 发送响应
|
||
server_socket.sendto(response.encode('utf-8'), addr)
|
||
print(f"已发送16宫格数据到 {addr}: {len(response)} 字节")
|
||
print(f"数据预览: {thermal_data['grid'][:4]}...")
|
||
else:
|
||
# 其他命令的简单响应
|
||
response = f"OK:{command}"
|
||
server_socket.sendto(response.encode('utf-8'), addr)
|
||
print(f"已响应: {response}")
|
||
|
||
except Exception as e:
|
||
print(f"服务器错误: {e}")
|
||
|
||
if __name__ == "__main__":
|
||
try:
|
||
udp_server()
|
||
except KeyboardInterrupt:
|
||
print("\n服务器已停止")
|