Flythings学习(二)控件相关

news2025/1/4 19:16:13

文章目录

  • 1 前言
  • 2 通用属性
    • 2.1 控件ID值
    • 2.2 控件位置
    • 2.3 背景色
    • 2.4 背景图
    • 2.5 显示与隐藏
    • 2.6 控件状态
    • 2.7 蜂鸣器控制
  • 3 文本类TextView
  • 4 按键类 Button
    • 4.1 系统按键
    • 4.2 处理按钮长按事件
    • 4.3 处理按键触摸事件
  • 5 复选框CheckBox
  • 6 单选组 RadioGroup
  • 7 进度条,滑块
    • 7.1 如何控制滑块的进度
  • 8 指针仪表控件
  • 9 列表控件
    • 9.1 设置列表项的显示内容
    • 9.2 设置列表子项的显示内容
  • 10 编辑框
  • 11 窗口
  • 12 滑动窗口


1 前言

本系列笔记根据flythings官方文档进行学习,连接如下,相关下载在文档中的环境安装部分
https://developer.flythings.cn/zh-hans/

2 通用属性

2.1 控件ID值

ID值作为控件的唯一标识,每一个FTU文件里的控件ID值是不允许重名的,不同的ftu文件里的控件ID值允许重名;设置id后,编译完全会在activity目录下对应的头文件中生成相应的宏定义

在这里插入图片描述
所有控件都能使用

/**
 * 该接口定义于控件基类ZKBase中
 * 头文件位置: include/control/ZKBase.h
 *
 * 注意: 以下接口如未特殊说明,都表示定义在ZKBase类中
 * 所有控件直接或间接的继承了ZKBase类,所以,所有的控件都可以调用ZKBase类中public接口
 */
int getID() const;

/* 操作样例: 点击按钮控件,打印该控件ID值 */
static bool onButtonClick_Button1(ZKButton *pButton) {
    int id = pButton->getID();
    LOGD("onButtonClick_Button1 id %d\n", id);
    return false;
}

2.2 控件位置

在这里插入图片描述

// 设置位置
void setPosition(const LayoutPosition &position);
// 获取位置
const LayoutPosition& getPosition();

样例

/* 操作样例 */
// 点击按钮控件,设置该按钮位置
static bool onButtonClick_Button1(ZKButton *pButton) {
    // 左:0,上:0,宽:100,高:200
    LayoutPosition pos(0, 0, 100, 200);
    pButton->setPosition(pos);
    return false;
}

// 点击按钮控件,获取该按钮位置
static bool onButtonClick_Button2(ZKButton *pButton) {
    // pos的mLeft、mTop、mWidth、mHeight变量分别对应的就是坐标值
    LayoutPosition pos = pButton->getPosition();
    return false;
}

2.3 背景色

/**
 * Z6、Z11、A33平台接口定义
 * color为-1时,背景设置为透明;其他颜色值为0x RGB,颜色值不支持alpha
 */
void setBackgroundColor(int color);

/**
 * H500S、Z20、Z21及以后平台接口定义
 * color 颜色值为0x ARGB,支持alpha
 */
void setBackgroundColor(uint32_t color);


/* 操作样例: 点击按钮控件,设置背景颜色为红色 */
static bool onButtonClick_Button1(ZKButton *pButton) {
    pButton->setBackgroundColor(0xFFFF0000);
    return false;
}

2.4 背景图

在这里插入图片描述

/**
 * pPicPath参数可以有以下两种方式:
 * 1. 绝对路径,如:"/mnt/extsd/pic/bg.png"
 * 2. 相对资源目录路径,只需把图片放到项目工程resources目录下,编译打包后,就可以使用了,如resources目录下有bg.png图片,只需设置"bg.png"即可
 */
void setBackgroundPic(const char *pPicPath);


/* 操作样例 */
mButton1Ptr->setBackgroundPic("/mnt/extsd/pic/bg.png"); // 设置绝对路径
mButton1Ptr->setBackgroundPic("bg.png");    // 设置resources目录下bg.png图片

2.5 显示与隐藏

