当前位置: 首页 > news >正文

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言

1.1 项目背景

随着智能家居技术的发展和人们对高品质生活的追求日益增长,智能鱼缸作为一种结合了科技与自然美的家居装饰品,正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸,它不仅能够提供一个安全舒适的环境让鱼儿健康生长,还能让用户通过手机应用远程管理和监控鱼缸的各种状态。通过集成多种传感器和执行机构,这款智能鱼缸能够自动监测水质、维持适宜的水温和氧气水平,并且还能实现自动投喂、自动换水、鱼缸壁清洁等功能,极大地减轻了养鱼爱好者的工作负担,提升了养鱼的乐趣和便捷性。

考虑到现代人忙碌的生活节奏和对个性化需求的追求,本项目集成了华为云的智慧生活App,这使得用户可以通过手机轻松地设置鱼缸的各项参数,包括但不限于恒温温度、换水阈值、投喂间隔和量等,甚至还能根据用户所选养的鱼种自动优化这些设置。此外,为了进一步提升用户体验,还引入了全景视频监控功能,用户可以在手机端360度无死角地观察鱼缸内部情况;同时,鱼缸还支持氛围灯调节,可通过华为云的小艺助手进行智慧联动控制,营造出不同的观赏效果。整体而言,这款智能鱼缸不仅代表了智能家居技术的最新进展,也为养鱼爱好者提供了一个更加智能化、人性化的养鱼体验。

image-20240725114501219

1.2 目的与目标

本项目的目标是设计并开发一款基于华为云智慧生活生态链的智能鱼缸,为用户提供一个高度自动化、智能化的养鱼体验。该智能鱼缸集成了多项先进技术,包括水质监测、远程控制、自动维护等功能,解决传统鱼缸在养鱼过程中遇到的一系列问题,如频繁的手动维护、难以精确控制的水质条件等。

通过本项目的实施具体目标:

  • 水质监测与自动调节:实现鱼缸水体含氧量、TDS值等关键水质指标的实时监测,并能够根据检测结果自动调节含氧量、水质等,以确保鱼儿的健康生长环境。

  • 远程控制与智能化管理:通过华为云智慧生活App,用户可以随时随地通过智能手机远程监控和控制鱼缸的状态,包括设置自动投喂的时间间隔、调节鱼缸内的温度等,实现智能化管理。

  • 自动维护功能:开发自动换水、鱼缸壁清洁等维护功能,减少用户的日常维护工作,提高养鱼效率和体验。

  • 全景视频监控:利用四个内置摄像头,为用户提供360度全景视频监控功能,使用户能够在手机端全方位地观察鱼缸内部情况,增强观赏性和互动性。

  • 个性化设置与一键优化:根据用户选择的鱼种类型,自动优化鱼缸的各项参数设置,如恒温温度、换水阀值、投喂间隔等,提供更符合特定鱼类需求的养鱼环境。

  • 智能化联动与场景编排:支持与华为云智慧生活App的深度集成,实现与其他智能设备的联动控制,为用户提供更加丰富的智慧化场景体验。

  • 稳定的网络连接与安全性保障:采用G模块保证稳定的网络连接,同时确保用户数据的安全性和隐私保护。

  • 可靠的电源管理方案:通过内置锂电池和外置电源的双电源供电模式,确保即使在突发断电的情况下,智能鱼缸也能持续运行,保持鱼缸内环境的稳定。

1.3 功能需求

  • 含氧量检测:集成含氧量传感器,实时监测鱼缸中水的含氧量,并通过华为云平台向用户手机发送数据更新。

  • 远程投喂与自动投喂:支持用户通过手机应用设置自动投喂的时间间隔,实现远程或自动投喂鱼食的功能。

  • 自动充氧:根据含氧量检测结果自动开启或关闭充氧装置,确保水中的含氧量维持在适宜水平。

  • 自动换水:配备自动换水系统,当检测到水质不佳时,自动启动换水过程,保持水质清洁。

  • 鱼缸壁自动清洁:设计一套基于舵机和抹布的自动清洁系统,定期清理鱼缸壁上的污垢。

  • 自动恒温:具备温度传感器和加热装置,允许用户通过手机应用远程设定恒定的水温。

  • TDS值检测:安装TDS值传感器,监测水中的溶解固体含量,并将数据上传至华为云平台。

  • 视频全场景监控:在鱼缸内部安装四个摄像头,通过拼接算法生成全景视频,用户可在手机端进行360度观看。

  • 手机APP控制:开发专用的手机应用程序,集成华为云智慧生活App,支持用户根据鱼的种类一键设置鱼缸参数。

  • 场景联动与设备管理:支持设备添加、远程控制、状态查看、设备共享等功能,并可与其他华为生态链设备联动使用。

  • 氛围灯控制:支持通过手机应用开启或关闭鱼缸内的氛围灯,增加观赏性,并支持华为云“小艺”助手的语音控制。

  • 4G联网模块:采用4G模块实现设备与华为云平台之间的稳定通信。

  • 主控芯片:不限制。

  • 双电源供电方案:支持内置锂电池与外置电源的双重供电机制,确保断电情况下仍能正常运行。

  • 华为云物联网服务器:通过华为云的智慧生活服务器实现数据存储、分析与远程访问。

1.4 接入智慧生活APP

帮助文档:https://device.harmonyos.com/cn/docs/documentation/DevicePartner-Guides/ai-life-app-dev-overview-0000001367032228

智慧生活App作为华为全场景智慧体验的重要入口,可以实现华为自研设备与生态伙伴设备的统一管理。通过开发H5接入智慧生活App,为消费者带来如下功能体验:

  • **设备添加:**用户可以通过智慧生活App快速发现设备并添加设备,简单易用。
  • **设备管控:**用户添加设备后,可以通过智慧生活App实现远程控制设备、查看状态、分类管理、共享设备、删除设备等。
  • **场景联动:**通过场景编排可以实现不同产品、不同功能的联动,为用户提供智慧化的场景体验。

接入原理

  1. 通过线上或线下方式开发H5,并上传至Device Partner平台。平台会将H5开发包推送至HarmonyOS Connect云。
  2. 消费者通过智慧生活App调用云端的H5开发包,从而实现对设备的管理和控制。

image-20240725111945921

二. 系统概述

2.1 系统架构

为了更好地说明本项目的系统架构,我们可以将其分为几个主要部分:硬件架构、软件架构以及网络架构。下面是对这些部分的具体描述:

