《Linux网络开发必学教程》19_分布式智能家居项目雏形

需求分析

  • 客户端进入室内后能够主动发现服务(如,环境服务,灯光服务)
  • 各种服务可以有不同的载体(如:由不同设备提供)
  • 各种服务之间,服务与客户端之间完全无耦合(服务可自由增减)
  • 客户端可以是移动 APP ,可以是桌面软件 。。。

技术可行性分析

  • 发现服务: UDP 广播 + 自定义协议

    • 客户端主动广播服务查询协议包
    • 服务设备接收到协议包,回复协议内容及协议使用方式
  • 服务自由增减:自定义协议

    • 服务设备遵循相同的协议:数据传输协议,服务提供模式,等
    • 客户端通过协议使用服务,无需关心服务设备的形态及位置

基础设施

提供服务的设备(嵌入式,服务器,PC,等)必须具备联网能力,且遵循服务协议。

系统概要设计

image.png

交互流程

image.png

系统详细设计

  • 服务发现

    • 客户端主动广播服务发现数据包
      image.png
  • 服务应答

    • 服务设备将本机 IP 及能够提供的服务信息发回客户端
      image.png

客户端详细设计

  • 通过广播服务发现数据包,收集当前环境的服务信息
  • 可用服务通过“菜单”方式呈现,并提示服务使用方式
  • 选择服务后,连接到对应设备,通过协议消息发送服务请求命令
  • 收到设备回复后,断开设备连接(请求 - 应答)

服务端详细设计

  • 联网模块

    • 设备提供服务前,必须联网(无线 or 有线)
  • 服务前端

    • 接收服务发现数据包,并应答当前设备服务信息
  • 服务后端

    • 服务设备驱动,如:温湿度传感器驱动,灯光控制驱动,等

硬件选型

这里展示使用的小熊派,运行 openharmony 。可以不必关心硬件,直接在 PC 编写相同网络功能可执行文件即可

image.png

服务设备软件架构设计

image.png

服务设备启动流程

image.png

几个问题

  • 设备上运行什么操作系统?
  • 设备运行的操作系统如何创建多个并行执行任务?
  • 设备如何通过 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 文件画图

image.png


  • 注册入口函数
  • 创建任务
#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);

C_经典C_数据结构_现代C_现代C_多线程_C_内存管理_Linux网络编程
C语言进阶;2. 进入C++的世界;3. 数据结构编写高质量代码;4. C++11/14 新增语法及标准库讲解;5. C++1...

阿里山神木的种子在3000年前已经埋下,今天不过是看到当年注定的结果,为了未来的自己,今天就埋下一颗...

719 声望
97 粉丝
0 条评论
推荐阅读
《Linux网络开发必学教程》29_动态创建交互页面
问题:如何创建浏览器中的文件展示页面?再论前端页面交互页面分析静态部分表格,页面结构动态部分文件浏览路径 (Path)文件列表(Table) {代码...} 文件列表分析静态表格标题行表格列表结构动态部分表格行数据 {...

TianSong

又一款眼前一亮的Linux终端工具!
今天给大家介绍一款最近发现的功能十分强大,颜值非常高的一款终端工具。这个神器我是在其他公众号文章上看到的,但他们都没把它的强大之处介绍明白,所以我自己体验一波后,再向大家分享自己的体验。

良许6阅读 1.8k

Linux终端居然也可以做文件浏览器?
大家好,我是良许。在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在【笑脸】最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码。当然我不懂 Java 后端,因此就写写自己擅长的 Shell 脚本。但...

良许1阅读 2.1k

Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。

ThinkSNS1阅读 2.4k

confluence7.2.1的部署与迁移---呕心沥血版
Confluence是一个专业的企业知识管理与协同软件,也可以用于构建企业wiki。使用简单,但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论,信息推送。 到官网下载最新版本,截止目前...

暗涌阅读 7.8k

C++编译器和链接器的完全指南
C++是一种强类型语言,它的编译和链接是程序开发过程中不可或缺的两个环节。编译器和链接器是两个非常重要的概念。本文将详细介绍C++中的编译器和链接器以及它们的工作原理和使用方法。

小万哥2阅读 1k

封面图
Ubuntu 20.04 读写 Windows 10 共享目录(qbit)
本文实验环境中,Windows 操作系统版本为 Windows Server 2016,应该对 Windows 10 和 Windows Server 2019 同样适用

qbit1阅读 6.3k

阿里山神木的种子在3000年前已经埋下,今天不过是看到当年注定的结果,为了未来的自己,今天就埋下一颗...

719 声望
97 粉丝
宣传栏