void setVisible(bool isVisible);
bool isVisible() const;
/* 操作样例 */
mButton1Ptr->setVisible(true);  // 显示按钮控件
mButton1Ptr->setVisible(false); // 隐藏按钮控件

/**
 * 窗口控件还可以使用下面的接口,功能一样
 * 头文件位置: include/window/ZKWindow.h
 */
void showWnd();  // 显示窗口
void hideWnd();  // 隐藏窗口
bool isWndShow() const;  // 窗口是否显示

/* 操作样例 */
mWindow1Ptr->showWnd();
mWindow1Ptr->hideWnd();

2.6 控件状态

在这里插入图片描述

// 设置选中状态
void setSelected(bool isSelected);
bool isSelected() const;

/* 操作样例 */
mButton1Ptr->setSelected(true);
mButton1Ptr->setSelected(false);


/**
 * 无效状态作用说明:控件设置为无效状态情况下,触摸控件没有作用,即不响应按下抬起事件
 */
// 设置无效状态
void setInvalid(bool isInvalid);
bool isInvalid() const;

/* 操作样例 */
mButton1Ptr->setInvalid(true);
mButton1Ptr->setInvalid(false);

2.7 蜂鸣器控制

在这里插入图片描述

// 所有控件都支持beep接口,以下为操作样例
mButton1Ptr->beep();


// 全局控制蜂鸣器
#include "manager/ConfigManager.h"
// 接口参数说明: true 开启、false 关闭
CONFIGMANAGER->setBeepEnable(true);

3 文本类TextView

通过代码动态更新文本内容
比如通过点击一个按钮,更新文字内容

static bool onButtonClick_Button1(ZKButton *pButton) {
 mTextView1Ptr->setText("Hello World");
 return false;
}

/* 操作样例 */
mTextView1Ptr->setText(123); // TextView1控件将显示"123"字符串
mTextView1Ptr->setText('c'); // TextView1控件将显示'c'字符

修改文字颜色大小等,可以通过控件更改,也可以通过代码更改

   //将控件TextView1 设置为无效状态;如果属性表中`无效时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。
   mTextView1Ptr->setInvalid(true);
   //将控件TextView1 设置为选中状态;如果属性表中`选中时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。
    mTextView1Ptr->setSelected(true);
       //将控件TextView1 设置为按下状态;如果属性表中`按下时颜色`属性不为空,则将其设置为指定的颜色,否则无变化。
    mTextView1Ptr->setPressed(true);
      //将控件TextView1 设置为红色。
   mTextView1Ptr->setTextColor(0xFF0000);
    

4 按键类 Button

在这里插入图片描述
在Logic.cc中设计点击函数

static bool onButtonClick_Button1(ZKButton *pButton) {
 //LOGD(" ButtonClick Button1 !!!\n");
 return false;
}

4.1 系统按键

除了自己定义的ID值外,按键还保留了两个系统按键值:sys_backsys_home ,从名字上我们大致可以知道它们的功能:返回键 和 Home键 ;点击返回键,界面会回到上一界面,如果进入了多层级的界面,点击Home键可以直接回到主界面(启动界面)。我们只需在按键的属性框中把ID值设置为 sys_back 或 sys_home ,就可以实现相应的功能。
在这里插入图片描述

4.2 处理按钮长按事件

在这里插入图片描述
这两个默认值是-1,可以进行相应设置
在这里插入图片描述
设置属性后,编译,打开对应的Logic.cc文件,在文件顶部,声明class LongClickListenner并继承
ZKBase::ILongClickListener类,实现virtual void onLongClick(ZKBase *pBase)方法

namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突

 //实现长按监听接口
 class LongClickListener : public ZKBase::ILongClickListener {

          virtual void onLongClick(ZKBase *pBase) {  
                 LOGD("触发长按事件");
                 static int count = 0;

                 char buf[128] = {0};
                 snprintf(buf, sizeof(buf), "长按事件触发次数 %d", ++count);
                 //每次触发长按事件,修改按键的文字
                 mLongButtonPtr->setText(buf);
          }
 };

 }

实例化监听类,设置为静态类型

 static LongClickListener longButtonClickListener;

在onUI_init()函数中注册按键长按监听

 static void onUI_init(){

         //注册按键长按监听
         mLongButtonPtr->setLongClickListener(&longButtonClickListener);
 }

