• 发文章

  • 发资料

  • 发帖

  • 提问

  • 发视频

创作活动
0
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
返回

电子发烧友 电子发烧友

  • 全文搜索
    • 全文搜索
    • 标题搜索
  • 全部时间
    • 全部时间
    • 1小时内
    • 1天内
    • 1周内
    • 1个月内
  • 默认排序
    • 默认排序
    • 按时间排序
  • 全部板块
    • 全部板块
大家还在搜
  • 【嘉楠堪智K230开发板试用体验】K230机器视觉相关功能体验

    K230开发板摄像头及AI功能测评 摄像头作为机器视觉应用的基础,能够给机器学习模型提供输入,提供输入的质量直接影响机器学习模型的效果。 K230的sensor模块负责图像的采集和数据处理,官方平台提供了一套高级的API,开发者利用这些接口能够轻松获取想要的图像。SensorAPI手册链接。关于API的使用介绍可以直接参考这个在线手册。 查看官方文档,板载的摄像头为:GC2093摄像头,给出的帧率和分辨率如下图所示: 针对上述分辨率,进行实机测试,测试结果如下表(帧率测试使用官方提供的例程,向下取整): 分辨率 帧率 1920x1080 51 1280x960 57 1280x720 57 画图 机器学习模型在通过摄像头获取图像后,经过处理输入后,在输出环节通常还需要进行后处理,例如图像检测应用中,目标位置的框选等。 在K230中提供了画图的功能,可以实现画线段、画矩形、画圆、画箭头、画十字交叉、写字符等多种操作。具体使用方法参考官方教程机器学习-画图 图像检测 K230能够使用MicroPython进行边缘检测、线段检测、圆形检测、矩形检测、快速线性回归。官方在线文档链接图像检测 边缘检测 边缘检测,将图像变为黑白,边缘保留白色像素,提供了两种检测算法:简单的阈值高通滤波算法和Canny 边缘检测算法 上图为Canny检测算法效果 下图为阈值高通滤波算法效果 上面两张图可以看出Canny算法的检测效果更好,但这也直接影响了视频的帧率,使得Canny算法的检测帧率更低。 关于图像检测的其他功能就不在这里一一介绍了。 码类识别 因为K230使用MicroPython进行开发,可以调用大量的python库进行开发,使得这类识别功能能够简单快速的进行开发,这也是K230相较于基于C语言开发的嵌入式板的优点。能够使得开发者快速实现相应的功能。

    2025-07-08 17:25

  • 【Milk-V Duo S 开发板免费体验】移植lrzsz方便使用zmodem进行文件传输

    一.前言默认需要使用scp进行开发板和PC的文件传输。希望能简单点能通过串口shell的zmodme传输,我们就来移植lrzsz。 二. 过程下载源码wget https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz解压源码tar -xvf lrzsz-0.12.20.tar.gz配置apt install gcc-riscv64-linux-gnu cd lrzsz-0.12.20/CFLAGS="-Os -static" CC=riscv64-linux-gnu-gcc ./configure编译make 生成的可执行文件位于src下三. 测试导出文件到开发板scp src/lrz root@192.168.42.1:/root 需要输入密码milkv scp src/lsz root@192.168.42.1:/root开发板上看到文件 chmod +x lrz lsz 导出文件测试 导入文件 四. 总结注意使用-static构建否则可能库版本不一样而提示 -sh: ./lsz: not found

    2025-07-08 15:01

  • 如何确保可编程电源输出电流稳定?

    为确保可编程电源输出电流稳定,需从硬件设计、参数配置、动态响应优化、环境控制、监控与校准五个维度构建保障体系,结合科学测试方法与标准化操作,实现电流波动<0.5%额定值(稳态)和快速恢复(动态响应时间<100μs)。以下是具体实施策略:一、硬件设计:夯实稳定性基础1. 电源拓扑选择 线性电源(LDO): 适用场景:对噪声敏感的负载(如高精度ADC、射频电路),需输出电流<3A且压差小(如输入12V→输出5V)。 优势:纹波极低(<1mV),电流稳定性高(负载调整率<0.01%/A)。 案例:测试16位ADC时,使用LDO(如LT3080)提供5V电源,电流波动从开关电源的50mA降至5mA,有效降低噪声干扰。 开关电源(DC-DC): 适用场景:大电流需求(如电机驱动、LED照明),需输出电流>3A或压差大(如输入24V→输出12V)。 优化方向: 同步整流:用MOSFET替代二极管整流,降低导通损耗(效率提升5%~10%)。 多相并联:将单相电源拆分为多相(如4相),每相承担部分电流,降低单相电流应力(如100A电源拆分为4相,每相25A)。 2. 输出滤波电路 LC滤波器: 设计原则: 电感(L)值选择:根据开关频率(f_sw)和电流纹波(ΔI_L)计算,公式为 L=Vin​⋅fsw​⋅ΔIL​Vout​⋅(Vin​−Vout​)​。 电容(C)值选择:根据纹波电压(ΔV_out)计算,公式为 C=8⋅fsw​⋅ΔVout​ΔIL​​。 案例:对24V/5A开关电源(f_sw=200kHz),若要求ΔI_L<0.5A、ΔV_out<50mV,则需L=12μH、C=100μF。 陶瓷电容与电解电容并联: 作用:陶瓷电容(如10μF/50V)抑制高频噪声(100kHz~1MHz),电解电容(如1000μF/25V)滤除低频纹波(<100kHz)。 布局要求:电容紧贴电源输出端,引线尽可能短(降低寄生电感)。 二、参数配置:精准控制输出特性1. 电流模式选择 恒流(CC)模式: 适用场景:电池充电、LED恒流驱动、材料测试(如电阻率测量)。 设置方法: 通过电源面板或SCPI命令(如CURR 2.0)设定目标电流(如2A)。 启用电流环补偿(如PID参数调整),避免振荡(超调量<5%)。 案例:充电锂电池时,设置CC模式电流为1C(如2000mAh电池设为2A),充电末期电压升至4.2V时自动切换为恒压(CV)模式。 恒压(CV)模式下的电流限制: 适用场景:电源为电压源,但需限制最大输出电流(如保护负载或电源本身)。 设置方法: 设定电压值(如12V),再设置电流上限(如CURR 3.0限流3A)。 当负载电流接近限流值时,电源自动从CV模式切换为CC模式,输出电压下降以维持电流恒定。 2. 保护参数协同 过流保护(OCP): 阈值设置: 高于负载最大工作电流(如负载正常工作电流为2A,OCP设为2.5A,留25%余量)。 低于电源额定电流(如电源额定5A,OCP≤5A)。 延时设置: 对动态负载(如电机启动),设置100ms~500ms延时,避免启动冲击误触发保护。 对静态负载,设置<10ms延时,快速响应过流故障。 过压保护(OVP)与电流稳定性的关联: 原理:OVP触发会导致电源关断,间接影响电流输出。 优化:确保OVP阈值高于负载最大电压(如负载V_max=12V,OVP设为13V),避免因电压波动误触发。 三、动态响应优化:应对负载突变1. 负载突变测试方法 测试工具: 电子负载(如Chroma 6310A)支持编程控制电流突变(如从0A突增至2A,或从2A突降至0A)。 示波器(如Tektronix MSO64)监测电源输出电压和电流波形(带宽≥500MHz,采样率≥5GSa/s)。 关键指标: 上升时间(t_r):电流从10%升至90%额定值所需时间(如从0.2A升至2A,t_r<50μs)。 过冲幅度(Overshoot):电流突增时的瞬时峰值超过额定值的比例(如2A突增时峰值<2.1A,即过冲<5%)。 恢复时间(t_s):电流突变后,输出电压/电流恢复至稳态误差带(如±0.5%)所需时间(如<100μs)。 2. 优化策略 调整电源环路补偿: PID参数调整: 增大比例系数(K_p)可加快响应速度,但可能导致振荡。 增大积分系数(K_i)可消除稳态误差,但会延长恢复时间。 增大微分系数(K_d)可抑制超调,但对噪声敏感。 案例:对Keysight N6700系列电源,通过SYST:COMP:PID命令调整参数,将电流上升时间从100μs缩短至40μs,过冲从10%降至3%。 增加输出电容: 作用:电容存储电荷,在负载突变时提供瞬时电流(如1000μF电容可提供2A电流持续0.5ms)。 选择原则: 低ESR电容(如陶瓷电容)抑制高频振荡。 高容量电解电容(如钽电容)提供低频能量缓冲。 四、环境控制:消除外部干扰1. 散热设计 自然散热: 确保电源周围通风良好(如留出10cm以上间距),避免阳光直射。 案例:在25℃环境中,200W电源连续工作2小时后,外壳温度从40℃升至55℃,输出电流降额从0%升至5%(需优化散热)。 强制风冷: 对高功率电源(如>500W),加装散热风扇(如12V/0.2A风扇),风速≥2m/s。 温控策略:当电源内部温度>50℃时启动风扇,<40℃时停止,平衡噪音与散热效率。 2. 电磁兼容性(EMC)优化 屏蔽设计: 对敏感负载(如医疗设备),使用屏蔽线缆(如双绞线+铝箔屏蔽)连接电源与负载,减少电磁干扰(EMI)。 案例:在测试心电图机时,屏蔽线缆将电源噪声从100μV降至10μV,提高信号质量。 滤波电路: 在电源输入端增加EMI滤波器(如共模电感+X/Y电容),抑制电网噪声(如50Hz工频干扰)。 五、监控与校准:长期稳定性保障1. 实时监控系统 数据记录: 使用电源自带软件(如Chroma A631000)或第三方工具(如LabVIEW DAQ)记录电流数据(采样率≥1kHz),生成CSV或Excel报表。 关键指标: 稳态精度:电流波动<0.1%额定值(如5A电源波动<5mA)。 长期漂移:连续运行24小时后,电流变化<0.5%额定值(如5A电源漂移<25mA)。 报警功能: 设置电流超限报警(如>2.5A触发声光报警),并通过SCPI命令(如SYST:ERR?)读取故障代码。 2. 定期校准 校准周期: 每6个月使用标准源(如Fluke 8508A)校准电流输出精度(目标±0.05%)。 校准项目: 零点校准(输出0A时测量残余电流)。 满量程校准(输出额定电流时测量误差)。 校准记录: 保存校准证书及调整前后的数据对比,确保可追溯性。 六、典型应用场景的电流稳定方案案例1:锂电池充电测试 需求: 充电电流:1A(恒流阶段),电压升至4.2V后切换为恒压(电流逐渐下降)。 稳定性要求:电流波动<10mA(0.1%额定值)。 解决方案: 使用线性电源(如LT3080)提供低噪声电流。 设置CC模式电流为1A,启用电流环补偿(PID参数:K_p=0.5, K_i=0.1, K_d=0.01)。 在电源输出端并联100μF陶瓷电容+1000μF电解电容,抑制纹波。 案例2:工业电机驱动测试 需求: 电机启动电流:5A(持续200ms),稳态电流:2A。 稳定性要求:电流过冲<5%额定值(即<5.25A),恢复时间<100μs。 解决方案: 使用开关电源(如Chroma 62000P)并联4相,每相承担1.25A。 设置OCP阈值为6A(留20%余量),延时100ms。 调整电源环路补偿参数(K_p=0.8, K_i=0.05, K_d=0.02),优化动态响应。 总结:确保电流稳定的“五步法” 硬件选型:根据负载需求选择线性电源(低噪声)或开关电源(高效率),并设计LC滤波电路。 参数配置:精准设置电流模式(CC/CV)、OCP阈值与延时,协同OVP保护。 动态优化:通过电子负载测试电流突变响应,调整PID参数与输出电容。 环境控制:优化散热与EMC设计,消除温度与电磁干扰影响。 监控校准:实时记录电流数据,定期校准精度,确保长期稳定性。 通过系统性实施上述策略,可将可编程电源的电流稳定性提升至行业领先水平(波动<0.05%额定值,动态响应时间<50μs),满足高精度测试与生产需求。

    2025-07-08 14:48

  • 【Milk-V Duo S 开发板免费体验】SDK系统构建体验

    准备参考https://milkv.io/zh/docs/duo/getting-started/buildroot-sdk 1)获取源码 我这里使用WSL+Ubuntu 20.04.6 LTS 获取源码git clone https://github.com/milkv-duo/duo-buildroot-sdk-v2.git --depth=1 2)下载buildroot包wget https://github.com/milkv-duo/duo-buildroot-sdk-v2/releases/download/dl/dl.tartar xvf ./dl.tar -C ./duo-buildroot-sdk-v2/buildroot/ 3)安装依赖sudo apt install -y pkg-config build-essential ninja-build automake autoconf libtool wget curl git gcc libssl-dev bc slib squashfs-tools android-sdk-libsparse-utils jq python3-distutils scons parallel tree python3-dev python3-pip device-tree-compiler ssh cpio fakeroot libncurses5 flex bison libncurses5-dev genext2fs rsync unzip dosfstools mtools tcl openssh-client cmake expect python-is-python3 sudo pip install jinja2 4) 修改WSL的PATH路径不添加windows路径更改 /etc/wsl.conf 文件并添加以下行:[interop]appendWindowsPath = false wsl.exe --shutdown,然后重启wsl。 编译cd duo-buildroot-sdk-v2/./build.sh milkv-duos-musl-riscv64-sd 提示错误CMake Error at CMakeLists.txt:1 (cmake_minimum_required):CMake 3.16.5 or higher is required.You are running version 3.16.3 卸载cmakesudo apt remove cmake 然后手动安装wget https://cmake.org/files/v3.22/cmake-3.22.1.tar.gztar xzf cmake-3.22.1.tar.gzcd cmake-3.22.1./configuremakesudo make installcmake --version 如果报错The imported target "Qt5::Gui" references the file "/usr/lib/x86_64-linux-gnu/libEGL.so"安装sudo apt-get install libegl1 libegl1-mesa 查看文件位置root@qinyunti:~/cmake-3.22.1# ls /usr/lib/x86_64-linux-gnu | grep -i libegllibEGL.so.1libEGL.so.1.1.0libEGL_mesa.so.0libEGL_mesa.so.0.0.0 cp /usr/lib/x86_64-linux-gnu/libEGL.so.1.1.0 /usr/lib/x86_64-linux-gnu/libEGL.so 构建报错2025-06-30T23:20:02 >>> host-tar 1.35 ConfiguringDone in 32s(error code: 2) 改为使用现成的hostgit clone https://github.com/milkv-duo/host-tools.gitcp -a host-tools duo-buildroot-sdk/ source build/envsetup_milkv.sh lunch选7clean_allbuild_allpack_sd_image

    2025-07-08 14:41

  • 【汇思博SEEK100开发板试用体验】03 简约风天气APP开发--首页UI布局及组件介绍

    1 前言 本次开发板的评测最终目标是做出来一个简约风格的天气APP。现在从0开始学习基于openharmony的鸿蒙开发。这次先完成主界面的排版和布局,把应用大体框架确定下来。 2 线性布局 (Row/Column)介绍 2.1 基本概念 APP的主要是由行和列来组成的布局,用这两个布局需要提前规划一下APP布局,将一个界面分成几行、几列,然后每一行或列中要放什么内容。当然也有其他的布局,如层叠布局、弹性布局等,那些暂时用不到。 线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Row容器内子元素按照水平方向排列,Column容器内子元素按照垂直方向排列。根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。 column布局: Row布局: 其用法可以参考API文档 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/ui/arkts-layout-development-linear.md 2.2 相关API Row和Column常用的属性有:width height backgroundColor 等,这些是通用的属性。其特有的属性有:justifyContent和alignItems。 justifyContent 是设置子组件在水平方向上的对齐格式的属性。用法如 Text(\'justifyContent(End)\').width(\'90%\') Row() { Row().width(\'30%\').height(50).backgroundColor(0xAFEEEE) Row().width(\'30%\').height(50).backgroundColor(0x00FFFF) }.width(\'90%\').border({ width: 1 }).justifyContent(FlexAlign.End) alignItems是设置子组件在垂直方向上的对齐格式。 用法如 Row() { Row().width(\'30%\').height(50).backgroundColor(0xAFEEEE) Row().width(\'30%\').height(50).backgroundColor(0x00FFFF) }.width(\'90%\').alignItems(VerticalAlign.Center).height(\'15%\').border({ width: 1 }) 它们的更多属性及用法可以参考官方API文档 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-row.md 3 组件介绍 3.1 按钮 Button Button是按钮组件,通常用于响应用户的点击操作,其类型包括胶囊按钮、圆形按钮、普通按钮、圆角矩形按钮。Button做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮 通过label和ButtonOptions创建不包含子组件的按钮。以ButtonOptions中的type和stateEffect为例。 接口: Button(label?: ResourceStr, options?: { type?: ButtonType, stateEffect?: boolean }) 其中,label用来设置按钮文字,type用于设置Button类型,stateEffect属性设置Button是否开启点击效果。 例如: Button(\'Ok\', { type: ButtonType.Normal, stateEffect: true }) .borderRadius(8) .backgroundColor(0x317aff) .width(90) .height(40) 按钮Button有四种可选类型,分别为胶囊类型(Capsule)、圆形按钮(Circle)、普通按钮(Normal)和圆角矩形按钮(ROUNDED_RECTANGLE),通过type进行设置。 更详细的API可参考官方文档 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-button.md 3.2 文本显示 Text Text是文本组件,通常用于展示用户视图,如显示文章的文字内容,支持绑定自定义文本选择菜单,用户可根据需要选择不同功能,同时还可以扩展自定义菜单,丰富可用选项,进一步提升用户体验。Span则用于呈现显示行内文本。 接口: Text(content?: string | Resource , value?: TextOptions) 使用方法例如 Text(\'hello world\') .fontSize(30) .padding(10) .width(300) 也可以添加子组件,更详细的API参考官方文档 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-text.md 3.3 显示图片 Image 开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg、gif和heif。 通常使用Resource资源进行加载。资源格式可以跨包/跨模块引入图片,resources文件夹下的图片都可以通过$r资源接口读取到并转换到Resource格式。 用法(将图片资源放在media文件夹下) Image($r(\'app.media.icon\')) 用法(放在rawfile文件夹下) Image($rawfile(\'example1.png\')) 用法参考 https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/ui/arkts-graphics-display.md 3.4 下拉选择菜单Select Select提供下拉选择菜单,可以让用户在多个选项之间选择。 Select([{ value: \'aaa\', icon: $r(\"app.media.selection\") }, { value: \'bbb\', icon: $r(\"app.media.selection\") }, { value: \'ccc\', icon: $r(\"app.media.selection\") }, { value: \'ddd\', icon: $r(\"app.media.selection\") }]) .selected(this.index) .value(this.text) .font({ size: 16, weight: 500 }) .fontColor(\'#182431\') .selectedOptionFont({ size: 16, weight: 400 }) .optionFont({ size: 16, weight: 400 }) .space(this.space) .arrowPosition(this.arrowPosition) .menuAlign(MenuAlignType.START, { dx: 0, dy: 0 }) .optionWidth(200) .optionHeight(300) .onSelect((index: number, text?: string | undefined) => { console.info(\'Select:\' + index); this.index = index; if (text) { this.text = text; } }) 更多用法参考API文档https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-select.md 4 工程代码 4.1 主界面UI 将这部分代码其单独放个文件,在pages/view/nowWeatherDataComponent.ets下。 @Component export struct nowWeatherDataComponent { @State handlePopup: boolean = false @State popupMessage: string = \'\' @Link selectCity: CityModel; @Link cityArr: CityModel[]; @Link weatherNow: NowWeatherModel; @Link weatherUiModel: WeatherUiModel; build() { Column({ space: 10 }) { // 标题栏显示城市名 Row() { Text(this.selectCity.locationName) .fontSize(25) } .width(\'100%\') .margin({ left: \'10%\', top: 5 }) .justifyContent(FlexAlign.Start) // 城市选择栏 Row() { Text(\'选择城市\') .fontSize(18) Select(selectCityArray) .selected(0) .value(selectCityArray[0].value) .font({ size: 16, weight: 500 }) .selectedOptionFont({ size: 16, weight: 400 }) .optionFont({ size: 16, weight: 400 }) .arrowPosition(ArrowPosition.END) .menuAlign(MenuAlignType.START, { dx: 0, dy: 0 }) .optionWidth(200) .optionHeight(300) .onSelect((index: number, text?: string | undefined) => { // 根据text查找城市 const selectedCity = this.cityArr.find(city => city.locationName === text) if (selectedCity) { this.selectCity = selectedCity; } }) Button(\'查询\') .width(70) .height(35) .fontSize(18) .onClick(() => { this.initData() }) } .width(\'90%\') .height(50) .justifyContent(FlexAlign.SpaceAround) .backgroundColor(Color.White) .borderRadius(15) .margin({ top: 5 }) // 实时温度及当前天气情况栏 Row() { // 当前温度 Column() { Text(this.weatherUiModel.nowTemp.toString() + \'°\') .fontSize(60) .fontWeight(FontWeight.Bold) } //当前天气状况 Column({space:5}) { Row({ space: 10 }) { Text(this.weatherUiModel.nowWeatherText) .fontSize(20) Image($rawfile((this.weatherUiModel.nowWeatherIcon.toString() + \'.svg\'))) .size({ width: 24, height: 24 }) } Row(){ Image($r(\'app.media.icon_rain\')) .width(16) .height(16) if(this.weatherUiModel.precip === 0.0){ Text(this.weatherUiModel.precip.toFixed(1) + \'mm\') .fontColor(Color.Gray) } else if(this.weatherUiModel.precip>0 && this.weatherUiModel.precip<10){ Text(this.weatherUiModel.precip.toFixed(1) + \'mm\') .fontColor(\'#ff4193ee\') } else if(this.weatherUiModel.precip>=10 && this.weatherUiModel.precip<20){ Text(this.weatherUiModel.precip.toFixed(1) + \'mm\') .fontColor(\'#ff3176bc\') } else { Text(this.weatherUiModel.precip.toFixed(1) + \'mm\') .fontColor(\'#ff1162ac\') } } } // 最高最低温度 Column({ space: 10 }) { Row() { Image($r(\'app.media.icon_hot\')) .width(16) .height(16) Text(\'最高\' + this.weatherUiModel.tempMax.toString() + \'°\') .fontSize(20) } Row() { Image($r(\'app.media.icon_cold\')) .width(16) .height(16) Text(\'最低\' + this.weatherUiModel.tempMin.toString() + \'°\') .fontSize(20) } } } .backgroundColor(Color.White) .borderRadius(15) .width(\'90%\') .height(100) .justifyContent(FlexAlign.SpaceAround) // 当前时间详细天气数据 // 第一行 Row() { // 体感温度 Column({ space: 5 }) { Row() { Text(\'体感温度\') .fontSize(15) .fontColor(Color.Gray) Image($r(\'app.media.icon_feeling\')) .width(16) .height(16) } .padding({ top: 20 }) Text(this.weatherUiModel.nowFeelTemp.toString() + \'°\') .fontSize(25) .padding({ top: 5 }) } .backgroundColor(Color.White) .borderRadius(15) .width(\'48%\') .height(120) .alignItems(HorizontalAlign.Start) .padding({ left: 15 }) .onClick(() => { let ft = this.weatherUiModel.nowFeelTemp if (ft >= 30) { this.popupMessage = \'体感炎热\' } else if (ft < 30 && ft >= 20) { this.popupMessage = \'体感舒适\' } else if (ft < 20 && ft >= 10) { this.popupMessage = \'体感凉爽\' } else if (ft < 10 && ft >= 0) { this.popupMessage = \'体感较冷\' } else { this.popupMessage = \'体感寒冷\' } this.handlePopup = !this.handlePopup }) .bindPopup(this.handlePopup, { message: this.popupMessage, onStateChange: (e) => { if (!e.isVisible) { this.handlePopup = false; } } }) // 风向风速 Column({ space: 5 }) { Row() { Text(this.weatherUiModel.nowWindDir + \'风\') .fontSize(15) .fontColor(Color.Gray) Image($r(\'app.media.icon_wind\')) .width(16) .height(16) } .padding({ top: 20 }) Text(this.weatherUiModel.nowWindSpeed + \'km/h\') .fontSize(25) .padding({ top: 5 }) } .backgroundColor(Color.White) .borderRadius(15) .width(\'48%\') .height(120) .alignItems(HorizontalAlign.Start) .padding({ left: 15 }) } .width(\'90%\') .justifyContent(FlexAlign.SpaceBetween) // 第二行 Row() { // 气压 Column({ space: 5 }) { Row() { Text(\'气压\') .fontSize(15) .fontColor(Color.Gray) Image($r(\'app.media.icon_pressure\')) .width(16) .height(16) } .padding({ top: 20 }) Text(this.weatherUiModel.nowPressure.toString() + \'hPa\') .fontSize(25) .padding({ top: 5 }) } .backgroundColor(Color.White) .borderRadius(15) .width(\'48%\') .height(120) .alignItems(HorizontalAlign.Start) .padding({ left: 15 }) // 能见度 Column({ space: 5 }) { Row() { Text(\'能见度\') .fontSize(15) .fontColor(Color.Gray) Image($r(\'app.media.icon_visual\')) .width(16) .height(16) } .padding({ top: 20 }) Text(this.weatherUiModel.nowVis.toString() + \'km\') .fontSize(25) .padding({ top: 5 }) } .backgroundColor(Color.White) .borderRadius(15) .width(\'48%\') .height(120) .alignItems(HorizontalAlign.Start) .padding({ left: 15 }) } .width(\'90%\') .justifyContent(FlexAlign.SpaceBetween) } .width(\'100%\') } } 4.2Index.ets 在Index.ets中调用这部分构建代码 // 实时天气数据 nowWeatherDataComponent({ selectCity: $selectCity, cityArr: $cityArr, weatherNow: $weatherNow, weatherUiModel: $weatherUiModel }) .margin({bottom:10}) 其中 selectCity: $selectCity, cityArr: $cityArr, weatherNow: $weatherNow, weatherUiModel: $weatherUiModel 是向组件传递参数的,Index的build方法中有@State修饰的变量,在组件中就有@Link与其双向绑定的变量。 5实机演示 最终演示效果见文章顶部视频。目前只实现了UI框架,天气这些都是静态数据,下一步是要从网络获取实时天气数据。

    2025-07-08 13:32

  • 赛元弹簧触摸无反应

    赛元弹簧触摸,调试的时候都可以通过,但单独运行的时候,一会有反应,一会无反应,代码只加了一个定时功能

    2025-07-08 13:21

  • CYBT-413055-02无法建立蓝牙连接怎么解决?

    我将BLE_Throughput_Measurement_Server例子下载至CYBT-413055-02,将BLE_Throughput_Measurement_Client下载至CYW920719B2Q40EVB-01,上述下载过程均正常完成。但是按下CYW920719B2Q40EVB-01的SW3后无法建立蓝牙连接;用手机运行Cysmart偶尔能扫描到CYBT-413055-02,也无法建立蓝牙连接。 如果用一个CYW920719B2Q40EVB-01运行BLE_Throughput_Measurement_Server,另一个CYW920719B2Q40EVB-01运行BLE_Throughput_Measurement_Client,则例子可以正常运行。 请问CYBT-413055-02什么地方出问题了?

    2025-07-08 08:27

  • MTB中对于RADIUS服务器是否支持?

    想询问MTB中是否支持配置AP的RADIUS服务器,以及STA是否支持企业认证的加密方式。

    2025-07-08 08:10

  • 请问BTSDK3.1是否支持cyw20719B2 Quad SPI功能?

    请问,BTSDK3.1是否支持cyw20719B2 Quad SPI功能?

    2025-07-08 08:05

  • 请问CYW2019B2的SPI1与SPI2有什么区别?

    请问: CYW2019B2的SPI1与SPI2有什么区别?SPI接口工作于Slave方式,接收外设的数据。如果设为SPI1可以正常工作;设为SPI2也可以接收全部数据,但是顺序不对,请问这可能是什么原因?(HCI UART没有工作)

    2025-07-08 07:51