AiFlutter 文档AiFlutter 文档
入门指南
更新日志
官网
市场
社区
低代码平台
GitHub
入门指南
更新日志
官网
市场
社区
低代码平台
GitHub
  • 入门指南

    • AiFlutter 简介
      • 产品介绍
    • 快速开始
    • 工作空间概览

      • 工作台
      • 进入工作台
      • 工作台结构
      • 账户设置
      • 订单中心
      • 项目
      • 团队
      • 资源
    • 操作界面说明

      • 操作界面简介
      • 素材管理
      • 日志管理
      • 主题设置
      • App设置
      • 小部件面板
      • 自定义组件
      • 页面管理
      • 页面编辑窗口
      • 流程图
    • 组件介绍

      • 页面布局
      • 内容展示
      • 动画图表
      • 交互行为
      • 表单元素
      • 页面导航
      • 系统工具
    • 集成硬件
    • API管理
    • 数据库
    • 自定义管理
    • iOS软件包上传TestFlight并测试
    • 实践案例

      • 老板要求两天开发一个App,半天搞定!!!
      • 一个小时搞定蓝牙调试助手!!!
      • 一个小时搞定串口调试助手!!!

一个小时搞定串口调试助手!!!

项目介绍

      串口调试助手是一款用于串口通信调试的工具,它可以帮助开发人员发送和接收串口数据,主要用于嵌入式开发、工业控制、物联网设备开发等领域。

主要功能包括:

  1. 数据收发:可以实时发送和接收串口数据,并显示在界面上。
  2. 数据可视化:支持以十六进制形式显示数据,方便调试。
  3. COM口管理:仅支持桌面端使用,轻松管理多个串口设备。

该工具以图形化界面呈现,操作简单,适用于需要进行串口通信测试和调试的场景。

平台支持

  • Android
  • Windows
  • macOS

AiFlutter市场链接:串口调试助手App

平台实现步骤

1. 注册登录

打开 低代码平台登录网页 ,使用微信快捷登录或者扫描二维码登录。

2. 创建项目

  1. 点击【新增项目】->【手动添加】,在平台内部创建项目
  2. 在跳出的弹窗中输入项目名称、项目描述,建议结合项目功能描述命名,便于检索
  3. 输入完成后点击确定

image-20250416182738072

3. 页面设计

点击已经创建好的项目进入到操作界面,默认会存在一个HomePage页面,操作界面相关详情可查看教程 操作界面

页面描述

  • 在页面初始化时,分为两种情况
    • 移动端,扫描串口设备,如果存在串口设备则直接进行连接
    • 桌面端,扫描串口设备,将得到的串口设备列表进行存储并渲染页面
  • 连接设备,分为两种情况
    • 移动端,只连接扫描到的设备列表中第一个串口设备
    • 桌面端,用户在下拉菜单中选择串口设备进行连接
  • 接收数据,连接成功后,会监听数据流并将收到的数据进行存储
  • 发送数据,用户在输入框中输入16进制数据后点击发送即可
  • 实时渲染,一旦有数据过来则进行一次页面构建,保证数据实时刷新
  • 支持设备插拔,设备插拔后依然能够识别到设备并进行连接,不需要重新启动程序

效果图

image-20250412180239661

实现流程

(1)在【页面管理】中单击HomePage页面,在右侧的属性编辑器中添加页面变量

需要定义的变量如下

变量名称变量类型是否为数组默认值变量描述
serialPortVar否与串口设备通信的封装类对象
dataString否发送串口数据的内容
isWindowsVar否Platform.isWindows判断当前系统是否为windows
resMap是用来存储串口设备数据的载体
_dropDownValueString否COM1COM口下拉框选中值,仅在桌面端有用
availablePortsString是当前系统可用的COM口列表,仅在桌面端有用

image-20250410191347625

操作成功如下

image-20250417193750101

(2)添加页面初始化动作,在右侧的属性编辑器中点击【动作】-> 【打开】