在onUI_quit()中取消监听

 static void onUI_quit() {
        //取消按键长按监听
        mLongButtonPtr->setLongClickListener(NULL);
 }

4.3 处理按键触摸事件

实现监听接口类,继承自ITouchListener

 namespace {    // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突

 // 实现触摸监听接口
 class TouchListener : public ZKBase::ITouchListener {
 public:
     virtual void onTouchEvent(ZKBase *pBase, const MotionEvent &ev) {
         switch (ev.mActionStatus) {
         case MotionEvent::E_ACTION_DOWN:
             mTouchButtonPtr->setText("按下");
             break;
         case MotionEvent::E_ACTION_UP:
             mTouchButtonPtr->setText("抬起");
             break;
         default:
             break;
         }
     }
 };

 }

实例化监听类,并声明为静态类型

 static TouchListener sTouchListener;

在 static void onUI_init() 函数中注册按键触摸监听

 static void onUI_init() {
     //注册按键触摸监听
     mTouchButtonPtr->setTouchListener(&sTouchListener);
 }

在static void onUI_quit()函数中取消按键触摸监听

 static void onUI_quit() {
     //取消按键触摸监听
     mTouchButtonPtr->setTouchListener(NULL);
 }

5 复选框CheckBox

在拖入复选框后,在对应的Logic.cc中会产生关联函数,当点击控件时,关联函数会被系统调用
当点击控件时,关联函数会被调用

static void onCheckedChanged_Checkbox1(ZKCheckBox* pCheckBox, bool isChecked) {
 if (isChecked) {
   //复选框 为 选中状态
   LOGD("选中");
 } else {
   //复选框 为  未选中状态
   LOGD("未选中");
 } 
}

pCheckBox是该控件
isChecked时是否选中状态

6 单选组 RadioGroup

多个选项只能选择一个选项,组中选项的ID能在Activity.h中看到
在这里插入图片描述
在logic.cc中会自动创建关联函数

 static void onCheckedChanged_RadioGroup1(ZKRadioGroup* pRadioGroup, int checkedID) {
   LOGD("选中项的ID = %d", checkedID);
   switch (checkedID) {
     case ID_MAIN_RadioButton1:
       LOGD("第一项被选中");
       break;
     case ID_MAIN_RadioButton2:
       LOGD("第二项被选中");
       break;
     case ID_MAIN_RadioButton3:
       LOGD("第三项被选中");
       break;
     default:
       break;
   }
 }

checkedID是被选中的选项的ID

7 进度条,滑块

在这里插入图片描述
要准四张图片资源,分别是
背景图
有效图
滑块
滑块按下
在这里插入图片描述

7.1 如何控制滑块的进度

添加ui后,编译会自动添加在对应的.cc文件中
当进度条改变时,会自动调用函数

static void onProgressChanged_XXXX(ZKSeekBar *pSeekBar, int progress) {
   //LOGD("XXXX滑块的进度值变化为 %d !\n", progress);
}

设置滑块当前进度

//将滑块进度设置为28
mSeekbarPtr->setProgress(28)

获得滑块的当前进度

int progress = mSeekbarPtr->getProgress();
LOGD("当前滑块的进度值为 %s", progress);

8 指针仪表控件

需要两个图片资源,背景图和指针图片

在这里插入图片描述
通过代码设置指针的旋转角度

//将指针调整到90度
mPointer1Ptr->setTargetAngle(90.0);

9 列表控件

需要插入两个东西,一个是列表,一个是列表子项
在这里插入图片描述
有三个函数,在第一章讲过
int getListItemCount_ListView1(): 获取将要绘制列表的长度
例如: 要显示的数据有100条, 那么就返回100。
void obtainListItemData_List1: 具体设置列表每一项的显示内容 具体例子参见后续文档 以上两个函数共同控制着列表的显示内容。更具体的函数调用流程。
onListItemClick_List1: 列表控件的点击事件 当点击列表中的某一项时,系统会调用该函数,参数index 表示 当前被点击列表项的索引值。

9.1 设置列表项的显示内容

