国产ARM/RISCV与OpenHarmony物联网项目(五)IA1节点开发

发布于:2025-06-20 ⋅ 阅读:(24) ⋅ 点赞:(0)

一、终端节点功能设计

1. 功能说明

终端节点设计的是基于鸿蒙操作系统的 TCP 服务器程序,用于监测采集光照强度、温度和湿度数据并提供远程控制功能。主要功能包括:

环境数据采集:通过 E53_IA1 传感器模块采集光照强度、温度和湿度数据

智能控制:根据光照强度自动控制灯光开关

网络通信

  • 连接 WiFi 网络

  • 建立 TCP 服务器监听客户端连接

  • 实现自定义消息协议进行数据交换

远程控制:支持三种命令类型:

  • 上传数据:返回传感器数据

  • 控制命令:手动控制灯光

  • 设置命令:调整光照阈值和控制模式

2. 软硬件环境

板卡详细开发说明:OpenHarmony轻量系统--BearPi-Nano开发板网络程序测试

终端节点采用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 服务器主任务

实现

  1. 连接 WiFi 网络

  2. 创建、绑定和监听 TCP 套接字

  3. 接受客户端连接并处理

关键参数:端口号 8888,最大连接数 3

调用关系:被TCPServerDemo启动,内部调用WifiConnectcmd_proc等函数

e53_Task()

功能:初始化 E53_IA1 传感器并读取数据

实现

  1. 初始化传感器

  2. 读取光照、温度和湿度数据

  3. 根据光照强度自动控制灯光

关键参数:光照阈值lux_min,自动控制标志auto_control

调用关系:在 TCP 连接处理循环中被调用

2. 网络通信函数
WifiConnect(char *ssid, char *psk)

功能:连接到指定的 WiFi 网络

参数:WiFi 名称和密码

调用关系:由TCPServerTask调用

cmd_proc(int new_fd)

功能:处理客户端发送的命令

实现

  1. 接收客户端消息

  2. 解析消息格式和内容

  3. 根据消息类型执行不同操作

  4. 发送响应消息

关键参数:客户端套接字描述符

调用关系:在 TCP 连接处理循环中被调用

3. 消息协议函数
Message结构体

功能:定义自定义消息协议格式

成员

  • frame_header[2]:帧头 (0xAA, 0x55)

  • msg_type:消息类型

  • node_id:节点 ID

  • data_len:数据长度

  • data[10]:数据内容

  • checksum:校验和

calculate_checksum(Message *msg)

功能:计算消息的校验和

实现:对消息所有字段进行异或运算

调用关系:在parse_messagepack_message中使用

parse_message(Message *msg)

功能:解析消息并验证其有效性

实现

  1. 检查帧头是否正确

  2. 计算并验证校验和

返回值: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_Taskcmd_proc中被调用

5. 函数间调用关系总结

启动流程
APP_FEATURE_INITTCPServerDemoTCPServerTask

主循环
TCPServerTaskWifiConnect → 创建服务器 → 接受连接 → e53_Taskcmd_proc

命令处理
cmd_procparse_message → 根据消息类型执行不同操作 → pack_message → 发送响应

自动控制
e53_Task → 读取传感器数据 → 根据光照强度调用Light_StatusSet

 

 


网站公告

今日签到

点亮在社区的每一天
去签到