image-20250410193134494

在操作流程编辑器中,页面初始化 事件下点击+号添加事件,再点击+号添加动作,动作按顺序依次添加如下

  1. 动作类型 --【硬件动作】,硬件类型 --【串口】,操作类型 --【拔出监听】,添加customCode1自定义代码块并选择
  2. 动作类型 --【自定义代码块】,代码块选择customCode1
  3. 动作类型 --【硬件动作】,硬件类型 --【串口】,操作类型 --【扫描】,扫描方式 --【单次扫描】
  4. 动作类型 --【硬件动作】,硬件类型 --【串口】,操作类型 --【连接】,连接方式 --【数组索引】,索引输入【0】
  5. 动作类型 --【硬件动作】,硬件类型 --【串口】,操作类型 --【接收数据】,添加customCode2自定义代码块并选择

操作成功如下

image-20250418174331067

(3)开启顶部导航栏,点击页面编辑窗口右上角的【顶部导航栏】并开启,配置顶部导航栏背景色为 #FF006FFF

image-20250416184144619

  • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到顶部导航栏中间位置中,然后在右侧的属性编辑器中配置属性,属性信息如下:
    • 文本内容串口调试助手
    • 文本颜色#FFFFFFFF
    • 文本大小18

(4)页面内容设计

  • 从【小部件面板】-> 【常用元素】中选择容器小部件拖入到页面编辑窗口内的上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

    • 宽 无限大 高700

    • 背景颜色#00C8C8C8

    • 内边距10

  • 从【小部件面板】-> 【常用元素】中选择上下布局小部件拖入到页面编辑窗口内的容器小部件中

  • 从【小部件面板】-> 【基本元素】中选择条件生成器小部件拖入到上下布局中,然后在右侧的属性编辑器中选择变量isWindows,属性信息如下:

    • 条件 isWindows = true,勾选展示此界面,从【小部件面板】-> 【常用元素】中左右布局小部件拖入到条件生成器小部件中

      • 从【小部件面板】-> 【表单元素】中选择下拉菜单小部件拖入到左右布局小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

        • 第一个数据绑定选择变量_dropDownValue
        • 第二个数据绑定选择变量avaliablePorts
      • 从【小部件面板】-> 【基本元素】中选择条件生成器小部件拖入到左右布局小部件中,然后在右侧的属性编辑器中选择变量serialPort,属性信息如下:

        • 条件 serialPort == null,勾选展示此界面,从【小部件面板】-> 【常用元素】中选择按钮小部件拖入到条件生成小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

          • 按钮背景颜色#FF006FFF

          • 按钮阴影大小4

          • 宽 50 高40

          • 按钮动作面板中打开动作流程编辑器,单击 事件下点击+号添加事件,再点击+号添加动作,动作按顺序依次添加如下

            1. 动作类型 --【自定义代码块】,添加customCode3自定义代码块并选择
            2. 动作类型 --【硬件动作】,硬件类型 --【串口】,操作类型 --【接收数据】,代码块选择customCode2
          • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到按钮小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

            • 文本内容 连接
            • 字体颜色 #FFFFFFFF
        • 条件 serialPort != null,勾选展示此界面,从【小部件面板】-> 【常用元素】中选择按钮小部件拖入到左右布局小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

          • 按钮背景颜色#FFF44336

          • 按钮阴影大小4

          • 宽 50 高40

          • 按钮动作面板中打开动作流程编辑器,单击 事件下点击+号添加事件,再点击+号添加动作,信息如下

            • 动作类型 --【自定义代码块】,添加customCode4自定义代码块并选择
          • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到按钮小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

            • 文本内容 断开
            • 字体颜色 #FFFFFFFF
        • 操作成功如下

        • image-20250418180422915

    • 条件 isWindows = false,勾选展示此界面,从【小部件面板】-> 【常用元素】中选择容器小部件拖入到条件生成器小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

      • 宽 0 高0
      • 背景颜色#00C8C8C8
    • 操作成功如下

    • image-20250418180202759

  • 再次从【小部件面板】-> 【常用元素】中选择容器小部件拖入到页面编辑窗口内的上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

    • 宽 无限大 高40
    • 背景颜色#00C8C8C8
    • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到容器小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:
      • 文本内容 数据收发内容
  • 从【小部件面板】-> 【基本元素】中选择容器小部件拖入到页面编辑窗口内的上下布局中,然后在右侧的属性编辑器中配置属性,属性信息如下:

    • 宽 无限大 高300

    • 背景颜色#00C8C8C8

    • 从【小部件面板】-> 【布局元素】中选择列表布局小部件拖入到容器小部件中

      • 绑定变量 res

      • 宽无限大 高无限大

      • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到列表布局小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

        • 文本内容 ${res[index]['time']}${res[index]['type']}: ${res[index]['data']}
        • 最大行数3
    • 操作成功如下

    • image-20250418180533453

    • 从【小部件面板】-> 【常用元素】中选择容器小部件拖入到上下布局小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

      • 宽无限大 高40
      • 背景颜色 #00C8C8C8
      • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到容器小部件中,并设置
        • 文本内容 发送数据内容
    • 从【小部件面板】-> 【常用元素】中选择按钮小部件拖入到上下布局小部件中,然后在右侧的属性编辑器中配置属性,属性信息如下:

      • 宽200 高40

      • 背景颜色 #FF006FFF

      • 阴影大小4

      • 圆角10

      • 从【小部件面板】-> 【常用元素】中选择文本小部件拖入到容器小部件中,并设置

        • 文本内容 发送数据

        • 字体颜色 #FFFFFFFF

        • 打开动作流程编辑器,单击 事件下点击+号添加事件,再点击+号添加动作,信息如下

          • 动作类型 --【自定义代码块】,添加customCode5自定义代码块并选择
      • 操作成功如下

      • image-20250418180620554

      customCode1内容如下

      void function(){
         if(Platform.isAndroid){
            return;
          }
          // 桌面串口初始化
          availablePorts = SerialPort.availablePorts;
      
          print("availablePorts==== ${availablePorts}");
      
          if (availablePorts.isEmpty) {
            return;
          }
          _dropDownValue = availablePorts[0];
          setState(() {});
      }

      customCode2内容如下

      void function(param){
       // 数据接收 
       res.add({
        "type":  "接收",
        "data":   param.join(),
              "time": DateFormat("HH:mm:ss").format(DateTime.now()),  
         });          
        setState(() {});
      }

      customCode3内容如下

      void function(){
          try {
            serialPort?.close();
            serialPort = SerialPort(_dropDownValue);
            if (serialPort == null) {
              print("打开串口失败");
              EasyLoading.showError("打开串口失败");        
              return;
            }
            SerialPortConfig config = serialPort?.config ?? SerialPortConfig();
            config.baudRate = 115200; 
            serialPort?.openReadWrite();
            serialPort?.config = config;
            print("打开串口成功");
          } catch (e) {
            print("打开串口失败");
            serialPort?.close();
            serialPort = null;
            EasyLoading.showError(
                "检测到串口故障,错误:UnsupportedOperationError ${e.toString().substring(e.toString().length - 10)}");
          }
          setState(() {});
      }

      customCode4内容如下

      void function(){
          serialPort?.close();
          serialPort = null;
          setState(() {});
      }

      customCode5内容如下

      void function(){
            if (data.isEmpty) {
                EasyLoading.showError("请输入发送数据内容");
                return;
            }
            sendDataSerial(data);
            res.add({
              "data": data,
              "time": DateFormat("HH:mm:ss").format(DateTime.now()),
              "type": "发送",
            });
            setState(() {});
      }
上次更新:
上一篇
一个小时搞定蓝牙调试助手!!!