(1) 硬件架构

  • 主控单元:

    • 微控制器 (MCU): 使用STM32L431RCT6作为核心处理器。
    • 电源管理模块: 包括电池充电电路、稳压电路等。
    • 4G通信模块: Air724UG 4G模块用于与华为云平台进行数据交换。
  • 环境监测与控制系统:

    • 水质监测传感器:
      • 含氧量传感器
      • 温度传感器
      • TDS(总溶解固体)传感器
    • 自动控制系统:
      • 自动充氧泵
      • 加热棒
      • 自动投喂器
      • 水质净化过滤系统
      • 鱼缸壁自动清洁系统
  • 视觉监控系统:

    • 多个高清摄像头用于全方位监控鱼缸内部情况。
    • 图像处理单元用于图像拼接和传输。
  • 用户交互界面:

    • LED显示屏显示当前状态。
    • 按钮用于本地控制和调试。
  • 备用电源:

    • 内置锂电池提供不间断供电。

(2) 软件架构

  • 嵌入式系统软件:

    • 嵌入式操作系统(如FreeRTOS)用于任务调度。
    • 设备驱动程序支持各种传感器和执行器。
    • 4G通信协议栈实现数据传输。
  • 云平台软件:

    • 华为云IoT平台用于设备接入、数据存储、消息推送等。
    • 数据分析与处理模块。
    • 用户认证与权限管理。
  • 移动应用:

    • 客户端应用(iOS/Android)用于用户远程监控和控制。
    • 用户界面设计与交互逻辑。
    • 与华为云平台的接口实现。

(3) 网络架构

  • 本地网络:

    • 4G网络连接主控单元与华为云平台。
    • Wi-Fi连接供用户在本地网络内进行控制。
  • 云端网络:

    • 华为云IoT平台作为中心节点处理所有数据。
    • 数据安全加密传输。
  • 远程用户接入:

    • 移动应用通过互联网与华为云平台交互。
    • 用户数据同步与更新。

(4) 系统交互流程

  1. 数据采集:
    • 传感器持续监测水质、含氧量、温度等数据。
    • 摄像头捕捉鱼缸内部画面。
  2. 数据处理与传输:
    • MCU收集数据并进行初步处理。
    • 通过4G模块将数据发送至华为云IoT平台。
  3. 云平台处理:
    • IoT平台接收数据并存储。
    • 数据分析后产生控制指令或通知。
  4. 用户控制:
    • 用户通过移动应用获取实时数据。
    • 用户通过移动应用发送控制命令。
  5. 设备响应:
    • IoT平台将控制指令发送给设备。
    • MCU接收指令并控制相关硬件执行动作。

2.2 关键组件介绍

(1)主控单元

  • 微控制器 (MCU): 如STM32系列,负责处理来自各个传感器的数据,并控制执行器的动作。
  • 通信模块:
    • 4G通信模块: 如Air724UG,用于与外部网络(例如华为云平台)建立连接。
    • Wi-Fi模块: 用于本地网络连接,方便用户通过智能手机或其他设备访问系统。
  • 电源管理单元: 包括电池充电电路、稳压电路等,确保系统的稳定运行。

(2)环境监测与控制系统

  • 水质监测传感器:
    • pH值传感器
    • 温度传感器
    • 溶解氧(DO)传感器
    • 电导率(TDS)传感器
  • 自动控制系统:
    • 自动充氧泵: 根据DO水平自动调节氧气供应。
    • 加热棒: 保持水温在适宜范围内。
    • 自动投喂器: 根据设定的时间和分量自动投喂饲料。
    • 水质净化过滤系统: 维护水质清洁。
    • 鱼缸壁自动清洁系统: 清除鱼缸壁上的藻类和其他污垢。

(3)视觉监控系统

  • 高清摄像头: 用于捕捉鱼缸内的视频流。
  • 图像处理单元: 对摄像头捕获的图像进行处理,识别鱼类的行为或健康状况。

(4)用户交互界面

  • LED显示屏: 显示系统状态、监测数据等信息。
  • 触摸屏: 允许用户直接与系统互动,设置参数或查看详细数据。
  • 按钮: 提供基本的本地控制功能,如紧急停机。

(5)远程监控与管理

  • 华为云IoT平台:
    • 提供数据存储、处理和分析能力。
    • 支持设备管理和远程控制功能。
    • 保证数据的安全性和可靠性。
  • 移动应用程序:
    • 用户可以通过智能手机或平板电脑访问系统。
    • 实现远程监控、接收警报、调整系统设置等功能。

(6)数据安全与加密

  • 加密算法: 采用SSL/TLS等加密技术保障数据传输的安全。
  • 用户认证: 通过用户名和密码等方式验证用户的合法性。

(7)备用电源

  • 内置电池: 在停电时为系统提供不间断供电。

2.3 工作原理

(1)环境监测:

  • 含氧量检测:
    • 使用溶解氧传感器实时监测鱼缸水体中的含氧量。
    • 传感器将数据传送给主控芯片STM32L431RCT6。
  • TDS值检测:
    • 通过TDS传感器监测水中的溶解固体含量。
    • 数据同样被送至主控芯片进行处理。

(2)水质控制与维护:

  • 自动充氧:
    • 当含氧量低于预设阈值时,STM32L431RCT6控制充氧泵启动。
    • 充氧泵工作直到含氧量恢复到理想水平。
  • 自动换水:
    • 通过TDS值和其它水质参数判断是否需要更换水体。
    • 自动换水系统根据需要更换部分水体,以维持良好的水质。
  • 鱼缸壁自动清洁:
    • 采用舵机和抹布组合,定时清洁鱼缸壁上的污垢。

(3)远程监控与控制:

  • 视频全场景监控:
    • 鱼缸内部安装的四个摄像头捕捉鱼缸内部画面。
    • 通过图像处理单元将多路视频流合成全景视频。
    • 视频流通过4G模块上传至华为云服务器。
  • 手机APP控制:
    • 用户通过华为云智慧生活App远程查看鱼缸状态。
    • 用户可以设置恒温温度、换水阈值、投喂间隔等参数。
    • 通过App接收水质异常报警等信息。

(4)用户定制与一键设置:

  • 自动参数设置:
    • 用户根据鱼的种类选择相应的养鱼模式。
    • App自动调整各项参数以适应所选鱼种的需求。

(5)联动与场景编排:

  • 设备管理与控制:
    • 用户可以通过智慧生活App添加设备、查看状态、远程控制。
    • 支持设备共享和删除等功能。
  • 场景联动:
    • 通过场景编排实现不同功能的联动,例如定时开启氛围灯、自动投喂等。

(6)通信与网络:

  • 设备联网:
    • 4G模块Air724UG用于设备与华为云服务器之间的数据传输。
  • 数据传输与处理:
    • 传感器数据通过主控芯片处理后上传至华为云IoT平台。
    • 平台进行数据分析、存储,并将结果反馈给用户。

