一、终端节点功能设计
1. 功能说明
终端节点设计的是基于鸿蒙操作系统的 TCP 服务器程序,用于监测采集光照强度、温度和湿度数据并提供远程控制功能。主要功能包括:
环境数据采集:通过 E53_IA1 传感器模块采集光照强度、温度和湿度数据
智能控制:根据光照强度自动控制灯光开关
网络通信:
连接 WiFi 网络
建立 TCP 服务器监听客户端连接
实现自定义消息协议进行数据交换
远程控制:支持三种命令类型:
上传数据:返回传感器数据
控制命令:手动控制灯光
设置命令:调整光照阈值和控制模式
2. 软硬件环境
终端节点采用BearPi-HM_Nano开发板
BearPi-HM_Nano开发板是一块专门为HarmonyOS设计的HarmonyOS开发板,板载高度集成的2.4GHz WLAN SoC芯片Hi3861,并板载NFC电路及标准的E53接口,标准的E53接口可扩展智能加湿器、智能台灯、智能安防、智能烟感等案例。
节点项目代码在鸿蒙的lite-os系统源码的sample目录下,完整路径如下:
~/lite-os-dev/bearpi-hm_nano/applications/BearPi/BearPi-HM_Nano/sample/D4_iot_tcp_server_ia1
代码工程目录如下,build.gn是编译配置文件,tcp_server_demo.c是主功能程序,E53_IAIA1.c程序实现节点数据采集功能,wifi_connect.c程序实现wifi网络通信基础功能。
3. 程序运行
程序下载到节点板卡后,通过type-c数据线接电脑,电脑接到板卡对应的串口终端,可看到调试运行信息。
节点串口显示节点分配到的IP地址:
飞腾派网络通信程序通过上述IP地址连接到终端节点:
节点串口显示接收到飞腾派的通信协议数据:
二、程序流程分析与设计
程序的主要执行路径:
1. 初始化阶段
连接 WiFi 网络
创建 TCP 服务器(socket、bind、listen)
2. 主循环
等待客户端连接
连接建立后进入数据采集和命令处理循环
3. 数据采集
读取传感器数据(光照、温度、湿度)
根据光照强度和控制模式自动控制灯光
4. 命令处理
接收并解析客户端发送的消息
根据消息类型执行不同操作:
上传数据:返回传感器数据
控制命令:手动控制灯光
设置命令:调整光照阈值和控制模式
发送响应消息
5. 连接管理
检查连接状态
若连接断开,返回等待新连接
若连接保持,继续数据采集和命令处理
三、程序功能分析与设计
1. 初始化与系统函数
TCPServerDemo()
功能:创建 TCP 服务器任务
实现:配置线程属性并启动
TCPServerTask
线程关键参数:线程栈大小 10240 字节,优先级普通
调用关系:通过
APP_FEATURE_INIT
在系统启动时自动调用
TCPServerTask()
功能:TCP 服务器主任务
实现:
连接 WiFi 网络
创建、绑定和监听 TCP 套接字
接受客户端连接并处理
关键参数:端口号 8888,最大连接数 3
调用关系:被
TCPServerDemo
启动,内部调用WifiConnect
、cmd_proc
等函数
e53_Task()
功能:初始化 E53_IA1 传感器并读取数据
实现:
初始化传感器
读取光照、温度和湿度数据
根据光照强度自动控制灯光
关键参数:光照阈值
lux_min
,自动控制标志auto_control
调用关系:在 TCP 连接处理循环中被调用
2. 网络通信函数
WifiConnect(char *ssid, char *psk)
功能:连接到指定的 WiFi 网络
参数:WiFi 名称和密码
调用关系:由
TCPServerTask
调用
cmd_proc(int new_fd)
功能:处理客户端发送的命令
实现:
接收客户端消息
解析消息格式和内容
根据消息类型执行不同操作
发送响应消息
关键参数:客户端套接字描述符
调用关系:在 TCP 连接处理循环中被调用
3. 消息协议函数
Message结构体
功能:定义自定义消息协议格式
成员:
frame_header[2]
:帧头 (0xAA, 0x55)
msg_type
:消息类型
node_id
:节点 ID
data_len
:数据长度
data[10]
:数据内容
checksum
:校验和
calculate_checksum(Message *msg)
功能:计算消息的校验和
实现:对消息所有字段进行异或运算
调用关系:在
parse_message
和pack_message
中使用
parse_message(Message *msg)
功能:解析消息并验证其有效性
实现:
检查帧头是否正确
计算并验证校验和
返回值:0 表示成功,-1 表示帧头错误,-2 表示校验和错误
调用关系:在
cmd_proc
中被调用
pack_message(Message *msg, ...)
功能:封装消息
参数:消息类型、节点 ID、数据长度和数据内容
实现:填充消息结构体并计算校验和
调用关系:在cmd_proc中构造响应消息时使用
print_message(Message *msg)
功能:调试输出消息内容
实现:打印消息类型、节点 ID、数据长度和数据内容
调用关系:用于调试目的
4. 设备控制函数
Light_StatusSet(Status status)
功能:控制灯光开关
参数:ON (开) 或 OFF (关)
调用关系:在
e53_Task
和cmd_proc
中被调用
5. 函数间调用关系总结
启动流程:
APP_FEATURE_INIT
→TCPServerDemo
→TCPServerTask
主循环:
TCPServerTask
→WifiConnect
→ 创建服务器 → 接受连接 →e53_Task
→cmd_proc
命令处理:
cmd_proc
→parse_message
→ 根据消息类型执行不同操作 →pack_message
→ 发送响应自动控制:
e53_Task
→ 读取传感器数据 → 根据光照强度调用Light_StatusSet