需求分析
- 客户端进入室内后能够主动发现服务(如,环境服务,灯光服务)
- 各种服务可以有不同的载体(如:由不同设备提供)
- 各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)
- 客户端可以是移动 APP ,可以是桌面软件 。。。
技术可行性分析
发现服务: UDP 广播 + 自定义协议
- 客户端主动广播服务查询协议包
- 服务设备接收到协议包,回复协议内容及协议使用方式
服务自由增减:自定义协议
- 服务设备遵循相同的协议:数据传输协议,服务提供模式,等
- 客户端通过协议使用服务,无需关心服务设备的形态及位置
基础设施
提供服务的设备(嵌入式,服务器,PC,等)必须具备联网能力,且遵循服务协议。
系统概要设计
交互流程
系统详细设计
服务发现
- 客户端主动广播服务发现数据包
- 客户端主动广播服务发现数据包
服务应答
- 服务设备将本机 IP 及能够提供的服务信息发回客户端
- 服务设备将本机 IP 及能够提供的服务信息发回客户端
客户端详细设计
- 通过广播服务发现数据包,收集当前环境的服务信息
- 可用服务通过“菜单”方式呈现,并提示服务使用方式
- 选择服务后,连接到对应设备,通过协议消息发送服务请求命令
- 收到设备回复后,断开设备连接(请求 - 应答)
服务端详细设计
联网模块
- 设备提供服务前,必须联网(无线 or 有线)
服务前端
- 接收服务发现数据包,并应答当前设备服务信息
服务后端
- 服务设备驱动,如:温湿度传感器驱动,灯光控制驱动,等
硬件选型
这里展示使用的小熊派,运行 openharmony 。可以不必关心硬件,直接在 PC 编写相同网络功能可执行文件即可
服务设备软件架构设计
服务设备启动流程
几个问题
- 设备上运行什么操作系统?
- 设备运行的操作系统如何创建多个并行执行任务?
- 设备如何通过 wifi 联网?
- 设备上的网络编程通过什么接口完成?
OpenHarmony 是什么
开放原子基金会 (OpenAtom Foundation)旗下开源项目
- 定位是一个面项全场景的开源分布式操作系统
项目包含了分布式操作系统所需的全部能力
- 包括内核层、系统服务层、应用框架层
- 华为及众多贡献者,在开源社区内直接贡献
- 轻量系统:硬件资源极其有限,支持的设备最小内存为 128KiB。可支撑的产品如智能家居领域的连接类模组、传感器设备、穿戴类设备等。
- 小型系统:面项应用处理器的设备,支持的设备最小内存为 1MBiB。可支撑的产品如智能家居领域的 IP Camera、电子猫眼、路由器以及智慧出行的行车记录仪等。
- 标准系统:面项应用处理器例如 Arm Cortex-A 的设备,支持的设备最小内存为 128MiB, 可以提供增强的交互能力、3D GPU 以及硬件合成能力、更多控件以及动效更丰富的图形能力、完整的应用框架。可支撑的产品如高端的冰箱显示屏。
OpenHarmony 轻量级系统应用开发精要
- 系统组件裁剪与配置
.//vendor/hisilicon/hispark_pegasus/config.json
- 板载功能裁剪与配置
.//device/hisilicon/hispark_pegasus/sdk_liteis/build/config/usr_config.mk
- 在
application/sample/wifi-iot/app
目录下新建工程目录 (如:demo_server) - 工程目录下新建
BUILD.gn
文件 - 修改
application
目录下的BUILD.gn
文件画图
- 注册入口函数
- 创建任务
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
static void* Init_Task(const char* arg)
{
printf("[dt4sw] Hello, D.T.Software!\n");
return arg;
}
static void Main_Entry(void)
{
osThreadAttr_t attr = {0};
attr.name = "Init Task";
attr.stack_size = 1024 * 4;
attr.priority = 20;
if( osThreadNew((osThreadFunc_t)Init_Task, NULL, &attr) == NULL )
{
printf("[dt4sw] Failed to create task!\n");
}
}
SYS_RUN(Main_Entry);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。