(7)电源管理:

  • 双电源供电:
    • 内置锂电池提供不间断供电。
    • 外置电源适配器用于日常供电。
    • 当外部电源中断时,锂电池自动接管供电。

(8)安全保障:

  • 数据加密:
    • 传输至华为云的数据采用加密技术保护。
  • 用户认证:
    • 通过智慧生活App进行用户身份验证。

三. 硬件设计

3.1 主控单元

本项目的主控单元是整个智能鱼缸系统的中枢神经,它负责收集来自各个传感器的数据、处理这些数据并据此作出决策来控制执行器的动作。主控单元的核心是STM32L431RCT6微控制器,这是一款高性能且低功耗的微控制器,非常适合应用于需要实时处理能力及长电池寿命的应用场合。

主控单元的设计围绕STM32L431RCT6微控制器展开,该微控制器基于Arm® Cortex®-M4内核,具备FPU(浮点运算单元)和DSP指令集,能够在处理复杂的计算任务时提供出色的性能。它还拥有丰富的外设接口,如USART、SPI、I2C、ADC等,这些接口使得主控单元能够轻松地与外部传感器和其他组件进行通信。为了满足智能鱼缸的长时间运行需求,STM32L431RCT6还提供了先进的电源管理模式,可在保证系统正常运行的同时显著降低功耗。

在硬件层面,主控单元集成了多种传感器,包括但不限于溶解氧传感器、TDS传感器、温度传感器等,这些传感器持续监测鱼缸内的水质参数和环境条件。一旦这些传感器捕获到相关数据,它们会立即将数据发送给主控单元。主控单元通过内置的ADC转换器将模拟信号转换为数字信号,然后由STM32L431RCT6进行数据处理。基于这些数据,主控单元能够判断水质是否达到预设的标准,如果发现任何参数偏离了理想的范围,它会迅速采取行动,例如启动充氧泵增加水中氧气含量、激活自动换水机制以保持水质清洁,或者控制鱼缸壁自动清洁装置清除附着物等。

除了处理传感器数据外,主控单元还需要与执行器进行交互,如控制充氧泵、自动换水系统和清洁装置等。这些执行器的驱动通常通过PWM(脉宽调制)信号来实现,而STM32L431RCT6提供了足够的PWM输出通道来支持这些操作。此外,主控单元还负责与用户界面进行交互,包括接收用户的设置指令并通过Wi-Fi或4G模块与远程服务器进行通信,以实现对智能鱼缸的远程监控和控制。

为了确保系统的稳定性和安全性,主控单元还包括电源管理电路、看门狗定时器、实时时钟RTC等组件。电源管理电路确保即使在外部电源不稳定的情况下也能提供稳定的电压供应;看门狗定时器则在发生故障时复位系统,防止死锁情况的发生;实时时钟RTC则用于提供准确的时间基准,这对于定时任务和数据记录至关重要。

主控单元不仅是一个数据处理中心,还是一个协调者,它连接了所有的传感器和执行器,并通过高效的算法和精确的控制逻辑确保智能鱼缸能够自动维持一个适宜鱼类生活的环境。通过这种方式,用户可以享受到更加轻松愉快的养鱼体验,同时确保鱼儿能够在一个健康稳定的环境中茁壮成长。

3.2 传感器

3.2.1 含氧量检测器

含氧量检测传感器是智能鱼缸系统中非常重要的组成部分之一,它用于监测鱼缸中水体的溶解氧(Dissolved Oxygen, DO)含量。准确测量水中的溶解氧含量对于维持鱼缸内鱼类的健康至关重要,因为溶解氧水平直接影响到鱼类的呼吸和生存。下面详细介绍含氧量检测传感器的工作原理及其在本项目中的应用。

含氧量检测传感器通常采用极谱法或光学法来进行测量。在本项目中,我们使用的是极谱法传感器,因为它在水体监测中广泛使用并且具有较高的准确性和稳定性。

工作原理

极谱法含氧量检测传感器的工作原理基于电化学反应。这种传感器通常包含两个电极——参考电极和工作电极,以及电解液。工作电极(通常是铂或金制成的圆盘或线圈)浸没在水中,而参考电极(通常是银/氯化银电极)则与工作电极相连。电解液(通常是氯化钾溶液)用于在两电极之间形成电导通路。

当传感器工作时,会在工作电极上施加一个恒定的电压(通常为0.6V到0.8V),这会在电极表面产生一个电流。在这个电压下,溶解在水中的氧气在工作电极上被还原,产生电子和离子。这一过程可以表示为:

