App Inventor 2 蓝牙BLE通信教程

覆盖:蓝牙BLE、设备扫描、连接、数据收发、典型设备

一、蓝牙BLE基础

1.1 BLE vs 经典蓝牙

特性BLE经典蓝牙
功耗
距离50米10米
速度
用途传感器、心率音频、文件

1.2 核心概念

概念说明
Service服务,一组特征的集合
Characteristic特征,读写数据的单元
UUID唯一标识符
Notify通知模式,设备主动推送

二、扫描设备

2.1 开始扫描

当 按钮_扫描.被点击 时
  调用 蓝牙LE1.开始扫描(10)    // 扫描10秒

当 蓝牙LE1.发现设备 时(名称, 地址, 信号强度)
  // 添加到列表
  初始化局部变量 设备 = 创建字典(
    键值对("name", 名称),
    键值对("address", 地址),
    键值对("rssi", 信号强度)
  )
  追加列表项(全局变量 设备列表, 设备)
  设置 列表显示框1.适配器 = 全局变量 设备列表

三、连接设备

3.1 连接

当 列表显示框1.选择完成 时(选择项)
  初始化局部变量 选中设备 = 选择项
  初始化局部变量 地址 = 获取键的值(选中设备, "address", "")
  
  调用 蓝牙LE1.连接(地址, 10)    // 10秒超时

当 蓝牙LE1.连接成功 时(地址)
  调用 对话框1.显示消息对话框("连接成功", "提示", "确定")
  调用 发现服务()

当 蓝牙LE1.连接失败 时(地址, 错误码)
  调用 对话框1.显示消息对话框("连接失败: " + 错误码, "错误", "确定")

四、发现服务

4.1 获取服务

定义 发现服务()
  调用 蓝牙LE1.发现服务()

当 蓝牙LE1.发现服务完成 时(服务UUID列表)
  设置 全局变量 服务列表 = 服务UUID列表
  设置 列表显示框_服务.适配器 = 服务UUID列表

当 列表显示框_服务.选择完成 时(选择项)
  初始化局部变量 服务UUID = 选择项
  调用 蓝牙LE1.发现特征(服务UUID)

当 蓝牙LE1.发现特征完成 时(服务UUID, 特征UUID列表)
  设置 全局变量 特征列表 = 特征UUID列表

五、数据读取

5.1 读取特征

当 列表显示框_特征.选择完成 时(选择项)
  初始化局部变量 特征UUID = 选择项
  调用 蓝牙LE1.读取特征(全局变量 当前服务UUID, 特征UUID)

当 蓝牙LE1.读取完成 时(服务UUID, 特征UUID, 值, 状态)
  如果 状态 = "成功" 则
    // 值是Base64编码
    初始化局部变量 原始数据 = 值
    设置 标签_数据.文本 = 原始数据

六、数据写入

6.1 写入数据

定义 发送数据(数据)
  调用 蓝牙LE1.写入特征(
    全局变量 当前服务UUID,
    全局变量 写入特征UUID,
    数据,
    "no-response"    // 不等待响应
  )

当 按钮_发送.被点击 时
  初始化局部变量 命令 = 文本输入框_命令.文本
  调用 发送数据(命令)

七、通知订阅

7.1 订阅通知

当 按钮_订阅.被点击 时
  调用 蓝牙LE1.订阅通知(
    全局变量 当前服务UUID,
    全局变量 通知特征UUID,
    真    // 启用通知
  )

当 蓝牙LE1.收到通知 时(服务UUID, 特征UUID, 值)
  // 处理设备推送的数据
  设置 标签_实时数据.文本 = 值
  
  // 解析心率(心率服务的标准格式)
  如果 特征UUID = "00002a37-0000-1000-8000-00805f9b34fb" 则
    初始化局部变量 心率 = 取字节(值, 0)
    设置 标签_心率.文本 = "心率: " + 心率 + " bpm"

八、典型设备

8.1 心率带(Polar H10)

// 心率服务UUID
初始化全局变量 心率服务 = "0000180d-0000-1000-8000-00805f9b34fb"
// 心率特征UUID
初始化全局变量 心率特征 = "00002a37-0000-1000-8000-00805f9b34fb"

当 蓝牙LE1.收到通知 时(服务UUID, 特征UUID, 值)
  如果 服务UUID = 全局变量 心率服务 且 特征UUID = 全局变量 心率特征 则
    初始化局部变量 心率值 = 取字节(值, 0)
    设置 标签_心率.文本 = 心率值

九、常见问题

Q1:扫描不到设备?

  • 检查设备是否开启BLE
  • 检查定位权限(Android需要)
  • 距离是否太远

Q2:连接断开?

  • 检查电池电量
  • 距离是否过远
  • 是否有干扰

Q3:数据解析错误?

确认数据格式和编码

参考资料


文档版本:2026.03 | 作者:App Inventor 2 中文网 www.fun123.cn

参考资料与版权声明

原文来源

版权声明

本文档基于 MIT App Inventor 官方文档及社区资源整理,版权归原作者所有:
  • MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权
  • MIT App Inventor Community 帖子版权归原作者所有
本文档由 ai2claw 🐝 整理,仅供学习参考,如有侵权请联系删除。