列表项,指列表组中的一个列表项中的内容

static void obtainListItemData_ListView1(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {
 //pListItem指针表示列表项, 该指针只能在这个函数内当中使用
 char buf[32] = {0};
 //参数index表示 当前绘制的是列表的第几项,从0开始。
 //这里,我们将index值格式化到字符串中
 snprintf(buf, sizeof(buf), "第%d项", index);
 //将字符串作为文字显示到列表项区域
 pListItem->setText(buf);
 //如果你在ui文件中,已经配置好了 列表项 "选中时的图片“,
 //那么,通过以下这行代码设置列表项的选中状态,即可控制列表项显示对应状态的图片
 pListItem->setSelected(true);
}

9.2 设置列表子项的显示内容

列表项中的列表子项

static void obtainListItemData_ListView1(ZKListView *pListView,ZKListView::ZKListItem *pListItem, int index) {
 char buf[32] = {0};
 //参数index表示 当前绘制的是列表的第几项,从0开始。
 //这里,我们将index值格式化到字符串中
 snprintf(buf, sizeof(buf), "第%d项的第一个子项", index);
 //我们可以通过findSubItemByID()函数以及列表子项的ID,得到列表子项的指针
 //与pListItem指针相同,查找得到的列表子项指针也只能在这个函数内当中使用
 ZKListView::ZKListSubItem* subitem1 = pListItem->findSubItemByID(ID_MAIN_SubItem1);
 if (subitem1 != NULL) {
     //设置列表子项1的文字
     subitem1->setText(buf);
 }

 snprintf(buf, sizeof(buf), "第%d项的第二个子项", index);
 ZKListView::ZKListSubItem* subitem2 = pListItem->findSubItemByID(ID_MAIN_SubItem2);
 if (subitem2 != NULL) {
     //设置列表子项2的文字
     subitem2->setText(buf);
 }
}

10 编辑框

一个可供输入的编辑框
获得模拟键盘的输入内容

static void onEditTextChanged_XXXX(const std::string &text) {
      //LOGD("当前输入的内容为 %s \n", text.c_str());
}

// 获得字符串
const char* str = text.c_str();

// 字符串转换为数字


static void onEditTextChanged_EditText1(const std::string &text) {
int number = atoi(text.c_str());
LOGD("字符串转为数字 = %d", number);
}

static void onEditTextChanged_EditText1(const std::string &text) {
// atof函数可以将字符串转为对应的浮点数,比如 “3.14” 可以转为整形 3.14
//如果参数不规范,会造成转换失败,统一返回 数字 0
double f = atof(text.c_str());
LOGD("字符串转为浮点数 = %f", f);
}
```cpp



11 窗口

界面中可以出现多个窗口
窗口中可以添加其他组件并自定义大小和位置

一般来说,通过触摸滑动来上下翻页,但也有相应函数

// 切换到下一页,有动画
mPageWindow1Ptr->turnToNextPage(true);
// 切换到下一页,无动画
mPageWindow1Ptr->turnToNextPage(false);

// 切换到上一页,有动画
mPageWindow1Ptr->turnToPrevPage(true);
// 切换到上一页,无动画
mPageWindow1Ptr->turnToPrevPage(false);

监听翻刀了第几页

 namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突
 // 实现自己的监听接口
 class MyPageChangeListener : public ZKPageWindow::IPageChangeListener {
 public:
     virtual void onPageChange(ZKPageWindow *pPageWindow, int page) {
         LOGD("当前切换到第%d页", page);
     }
 };
 }
 // 定义监听对象
 static MyPageChangeListener sMyPageChangeListener;

 static void onUI_init() {
     mPageWindow1Ptr->setPageChangeListener(&sMyPageChangeListener);
 }

// 获取当前是第几页
int i = mPageWindow1Ptr->getCurrentPage();
LOGD("当前是第%d页", i);

滚动窗口类似于手机主界面上下或者左右滚动的界面效果
由一个滚动窗口、一个窗口和多个控件组成

12 滑动窗口

在这里插入图片描述
滑动窗口中的图标会自行进行排列,也可以手动调整间距等属性

代码操作

// 切换到上一页,有动画
mSlideWindow1Ptr->turnToPrevPage(true);
// 切换到上一页,无动画
mSlideWindow1Ptr->turnToPrevPage(false);

// 切换到下一页,有动画
mSlideWindow1Ptr->turnToNextPage(true);
// 切换到下一页,无动画
mSlideWindow1Ptr->turnToNextPage(false);

 namespace { // 加个匿名作用域,防止多个源文件定义相同类名,运行时冲突
 // 实现自己的监听接口
 class MySlidePageChangeListener : public ZKSlideWindow::ISlidePageChangeListener {
 public:
     virtual void onSlidePageChange(ZKSlideWindow *pSlideWindow, int page) {
         LOGD("当前切换到第%d页", page);
     }
 };
 }
 // 定义监听对象
 static MySlidePageChangeListener sMySlidePageChangeListener;

 static void onUI_init() {
     mSlidewindow1Ptr->setSlidePageChangeListener(&sMySlidePageChangeListener);
 }

监听后,可以自己设置点击或长按等相关操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode如何通过ssh远程链接其它电脑

客户端(本机)linux系统中vscode通过ssh插件远程连接服务器,其操作步骤如下: 配置服务器的配置文件 首先在~/.ssh/config文件中输入服务器的配置信息,如果没有这个文件就新建一个,其内容如下: …

线性系统性能分析方法2——根轨迹法

反馈控制系统的性质取决于闭环传递函数,只要求解出闭环系统的特征根,便能得到系统响应的变化规律。但对于3阶以上的系统求根比较困难。如果系统中有一个可变参数时,求根就更困难了。 1948年,伊凡思提出了一种确定系统闭环特征根的…

ENSP搭建基础网络拓扑图

一、ENSP的基本操作 1、配置网关 进入系统视图与退出 <Huawei>system-view [Huawei]quit 进入G0/0/0接口后配置ip [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 24查询所有接口的ip配置 [R1]display ip interface brief…

02 django管理系统 - base.html模板的搭建

下面&#xff0c;我们正式开始XX市第X医院员工信息管理系统的开发 首先&#xff0c;我们项目的目录结构如下&#xff1a; 然后&#xff0c;先把模板【base.html】界面的框架搭起来 {% load static %}<!DOCTYPE html> <html lang"en"><head><m…

使用最小二乘法画噪声数据的近似曲线

文章目录 问题MATLAB代码验证数据1验证数据2 问题 已知有系列含有噪声的数据&#xff08;x , y&#xff09;用最小二乘法计算m和b。(ymxb) MATLAB代码 disp(This promgram perform a leastsquares fit of an); disp(input data set to a straight line.); n_points input(E…

minio储存应用部署

一、minio简介 MinIO 是一个高性能的对象存储系统&#xff0c;设计用于存储大量的非结构化数据&#xff0c;如图片、视频、日志文件等。它完全兼容 Amazon S3 API&#xff0c;这意味着你可以使用与 S3 相同的工具和接口来管理和访问 MinIO 中的数据。 二、主要特性 1. S3 兼…

Vue3实现面板分割

Vue3实现面板分割 下面是将你提供的 Vue 组件使用 SCSS&#xff0c;并以 Vue 3 的组合式 API 形式的面板分割代码。 1、建立组件相关的文件夹 2、将下面代码拷贝到index.vue中 <template><div class"g-split" ref"gSplit"><!-- 水平方向…

数学建模算法与应用 第15章 预测方法

目录 15.1 微分方程模型 Matlab代码示例&#xff1a;求解简单的微分方程 15.2 灰色预测模型&#xff08;GM&#xff09; Matlab代码示例&#xff1a;灰色预测模型 15.3 自回归模型&#xff08;AR&#xff09; Matlab代码示例&#xff1a;AR模型的预测 15.4 指数平滑法 M…

easyocr 本地部署模型 识别图像 ocr - python 实现

使用 easyocr 本地部署识别图像 ocr ,可以满足简单图像场景的ocr识别。 可以进行 中文、英文 ocr 识别。 安装 python 库 pip install easyocr 识别本地模型下载地址&#xff1a;easyocr本地部署模型识别图像ocr-python实现资源-CSDN文库 也可通过程序直接下载官方链接 识…

计算机的错误计算(一百二十一)

摘要 探讨表达式 “((1/3-0.3333333333333333235)(1/3-0.333333333333333759)*0.008)*10^20” 的计算精度问题。 对于下列算式 若用C编程计算&#xff0c;则输出是错误结果[1]。那么别的语言呢&#xff1f; 例1. 计算 不妨用Java代码计算&#xff1a; public class expres…

el-image预览时和el-table边框出现样式穿透问题处理

el-image预览时和el-table边框出现样式穿透问题处理 如图所示 我们只需要在当前组件加一个css即可解决问题 <style lang"scss" scoped> :deep(.el-table__cell) {position: static !important; } </style>

Django学习笔记之Django基础学习

Django笔记 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录…

黑马程序员 javaWeb基础学习,精细点复习【持续更新】

文章目录 WEB开发一、HTML1.html介绍 二、CSS1.CSS介绍2.CSS导入方式3.CSS选择器4.CSS属性 三、JavaScript1.介绍2.浏览器3.js的三种输出方式4.js定义变量5.js数据类型6.js运算符7.全局函数8.函数定义9.js数组对象10.js正则对象11.字符串对象12.自定义对象13.BOM浏览器对象模型…

前端开发笔记--css 黑马程序员1

文章目录 1. css 语法规范2.css的书写风格3.基础选择器选择器的分类标签选择器类选择器类选择器的特殊使用--多类名 id 选择器 字体属性常见字体字体大小字体粗细字体倾斜字体的复合简写字体属性总结 文本属性文本颜色文本对齐装饰文本文本缩进文本间距文本属性总结 css的引入方…

新兴的安全职业挑战

我们经常与安全专业人士交谈&#xff0c;他们希望在努力提升职业发展的同时提高自己的价值并克服组织内部的挑战。在这些谈话中&#xff0c;花费大量时间讨论公司未来将面临的安全问题并不罕见。 安全领导者希望为问题制定计划并获得领导层对其计划的支持。这通常意味着实施修…

关于 文件操作详解 笔记 (含代码解析)

文件 磁盘&#xff08;硬盘&#xff09;上的⽂件是⽂件。 程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a;程序⽂件、数据⽂件&#xff08;从⽂件功能的⻆度来分类 &#xff09; 程序⽂件 程序⽂件包括源程序⽂件&#xff08;后缀为.c&#xff09;,⽬标⽂件&#…

Mac解决服务端第三方库安装问题

问题&#xff1a; 这周使用Flask框架写了一个数据展示的小网页&#xff0c;在发布的时候发现构建失败&#xff0c;查看日志发现是这次新增的一个第三方库没有安装到服务端&#xff0c;导致构建的时候失败了 解决问题&#xff1a; 服务端发布新增第三方库 解决过程 1、确定服务…

笔记整理—linux网络部分(1)基础网络常用名词与知识

最开始使用在同一电脑主机下进行的通信门后面发展到不同主机之间的通信。 应用编程本章就是使用API socket进行通信。 应用层&#xff1a;低级&#xff08;直接基于socket接口编程&#xff09; 高级&#xff08;基于网络通信应用框架进行编程&#xff09; 更高级&#xff08;ht…

利用 Llama 3.1模型 + Dify开源LLM应用开发平台,在你的Windows环境中搭建一套AI工作流

文章目录 1. 什么是Ollama&#xff1f;2. 什么是Dify&#xff1f;3. 下载Ollama4. 安装Ollama5. Ollama Model library模型库6. 本地部署Llama 3.1模型7. 安装Docker Desktop8. 使用Docker-Compose部署Dify9. 注册Dify账号10. 集成本地部署的 Llama 3.1模型11. 集成智谱AI大模型…

【物联网】物联网智能项目:从概念到实践

物联网智能项目&#xff1a;从概念到实践 1. 物联网简介 物联网&#xff08;IoT, Internet of Things&#xff09;是指通过网络将各种物理设备连接起来进行数据交互的系统&#xff0c;目标是通过智能设备感知、采集和处理环境信息&#xff0c;实现远程控制、自动化操作和智能…