KaTeX parse error: Undefined control sequence: \[ at position 2: \̲[̲ \text{O}_2 + 2…
产生的电子流经外部电路到达参考电极,而在参考电极处,这些电子被消耗掉。因此,通过测量流过电路的电流大小,就可以推算出水体中溶解氧的浓度。电流与溶解氧浓度之间存在线性关系,这意味着电流的大小可以直接转化为溶解氧的浓度值。

为了确保测量的准确性,含氧量检测传感器通常会配备温度补偿电路。这是因为水体中的溶解氧浓度会受到温度的影响,温度升高会导致溶解氧浓度下降。通过温度补偿,传感器可以校正温度变化对测量结果的影响,从而提供更准确的读数。

在本项目中,含氧量检测传感器会持续监测鱼缸中的溶解氧含量,并将数据发送给主控单元STM32L431RCT6。主控单元会对这些数据进行处理,并根据设定的阈值来决定是否需要启动充氧泵来增加水中的溶解氧含量。此外,主控单元还会将这些数据上传至华为云IoT平台,以便用户通过手机应用实时监控鱼缸的含氧量,并在必要时采取措施。

通过这种方式,含氧量检测传感器确保了鱼缸中的溶解氧水平始终处于适宜鱼类生存的最佳范围内,从而为鱼缸内的生物提供了一个健康稳定的居住环境。

3.2.2 TDS值检测器

TDS值检测器是智能鱼缸系统中的一个重要组成部分,用于监测水体中的总溶解固体(Total Dissolved Solids, TDS)含量。TDS值是指水中溶解的矿物质、盐分、金属离子等物质的总量,这些物质的存在会影响水质,进而影响鱼缸中鱼类的健康和生存。下面详细介绍TDS值检测器的工作原理及其在本项目中的应用。

工作原理

TDS值检测器的工作原理基于电导率测量。水是一种导体,其导电性取决于其中溶解的离子的数量。一般来说,水中溶解的离子越多,水的电导率就越高。TDS值检测器通过测量水的电导率来间接估算其中的TDS含量。电导率与TDS含量之间存在近似线性的关系,因此可以通过测量电导率来推算出TDS值。

具体过程

  1. 电导率测量

    • TDS值检测器通常包含一对电极,这两个电极被放置在待测水样中。
    • 当电流通过这两电极时,水中的溶解离子会携带电流从一个电极流向另一个电极。
    • 通过测量流过电极的电流强度,可以确定水的电导率。
  2. TDS值计算

    • 由于水的电导率与其中的TDS含量成正比关系,TDS值检测器会根据预先标定的系数(即转换因子)将电导率转换为TDS值。

    • 转换因子通常是经验确定的,它考虑了水体中可能存在的不同类型的溶解固体。

    • TDS值(mg/L)可以通过以下公式计算得出:
      KaTeX parse error: Undefined control sequence: \[ at position 2: \̲[̲ \text{TDS} = \…

    • 转换因子可能因水质的不同而有所变化,因此对于特定的水体类型,最好使用经过标定的转换因子。

  3. 温度补偿

    • 水的电导率会随温度的变化而变化,温度升高时电导率也会增加。
    • 因此,TDS值检测器通常会配备温度传感器,用于测量水温并进行温度补偿。
    • 温度补偿有助于确保测量结果的准确性,即使在温度变化的情况下也能得到稳定的TDS值。

在本项目中,TDS值检测器会持续监测鱼缸中的水质,并将数据发送给主控单元STM32L431RCT6。主控单元会对这些数据进行处理,并根据设定的阈值来决定是否需要启动自动换水系统来改善水质。此外,主控单元还会将这些数据上传至华为云IoT平台,以便用户通过手机应用实时监控鱼缸的TDS值,并在必要时采取措施。

通过这种方式,TDS值检测器确保了鱼缸中的水质始终处于适宜鱼类生存的最佳范围内,从而为鱼缸内的生物提供了一个健康稳定的居住环境。

3.2.3 温度传感器

在本项目中使用的温度传感器是DS18B20防水探头,这是一种非常流行的数字温度传感器,广泛应用于各种需要精确温度测量的场合,包括智能家居、工业控制等领域。下面详细介绍DS18B20防水探头的工作原理及其在智能鱼缸系统中的应用。

DS18B20防水探头的工作原理

DS18B20是一种单线数字温度传感器,它通过一根数据线(加上电源和地线)与微控制器进行通信。这种传感器的优点在于它只需要一个数据引脚就能与微控制器通信,大大简化了硬件连接。DS18B20的温度测量范围通常为-55°C 至 +125°C,精度可达±0.5°C,非常适合用于需要精确温度控制的应用。

  1. 通信协议

DS18B20采用了1-Wire(一总线)通信协议,这意味着它可以通过一根数据线与微控制器进行数据交换。1-Wire协议不仅减少了所需的引脚数量,还支持在同一根线上连接多个DS18B20传感器,只需通过每个传感器唯一的序列号进行区分即可。

  1. 内部结构

DS18B20内部包含一个温度敏感元件和一个1-Wire通信接口。当温度发生变化时,温度敏感元件会产生相应的电信号变化,然后通过1-Wire接口将这些变化转换为数字信号发送给微控制器。

  1. 测量过程
  • 初始化: 微控制器首先发送一个复位脉冲来初始化DS18B20,确保传感器处于准备状态。
  • ROM序列号: 接下来,微控制器发送一个ROM命令来识别DS18B20的唯一序列号,这是为了区分同一总线上的多个DS18B20传感器。
  • 温度转换: 微控制器发送温度转换命令(如0x44),DS18B20开始进行温度测量。在测量过程中,传感器会将温度转换为数字信号,并将其存储在其内部寄存器中。
  • 读取温度: 微控制器发送读取命令(如0xBE),DS18B20将测量结果从内部寄存器中读出并发送给微控制器。
  • 数据处理: 微控制器收到的温度数据是以16位二进制格式存储的,通常需要进行简单的数学运算才能转换为摄氏度或华氏度的温度值。
  1. 特点
  • 防水封装: 为了适用于鱼缸这种潮湿环境,DS18B20通常采用防水封装,确保传感器不会受到水分的影响。
  • 高精度: DS18B20的温度测量精度较高,可以满足智能鱼缸对温度控制的要求。
  • 低功耗: DS18B20在不进行温度测量时进入低功耗模式,这有助于延长电池寿命。

在智能鱼缸系统中的应用

在智能鱼缸系统中,DS18B20防水探头用于监测鱼缸内的水温。温度数据会被发送给主控单元STM32L431RCT6进行处理。主控单元根据接收到的温度数据,可以控制加热器的开启或关闭,以维持水温在适宜的范围内。此外,温度数据也会通过4G模块Air724UG上传至华为云IoT平台,用户可以通过智慧生活App实时查看鱼缸的温度,并根据需要设置恒温温度。

通过这种方式,DS18B20防水探头确保了智能鱼缸系统能够准确地监测并控制水温,为鱼缸内的生物提供一个健康稳定的居住环境。

3.4 通信模块

Air724UG 4G模块是智能鱼缸系统中用于实现无线数据传输的关键组件之一,它主要用于将鱼缸系统收集到的数据通过4G网络发送到华为云IoT平台,同时也支持从云平台接收指令。下面详细介绍Air724UG 4G模块的工作原理及其在本项目中的应用。

Air724UG 4G模块的工作原理

Air724UG是一款高性能的4G LTE Cat.4模块,支持全球多个频段,能够在全球范围内提供可靠的4G连接。该模块采用Quectel的芯片组,具有体积小巧、功耗低的特点,适合嵌入式应用。

1. 通信协议

Air724UG模块支持多种通信协议,包括TCP/IP、UDP、FTP、HTTP等,这些协议使得模块能够与远程服务器进行高效的数据交换。此外,它还支持AT命令集,允许主控单元通过简单的文本命令控制模块的操作。

2. 数据传输
  • 上行数据: 当鱼缸系统中的传感器收集到数据(如含氧量、TDS值、水温等)时,这些数据会被发送给主控单元STM32L431RCT6。
  • 数据处理: 主控单元会对数据进行初步处理,并将数据打包成适合传输的格式。
  • 下行数据: 主控单元通过串行接口(如UART)将打包后的数据发送给Air724UG模块。
  • 无线传输: Air724UG模块接收到数据后,会通过4G网络将数据发送到指定的服务器地址,即华为云IoT平台。
3. 指令接收
  • 指令发送: 华为云IoT平台可以向Air724UG模块发送指令,例如要求改变鱼缸的某些设置或执行特定任务。
  • 指令处理: Air724UG模块接收到指令后,通过串行接口将指令转发给主控单元。
  • 执行指令: 主控单元根据接收到的指令执行相应的操作,比如开启加热器、启动充氧泵等。
4. 网络连接

Air724UG模块支持多种4G LTE频段,可以根据所在地区的网络条件自动选择最优的频段进行连接。它还支持自动重连功能,确保在网络信号不稳定的情况下也能保持稳定的连接。

5. 电源管理

Air724UG模块具有较低的功耗特点,适合长期运行的应用场景。模块还支持多种省电模式,可以在不需要传输数据时进入低功耗状态,从而节省电力。

在智能鱼缸系统中的应用

在本项目中,Air724UG 4G模块的主要作用是作为鱼缸系统与华为云IoT平台之间的通信桥梁。当鱼缸中的传感器检测到数据时,这些数据会被主控单元STM32L431RCT6收集并处理。处理后的数据随后被发送给Air724UG模块,该模块通过4G网络将数据上传至华为云IoT平台。用户可以通过智慧生活App查看这些数据,并根据需要发送指令来控制鱼缸系统的各项功能。

此外,Air724UG模块还支持从华为云IoT平台接收指令,例如用户通过智慧生活App更改鱼缸的设置时,这些指令会被发送到模块,再由模块转发给主控单元执行相应的操作。

通过这种方式,Air724UG 4G模块确保了智能鱼缸系统能够实现远程监控和控制,为用户提供了一个高度自动化的养鱼体验。

四. 智慧生活App的用户界面

image-20240816114745705

4.1 智慧生活App集成

智慧生活App的H5设计有三种方式,包括公版卡片线上开发线下开发,便于伙伴根据时间情况进行选择。

总体而言,从公版卡片、线上开发到线下开发,开发过程所需的工作量递增、适用的产品范围更加广泛、能够实现的功能也更加丰富。

  • 公版卡片:平台根据物模型定义,直接自动生成。仅支持预览,不支持编辑。
  • 线上开发:平台提供低代码开发工具,可以根据物模型定义,自动生成符合设计规范的操作界面。开发者可以根据需求进行调整编排,快速实现期望的界面效果,提升H5开发效率。
  • 线下开发:如果线上开发能力不能满足伙伴需求、或者已有H5开发包(改造后即可满足要求),可以采用线下开发的方式。
分类公版卡片线上开发线下开发
适用范围-仅支持牙刷与智能水杯两种品类。与通信类型及产品品类相关,详见[支持线上开发的品类。适用于所有场景。
能力差异UX/UI设计自动生成,无需审核。根据物模型自动生成符合规范的操作界面,可在线调整组件、预览效果。设计稿无需提交审核。需要按照产品Profile文件与设计规范进行设计,并在平台提交UX和UI设计稿的审核。
H5开发仅支持预览,不支持编辑。支持在线配置功能项及对应参数。不支持二级页面的开发。需要按照Profile文件与UI设计文件进行功能开发。支持二级页面的开发。
H5调测线下调测。线下调测。线下调测。
H5开发包提交单击“下一步”提交。在线保存,并单击“下一步”提交。H5开发完成后,需按要求打包并上传至平台。

4.2 用户交互设计

公版卡片/线上开发

通过公版卡片或线上开发H5方式接入智慧生活App的操作流程如下:

图1 公版开发/线上开发H5流程

image-20240725112610984

线下开发H5

通过线下开发H5方式接入智慧生活App的操作流程如下:

图2 线下开发H5流程
image-20240725112528355

五、物联网服务器配置

华为云官网: https://www.huaweicloud.com/

打开官网,搜索物联网,就能快速找到 设备接入IoTDA

image-20221204193824815

5.1 物联网平台介绍

华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助我们快速构筑物联网解决方案。

使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台、业务应用和设备。

物联网平台作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备接口,实现设备的快速接入;同时提供强大的开放能力,支撑行业用户构建各种物联网解决方案。

设备可以通过固网、2G/3G/4G/5G、NB-IoT、Wifi等多种网络接入物联网平台,并使用LWM2M/CoAP、MQTT、HTTPS协议将业务数据上报到平台,平台也可以将控制命令下发给设备。

业务应用通过调用物联网平台提供的API,实现设备数据采集、命令下发、设备管理等业务场景。

img

5.2 开通物联网服务

地址: https://www.huaweicloud.com/product/iothub.html

image-20221204194233414

点击立即创建

image-20240117134653452

正在创建标准版实例,需要等待片刻。

image-20240117134729401

创建完成之后,点击实例名称。 可以看到标准版实例的设备接入端口和地址。

image-20240425180759670

在上面也能看到 免费单元的限制。

image-20240425180817704

开通之后,点击总览,也能查看接入信息。 我们当前设备准备采用MQTT协议接入华为云平台,这里可以看到MQTT协议的地址和端口号等信息。

image-20240425180845461

总结:

端口号:   MQTT (1883)| MQTTS (8883)	
接入地址:ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

**根据域名地址得到IP地址信息: **

打开Windows电脑的命令行控制台终端,使用ping 命令。ping一下即可。

Microsoft Windows [版本 10.0.19045.4170]
(c) Microsoft Corporation。保留所有权利。C:\Users\11266>ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com正在 Ping ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com [117.78.5.125] 具有 32 字节的数据:
来自 117.78.5.125 的回复: 字节=32 时间=35ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=36ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=36ms TTL=93
来自 117.78.5.125 的回复: 字节=32 时间=39ms TTL=93117.78.5.125 的 Ping 统计信息:数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):最短 = 35ms,最长 = 39ms,平均 = 36msC:\Users\11266>

MQTT协议接入端口号有两个,1883是非加密端口,8883是证书加密端口,单片机无法加载证书,所以使用1883端口比较合适。 接下来的ESP8266就采用1883端口连接华为云物联网平台。

5.3 创建产品

(1)创建产品

(2)填写产品信息

根据自己产品名字填写,下面的设备类型选择自定义类型。

image-20240612094809689

(3)产品创建成功

创建完成之后点击查看详情。

image-20240612095134263

(4)添加自定义模型

产品创建完成之后,点击进入产品详情页面,翻到最下面可以看到模型定义。

模型简单来说: 就是存放设备上传到云平台的数据。

你可以根据自己的产品进行创建。

比如:

烟雾可以叫  MQ2
温度可以叫  Temperature
湿度可以叫  humidity
火焰可以叫  flame
其他的传感器自己用单词简写命名即可。 这就是你的单片机设备端上传到服务器的数据名字。

先点击自定义模型。

image-20240612095517900

再创建一个服务ID。

image-20240612095542749

接着点击新增属性。

image-20240612095648815

image-20240612095711898

5.4 添加设备

产品是属于上层的抽象模型,接下来在产品模型下添加实际的设备。添加的设备最终需要与真实的设备关联在一起,完成数据交互。

(1)注册设备

image-20240425181935561

(2)根据自己的设备填写

image-20240612100115167

(3)保存设备信息

创建完毕之后,点击保存并关闭,得到创建的设备密匙信息。该信息在后续生成MQTT三元组的时候需要使用。

image-20240612100128061

(4)设备创建完成

image-20240612100147232

(5)设备详情

image-20240612100202960

image-20240612100217236

5.5 MQTT协议主题订阅与发布

(1)MQTT协议介绍

当前的设备是采用MQTT协议与华为云平台进行通信。

MQTT是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。目前MQTT拥有各种平台和设备上的客户端,已经形成了初步的生态系统。

MQTT是一种消息队列协议,使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合,相对于其他协议,开发更简单;MQTT协议是工作在TCP/IP协议上;由TCP/IP协议提供稳定的网络连接;所以,只要具备TCP协议栈的网络设备都可以使用MQTT协议。 本次设备采用的ESP8266就具备TCP协议栈,能够建立TCP连接,所以,配合STM32代码里封装的MQTT协议,就可以与华为云平台完成通信。

华为云的MQTT协议接入帮助文档在这里: https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

img

业务流程:

img

(2)华为云平台MQTT协议使用限制

描述限制
支持的MQTT协议版本3.1.1
与标准MQTT协议的区别支持Qos 0和Qos 1支持Topic自定义不支持QoS2不支持will、retain msg
MQTTS支持的安全等级采用TCP通道基础 + TLS协议(最高TLSv1.3版本)
单帐号每秒最大MQTT连接请求数无限制
单个设备每分钟支持的最大MQTT连接数1
单个MQTT连接每秒的吞吐量,即带宽,包含直连设备和网关3KB/s
MQTT单个发布消息最大长度,超过此大小的发布请求将被直接拒绝1MB
MQTT连接心跳时间建议值心跳时间限定为30至1200秒,推荐设置为120秒
产品是否支持自定义Topic支持
消息发布与订阅设备只能对自己的Topic进行消息发布与订阅
每个订阅请求的最大订阅数无限制

(3)主题订阅格式

帮助文档地址:https://support.huaweicloud.com/devg-iothub/iot_02_2200.html

image-20221207153310037

对于设备而言,一般会订阅平台下发消息给设备 这个主题。

设备想接收平台下发的消息,就需要订阅平台下发消息给设备 的主题,订阅后,平台下发消息给设备,设备就会收到消息。

如果设备想要知道平台下发的消息,需要订阅上面图片里标注的主题。

以当前设备为例,最终订阅主题的格式如下:
$oc/devices/{device_id}/sys/messages/down最终的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down

(4)主题发布格式

对于设备来说,主题发布表示向云平台上传数据,将最新的传感器数据,设备状态上传到云平台。

这个操作称为:属性上报。

帮助文档地址:https://support.huaweicloud.com/usermanual-iothub/iot_06_v5_3010.html

image-20221207153637391

根据帮助文档的介绍, 当前设备发布主题,上报属性的格式总结如下:

发布的主题格式:
$oc/devices/{device_id}/sys/properties/report最终的格式:
$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report
发布主题时,需要上传数据,这个数据格式是JSON格式。上传的JSON数据格式如下:{"services": [{"service_id": <填服务ID>,"properties": {"<填属性名称1>": <填属性值>,"<填属性名称2>": <填属性值>,..........}}]
}
根据JSON格式,一次可以上传多个属性字段。 这个JSON格式里的,服务ID,属性字段名称,属性值类型,在前面创建产品的时候就已经介绍了,不记得可以翻到前面去查看。根据这个格式,组合一次上传的属性数据:
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}

5.6 MQTT三元组

MQTT协议登录需要填用户ID,设备ID,设备密码等信息,就像我们平时登录QQ,微信一样要输入账号密码才能登录。MQTT协议登录的这3个参数,一般称为MQTT三元组。

接下来介绍,华为云平台的MQTT三元组参数如何得到。

(1)MQTT服务器地址

要登录MQTT服务器,首先记得先知道服务器的地址是多少,端口是多少。

帮助文档地址:https://console.huaweicloud.com/iotdm/?region=cn-north-4#/dm-portal/home

image-20240509193207359

MQTT协议的端口支持1883和8883,它们的区别是:8883 是加密端口更加安全。但是单片机上使用比较困难,所以当前的设备是采用1883端口进连接的。

根据上面的域名和端口号,得到下面的IP地址和端口号信息: 如果设备支持填写域名可以直接填域名,不支持就直接填写IP地址。 (IP地址就是域名解析得到的)

华为云的MQTT服务器地址:117.78.5.125
华为云的MQTT端口号:1883

如何得到IP地址?如何域名转IP? 打开Windows的命令行输入以下命令。

ping  ad635970a1.st1.iotda-device.cn-north-4.myhuaweicloud.com

image-20240425182610048

(2)生成MQTT三元组

华为云提供了一个在线工具,用来生成MQTT鉴权三元组: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/

打开这个工具,填入设备的信息(也就是刚才创建完设备之后保存的信息),点击生成,就可以得到MQTT的登录信息了。

下面是打开的页面:

image-20240425183025893

填入设备的信息: (上面两行就是设备创建完成之后保存得到的)

直接得到三元组信息。

image-20240509193310020

得到三元组之后,设备端通过MQTT协议登录鉴权的时候,填入参数即可。

ClientId  663cb18871d845632a0912e7_dev1_0_0_2024050911
Username  663cb18871d845632a0912e7_dev1
Password  71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237

5.7 模拟设备登录测试

经过上面的步骤介绍,已经创建了产品,设备,数据模型,得到MQTT登录信息。 接下来就用MQTT客户端软件模拟真实的设备来登录平台。测试与服务器通信是否正常。

(1)填入登录信息

打开MQTT客户端软件,对号填入相关信息(就是上面的文本介绍)。然后,点击登录,订阅主题,发布主题。

image-20240509193457358

(2)打开网页查看

完成上面的操作之后,打开华为云网页后台,可以看到设备已经在线了。

image-20240612100508790

点击详情页面,可以看到上传的数据:

image-20240612100529581

到此,云平台的部署已经完成,设备已经可以正常上传数据了。

(3)MQTT登录测试参数总结

MQTT服务器:  117.78.5.125
MQTT端口号:  183//物联网服务器的设备信息
#define MQTT_ClientID "663cb18871d845632a0912e7_dev1_0_0_2024050911"
#define MQTT_UserName "663cb18871d845632a0912e7_dev1"
#define MQTT_PassWord "71b82deae83e80f04c4269b5bbce3b2fc7c13f610948fe210ce18650909ac237"//订阅与发布的主题
#define SET_TOPIC  "$oc/devices/663cb18871d845632a0912e7_dev1/sys/messages/down"  //订阅
#define POST_TOPIC "$oc/devices/663cb18871d845632a0912e7_dev1/sys/properties/report"  //发布发布的数据:
{"services": [{"service_id": "stm32","properties":{"DHT11_T":30,"DHT11_H":10,"BH1750":1,"MQ135":0}}]}

5.8 创建IAM账户

创建一个IAM账户,因为接下来开发上位机,需要使用云平台的API接口,这些接口都需要token进行鉴权。简单来说,就是身份的认证。 调用接口获取Token时,就需要填写IAM账号信息。所以,接下来演示一下过程。

地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users

**【1】获取项目凭证 ** 点击左上角用户名,选择下拉菜单里的我的凭证

image-20240509193646253

image-20240509193701262

项目凭证:

28add376c01e4a61ac8b621c714bf459

【2】创建IAM用户

鼠标放在左上角头像上,在下拉菜单里选择统一身份认证

image-20240509193729078

点击左上角创建用户

image-20240509193744287

image-20240314153208692

image-20240314153228359

image-20240314153258229

创建成功:

image-20240314153315444

【3】创建完成

image-20240509193828289

用户信息如下:

主用户名  l19504562721
IAM用户  ds_abc
密码     DS12345678

5.9 获取影子数据

帮助文档:https://support.huaweicloud.com/api-iothub/iot_06_v5_0079.html

设备影子介绍:

设备影子是一个用于存储和检索设备当前状态信息的JSON文档。
每个设备有且只有一个设备影子,由设备ID唯一标识
设备影子仅保存最近一次设备的上报数据和预期数据
无论该设备是否在线,都可以通过该影子获取和设置设备的属性

简单来说:设备影子就是保存,设备最新上传的一次数据。

我们设计的软件里,如果想要获取设备的最新状态信息,就采用设备影子接口。

如果对接口不熟悉,可以先进行在线调试:https://apiexplorer.developer.huaweicloud.com/apiexplorer/doc?product=IoTDA&api=ShowDeviceShadow

在线调试接口,可以请求影子接口,了解请求,与返回的数据格式。

调试完成看右下角的响应体,就是返回的影子数据。

image-20240509194152229

设备影子接口返回的数据如下:

{"device_id": "663cb18871d845632a0912e7_dev1","shadow": [{"service_id": "stm32","desired": {"properties": null,"event_time": null},"reported": {"properties": {"DHT11_T": 18,"DHT11_H": 90,"BH1750": 38,"MQ135": 70},"event_time": "20240509T113448Z"},"version": 3}]
}

调试成功之后,可以得到访问影子数据的真实链接,接下来的代码开发中,就采用Qt写代码访问此链接,获取影子数据,完成上位机开发。

image-20240509194214716

链接如下:

https://ad635970a1.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/28add376c01e4a61ac8b621c714bf459/devices/663cb18871d845632a0912e7_dev1/shadow

相关文章:

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…...

OJ-1015图像物体的边界

分析 思路 1.输入读取&#xff1a;读取网格的维度(M&#xff0c;N)和像素值到一个二维数组中。 2.迭代:遍历二维数组中的每个单元格。 3.边界检测:对于每个像素值为1的单元格,检查其八个相邻的单元格。如果任何相邻单元格的像素值为5,则增加边界计数。 4,边界计数调整:由于每…...

RAG 入门实践:从文档拆分到向量数据库与问答构建

本文将使用 Transformers 和 LangChain&#xff0c;选择在 Retrieval -> Chinese 中表现较好的编码模型进行演示&#xff0c;即 chuxin-llm/Chuxin-Embedding。 你还将了解 RecursiveCharacterTextSplitter 的递归工作原理。 一份值得关注的基准测试榜单&#xff1a;MTEB (M…...

445: 选择问题

解法&#xff1a; 第k大的数据查找 a, b map(int, input().split()) l list(map(int, input().split())) l.sort() print(l[b-1])...

IP地址类型选择指南:动态IP、静态IP还是数据中心IP?

你是否曾经困惑于如何选择最适合业务需求的IP地址类型&#xff1f;面对动态IP、静态IP和数据中心IP这三种选择&#xff0c;你是否了解它们各自对你的跨境在线业务可能产生的深远影响&#xff1f; 在跨境电商领域&#xff0c;选择合适的IP类型对于业务的成功至关重要。动态IP、…...

基于Python flask的豆瓣电影可视化系统,豆瓣电影爬虫系统

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…...

面试不是一场遭遇战

引言 Ethan第一次跳槽时&#xff0c;把工作总结搞成简历&#xff0c;丢到BOSS&#xff0c;面了几场&#xff0c;结果都很糟。复盘下来&#xff0c;发现面试过程临场发挥太多&#xff0c;把攻坚战打成了遭遇战。 那面试要如何准备&#xff1f;什么情况下跳槽&#xff1f;有哪些大…...

【力扣 | SQL题 | 每日3题】力扣1795,1907,1398,602

1. 力扣1795&#xff1a;每个产品在不同商品的价格 1.1 题目&#xff1a; 表&#xff1a;Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | store1 | int | | store2 | int | | store3 …...

centos7.9升级rockylinux8.8

前言 查看centos的版本 &#xff0c;我这台服务器是虚拟机,下面都是模拟实验 升级前一定要把服务器上配置文件&#xff0c;数据等进行备份 [rootlocalhost ~]#cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [rootlocalhost ~]#uname -a Linux jenkins_ser…...

C++初阶(三)---C++入门(下)

目录 一、内联函数 1.内联函数的定义与底层机制 0x01.内联函数的定义 0x02.内联函数的底层机制 2.内联函数的优缺点 优点&#xff1a; 缺点&#xff1a; 3.内联函数的使用建议 4.内联函数的注意事项 二、auto关键字&#xff08;C11&#xff09; 1.代码示例 2.auto使…...

Linux--多路转接之epoll

上一篇:Linux–多路转接之select epoll epoll 是 Linux 下多路复用 I/O 接口 select/poll 的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统 CPU 利用率。它是 Linux 下多路复用 API 的一个选择&#xff0c;相比 select 和 poll&#xff0c…...

自动化工具Nico,从零开始干掉Appium,移动端自动化测试框架实现

这篇将用较短的篇幅给大家介绍我是如何实现iOS和Android的inspector&#xff08;元素审查工具&#xff09;的。 实现原理 为了更方便的显示UI界面&#xff0c;且更容易制作&#xff0c;我选择了使用web端来承载整个元素树展示。同时我选用Flask一次性梭哈前后端&#xff08;因…...

Fast CRC32

链接&#xff1a; Fast CRC32 Error Checking Real life data tends to get corrupted because machines (and humans) are never as reliable as we wish for. One efficient way is make sure your data wasnt unintendedly modifiied is to generate some kind of hash. T…...

生成一个带有二维数据和对应标签的螺旋形数据集(非线性可分数据集)的代码解析

def create_dataset():np.random.seed(1)m 400 # 数据量N int(m/2) # 每个标签的实例数D 2 # 数据维度X np.zeros((m,D)) # 数据矩阵Y np.zeros((m,1), dtypeuint8) # 标签维度a 4 for j in range(2):ix range(N*j,N*(j1))t np.linspace(j*3.12,(j1)*3.12,N) np.rando…...

PHP unset() 函数的作用

PHP 中的 unset() 函数用于销毁指定的变量。具体来说&#xff0c;它会解除变量名与其数据之间的关联&#xff0c;从而释放该变量所占用的内存。不过需要注意的是&#xff0c;unset() 并不是删除变量的内容&#xff0c;而是取消对变量名的引用。如果变量是数组中的某个元素或者对…...

长篇故事可视化方法Story-Adapter:能够生成更高质量、更具细腻交互的故事图像,确保每一帧都能准确地传达故事情节。

今天给大家介绍一个最新的长篇故事可视化方法Story-Adapter&#xff0c;它的工作原理可以想象成一个画家在创作一幅长画卷。首先&#xff0c;画家根据故事的文本提示画出初步的图像。这些图像就像是画卷的草图。接下来&#xff0c;画家会不断回顾这些草图&#xff0c;逐步添加细…...

C++基础面试题 | 什么是C++中的运算符重载?

文章目录 回答重点&#xff1a;示例&#xff1a; 运算符重载的基本规则和注意事项&#xff1a; 回答重点&#xff1a; C的运算符重载是指可以为自定义类型&#xff08;如类或结构体&#xff09;定义运算符的行为&#xff0c;使其像内置类型一样使用运算符。通过重载运算符&…...

深入 IDEA 字节码世界:如何轻松查看 .class 文件?

前言&#xff1a; 作为一名 Java 开发者&#xff0c;理解字节码对于优化程序性能、调试错误以及深入了解 JVM 运行机制非常重要。IntelliJ IDEA 作为最流行的开发工具之一&#xff0c;为开发者提供了查看 .class 文件字节码的功能。在本文中&#xff0c;我将带你一步步探索如何…...

NodeJS 利用代码生成工具编写GRPC

生成的 gRPC 代码优点 自动化和效率: 减少手动编码:生成代码自动处理了消息的序列化和反序列化、服务接口的定义等,减少了手动编码的工作量。一致性:生成的代码确保了客户端和服务器之间的一致性,避免了手动编码可能带来的错误。跨语言支持: 多语言兼容:gRPC 支持多种编…...

uni-app基础语法(一)

我们今天的学习目标 基础语法1. 创建新页面2.pages配置页面3.tabbar配置4.condition 启动模式配置 基础语法 1. 创建新页面 2.pages配置页面 属性类型默认值描述pathString配置页面路径styleObject配置页面窗口表现&#xff0c;配置项参考pageStyle 我们来通过style修改页面的…...

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候&#xff0c;所执行的代码来自于自己的源文件。使用fork创建子进程后&#xff0c;子进程执行的程序中代码内容和父进程是相同的&#xff0c;如果子进…...

LeetCode279:完全平方数

题目链接&#xff1a;279. 完全平方数 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int numSquares(int n) {vector<int> dp(n 1, INT_MAX);dp[0] 0;for(int i 1; i * i < n; i){for(int j i * i; j < n; j){dp[j] min(dp[j …...

python爬虫--某动漫信息采集

python爬虫--tx动漫 一、采集主页信息二、采集详情页信息三、代码供参考一、采集主页信息 略。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作者、评分、人气、评论人数等数据。 三、代码供参考 import csv import time import random import requests fr…...

使用Rollup.js快速开始构建一个前端项目

Rollup 是一个用于 JavaScript 项目的模块打包器&#xff0c;它将小块代码编译成更大、更复杂的代码&#xff0c;例如库或应用程序。Rollup 对代码模块使用 ES6 模块标准&#xff0c;它支持 Tree-shaking&#xff08;摇树优化&#xff09;&#xff0c;可以剔除那些实际上没有被…...

10.15学习

1.程序开发的步骤 定义程序的目标→设计程序→编写代码&#xff08;需要选择语言&#xff0c;一种语言对应一种编译器&#xff09;→编译→运行程序→测试和调试程序→维护和修改程序 2.ANSI/ISO C标准 1989年ANSI批准通过&#xff0c;1990年ISO批准通过&#xff0c;因此被称…...

mongodb-7.0.14分片副本集超详细部署

mongodb介绍&#xff1a; 是最常用的nosql数据库&#xff0c;在数据库排名中已经上升到了前六。这篇文章介绍如何搭建高可用的mongodb&#xff08;分片副本&#xff09;集群。 环境准备 系统系统 BC 21.10 三台服务器&#xff1a;192.168.123.247/248/249 安装包&#xff1a…...

C++运算出现整型溢出

考虑如下代码&#xff1a; int aINT_MAX; int b 1; long c ab; 这段代码没有编过&#xff01; 原因是a和b都是int型&#xff0c;相加之后会溢出。 请记住&#xff0c;c语言没有赋值&#xff0c;只有表达式&#xff0c;右侧会存在一个暂存的int保存ab的值&#xff0c;而明…...

LeetCode岛屿数量

题目描述 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网…...

Karmada核心概念

以下内容为翻译&#xff0c;原文地址 Karmada 是什么&#xff1f; | karmada 一、Karmada核心概念 一&#xff09;什么是Karmada 1、Karmada&#xff1a;开放&#xff0c;多云&#xff0c;多集群Kubernetes业务流程 Karmada (Kubernetes Armada)是一个Kubernetes管理系统&…...

Rust 与生成式 AI:从语言选择到开发工具的演进

在现代软件开发领域&#xff0c;Rust 语言正在逐步崭露头角&#xff0c;尤其是在高性能和可靠性要求较高的应用场景。与此同时&#xff0c;生成式 AI 的崛起正在重新塑造开发者的工作方式&#xff0c;从代码生成到智能调试&#xff0c;生成式 AI 的应用正成为提升开发效率和质量…...