0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

双 Air8000 核心板构建 BLE 中心模式通信系统全流程

青山老竹农 来源:jf_82863998 作者:jf_82863998 2025-09-04 16:09 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

从硬件连接到软件配置,本文完整记录双 Air8000 核心板搭建 BLE 中心设备通信系统的全过程,涵盖协议适配、连接建立及性能测试等关键环节。

一、BLE 概述

BLE(Bluetooth Low Energy),也称为 Bluetooth Smart,是蓝牙 4.0 及更高版本引入的低功耗无线通信技术,专为低带宽、间歇性数据传输的物联网IoT)和穿戴设备设计。

Air8000 支持最新的 BLE 5.4 版本,BLE 5.4 在上一代基础上继续优化了功耗和性能,为用户提供了更高效、更稳定的蓝牙连接体验。具体的 BLE 版本区别若有兴趣请自行上网查询,本处不再赘述。

BLE 支持的四种模式

Air8000 的 BLE 支持 4 种模式,分别是中心设备模式(central),外围设备模式(peripheral),广播者模式(ibeacon),以及观察者模式(scan)。

1、中心设备模式(central):

中心设备模式是能够搜索别人并主动建立连接的一方,从扫描状态转化而来的。其可以和一个或多个从设备进行连接通信,它会定期的扫描周围的广播状态设备发送的广播信息,可以对周围设备进行搜索并选择所需要连接的从设备进行配对连接,建立通信链路成功后,主从双方就可以发送接收数据。

2、外围设备模式(peripheral):

外围设备模式是从广播者模式转化而来的,未被连接的外围设备首先进入广播状态,等待被中心设备搜索,当中心设备扫描到外围设备建立连接后,就可以和中心设备进行数据的收发,其不能主动的建立连接,只能等别人来连接自己。和广播模式有区别的地方在于,外围设备模式的设备是可以被连接的,定期的和中心设备进行连接和数据传输,在数据传输过程中作外围设备。

3、广播者模式(ibeacon)

处于广播模式的设备,会周期性的广播 beacon 信息, 可以被扫描, 但一般不会被连接,典型应用 ibeacon。

4、观察者模式(scan)

观察者模式,该模式下模块为非连接,相对广播者模式的一对多发送广播,观察者可以一对多接收数据。在该模式中,设备可以仅监听和读取空中的广播数据。和中心设备唯一的区别是不能发起连接,只能持续扫描外围设备。

蓝牙中的重要概念

1、GATT(通用属性配置文件)

定义 BLE 设备如何组织和传输数据,以 “服务(Service)” 和 “特征(Characteristic)” 为单位。

示例:心率监测设备的 GATT 服务包含 “心率特征”,手机通过读取该特征获取心率数据。

2、服务和特征

服务是特征的容器,通过逻辑分组简化复杂功能的管理;

特征是数据交互的最小单元,通过属性定义实现灵活的读写与推送机制;

两者结合构成 GATT 协议的核心框架,支撑蓝牙设备间的标准化数据交互(如智能穿戴、医疗设备、物联网传感器)。

3、特征的关键属性(Properties)

特征通过 “属性” 定义数据的操作方式,常见属性包括:

wKgZO2i5Qu6AZQ6oAAEfsAi1uFM522.png

4、UUID

UUID 是蓝牙 GATT 协议的 “数字身份证”,通过标准化的唯一标识机制,实现了跨厂商设备的功能互认(标准 UUID)与厂商个性化功能的扩展(自定义 UUID)

Air8000 的所有操作,都通过 UUID 来索引和管理

二、演示功能概述

本示例使用两个 Air8000 核心板来演示 BLE 中心设备模式:一个核心板做中心设备(烧录 central demo),另一个核心板做外围设备(烧录 peripheral demo)。

演示功能概述如下:

1、ble 中心设备扫描并连接外围设备;

2、ble 中心设备连接成功后,开始定时读取外围设备特征值 UUID 数据, 同时也定时发送数据给外围设备;

3、ble 中心设备收到外围设备特征值 UUID 的 notify 数据后,通过 uart 发送到 pc 端串口工具;

4、pc 端串口工具收到数据后,打印到串口工具窗口。

三、准备硬件环境

3.1 Air8000 核心板

使用 Air8000 核心板,如下图所示:

wKgZO2i5Q8GAOtk8AAff6kIKYVo231.png

3.2 PC 电脑

WIN10 以及以上版本的 WINDOWS 系统。

3.3 数据通信线

USB 数据线(其一端为 Type-C 接口,用于连接 Air8000 开发板)。

四、准备软件环境

4.1 软件环境

1、 烧录工具:https://docs.openluat.com/air780epm/common/Luatools/

2、内核固件:https://docs.openluat.com/air8000/luatos/firmware/(理论上,2025 年 7 月 26 日之后发布的固件都可以)

3、脚本文件:

中心设备:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/central

外围设备:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/peripheral

4、PC 端串口工具:例如 SSCOM、LLCOM 等都可以

5、LuatOS 运行所需要的 lib 文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件。

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 核心板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。(https://docs.openluat.com/air8000/luatos/common/download/)

4.2 API 介绍

ble 库:https://docs.openluat.com/osapi/core/ble/

五、程序结构

wKgZPGi5RMmAYGYdAAEqi_EwWEo594.png

5.1 文件说明

main.lua:主程序入口文件。

ble_client_main.lua:BLE 中心设备主程序,进行 BLE 初始化,处理各类 BLE 事件(连接、断开连接、扫描报告、GATT 操作完成等)。

ble_client_receiver.lua:BLE 中心设备接收数据处理。

ble_client_sender.lua:BLE 中心设备发送数据处理。

ble_timer_app.lua:BLE 中心设备定时器处理逻辑,启动两个循环定时器,一个用于定时读取外围设备特征值 UUID 数据,一个用于定时向外围设备特征值 UUID 发送数据。

ble_uart_app.lua:BLE 中心设备接 uart 处理逻辑,将收到的 notify 数据,通过 uart 发送到 pc 端串口工具。

check_wifi.lua:Air8000 的蓝牙功能依赖 WiFi 协处理器,需确保 WiFi 固件为最新版本。本脚本文件检查当前 Air8000 模组的 WiFi 固件是否为最新版本,若不是则自动启动升级(需插入可联网的 SIM 卡)

六、核心模块详解

6.1 主程序 (main.lua)

主程序文件main.lua是整个项目的入口点。它负责初始化系统环境。

6.1.1 初始化流程

1、项目和版本定义:

定义PROJECT和VERSION变量。

2、日志记录:

使用log.info("main", PROJECT, VERSION)在日志中打印项目名和版本号。

3、看门狗初始化(如果支持):

配置并启动硬件看门狗,防止程序死循环卡死。

4、加载功能模块:

加载 BLE Central(中心设备)主控制模块(ble_client_main)。

加载 wifi 升级模块(check_wifi)。

加载串口应用功能模块(ble_uart_app)。

加载定时器应用功能模块(ble_timer_app)。

5、启动任务调度器:

调用sys.run()启动 LuatOS 的任务调度器,开始执行各个任务。

6.2 ble_client_main

本文件为 ble client 主应用功能模块,整个应用通过 sysplus.taskInitEx 启动主任务,实现了完整的 BLE 中心设备功能,包括设备发现、连接管理、数据收发和异常恢复机制。核心业务逻辑为:

6.2.1 初始化与配置

加载依赖模块( ble_client_receiver 用于数据接收处理, ble_client_sender 用于数据发送处理)。

定义配置参数(目标设备名称、服务 UUID、特征值 UUID、超时时间等)。

调用 ble_init(),初始化蓝牙功能。

6.2.2 设备扫描与连接

创建并启动 BLE 扫描(默认参数:公共地址模式、扫描间隔 100ms、扫描窗口 100ms)。

通过 is_target_device 函数过滤扫描到的设备(匹配设备名称)。

发现目标设备后停止扫描并发起连接。

连接超时处理和重连机制。

6.2.3 事件处理

通过 ble_event_cb 回调函数处理各类 BLE 事件:

连接成功(EVENT_CONN)

断开连接(EVENT_DISCONN)

扫描报告(EVENT_SCAN_REPORT)

GATT 操作完成(EVENT_GATT_DONE)

读取特征值完成(EVENT_READ_VALUE)

6.2.4 业务功能

GATT 服务发现完成后,自动启用目标特征值的通知监听。

接收并处理来自其他模块的读取请求(READ_REQ)。

通过消息队列与其他模块通信。

6.2.5 异常处理

扫描超时或连接失败时触发异常处理。

断开连接后自动清理消息队列并尝试重连。

异常情况下 5 秒后重新开始扫描连接。

6.3 ble_client_receiver

6.3.1 主要功能

数据分类处理 :接收两类数据(外围设备通知数据和主动读取到的数据)。

数据分发 :根据数据类型(通过特征值 UUID 区分)发布到不同的消息队列,供其他模块处理。

6.3.2 核心实现

提供proc(service_uuid, char_uuid, data)接口函数,接收服务 UUID、特征值 UUID 和数据。

通过判断特征值 UUID 是否匹配配置中的target_notify_char或target_read_char来区分数据类型。

对于外围设备的通知数据,通过sys.publish("RECV_BLE_NOTIFY_DATA", ...)发布。

对于主动读取到的数据,通过sys.publish("RECV_BLE_READ_DATA", ...)发布。

6.3.3 数据流转

当ble_client_main模块接收到EVENT_READ_VALUE事件时,会调用此模块的 proc 函数。

本模块将数据分类后发布到对应的消息主题。

其他订阅了这些消息主题的模块可以接收并处理数据。

6.4 ble_client_sender

其他模块只需发布"SEND_DATA_REQ"消息即可请求中心设备向外围设备发送数据。

6.4.1 主要功能

消息订阅:订阅"SEND_DATA_REQ"消息,接收其他模块的发送请求。

队列管理:维护发送队列 send_queue,存储待发送的数据项(包含服务 UUID、特征值 UUID、数据、回调信息)。

任务调度:通过任务处理函数 ble_client_sender_task_func 处理各类 BLE 事件。

数据发送:按顺序发送队列中的数据,并通过回调通知发送结果。

6.4.2 核心实现

其他模块通过sys.publish("SEND_DATA_REQ", ...)发布 发送请求。

send_data_req_proc_func函数将请求数据加入发送队列,并通知任务。

任务处理函数根据 BLE 事件状态(连接成功、断开连接等)处理队列数据。

send_item_func函数负责实际发送数据。

send_item_cbfunc函数处理发送结果,调用用户回调。

6.4.3 事件处理

CONNECT_OK:BLE 连接成功,开始发送队列数据。

SEND_REQ:有新数据需要发送,继续处理队列。

DISCONNECTED:连接断开,清空队列并通知所有发送请求失败。

6.5 ble_uart_app

6.5.1 主要功能

UART 初始化:打开 UART1 接口,配置波特率 115200、数据位 8、停止位 1、无奇偶校验。

数据接收:订阅 "RECV_BLE_NOTIFY_DATA" 消息,接收来自 BLE 外围设备的通知数据。

数据转发:将接收到的 BLE 数据(包含服务 UUID、特征值 UUID 和实际数据)格式化后通过 UART1 发送到 PC 端。

6.6 ble_timer_app

6.6.1 主要功能

创建两个独立的 5 秒循环定时器

一个用于定时 发送 数据到外围设备特定特征值 UUID。

一个用于定时 读取 外围设备特定特征值 UUID 的数据。

6.6.2 核心实现

定义了目标服务 UUID( FA00 )和特征值 UUID(写: EA02 ,读: EA03 )。

实现数据发送结果回调函数 send_data_cbfunc ,用于处理发送成功/失败的通知。

实现两个定时器回调函数:

send_data_req_timer_cbfunc:发布SEND_DATA_REQ消息到 ble_client_sender 模块。

read_data_req_timer_cbfunc:发送READ_REQ请求到 ble_client_main 模块。

启动两个 5 秒循环定时器,分别绑定上述两个回调函数。

6.6.3 数据流转

发送流程:定时器触发 → 发布SEND_DATA_REQ消息 →ble_client_sender处理 → 回调通知结果。

读取流程:定时器触发 → 发送READ_REQ请求 →ble_client_main处理 → 结果通过事件返回。

七、结果展示

7.1 中心设备订阅外围设备特征通知(Notify)

1、中心设备端实现

在 ble_client_main.lua 文件中,在ble.EVENT_GATT_DONE事件触发后,开启 notify 监听,监听外围设备指定服务和特征值的通知,中心设备收到 notify 数据后,将数据通过 uart1 发送到 PC 端。开启监听的主要 demo 如下:

wKgZPGi5RcCAAZw5AAEXcjw6NT0319.png

2、外围设备端要求

服务 UUID 和特征 UUID 需要和上面中心设备端实现的一致,同时特征 UUID 的属性需包含 NOTIFY,才能正常通信。

服务 UUID:FA00,特征 UUID:EA01。

wKgZO2i5RgyASEHqAAFW3VO7TVg600.png

3、结果展示

wKgZO2i5Rk-AeqnLAAaKksQNgWU184.png

7.2 中心设备写入特征值(Write)

1、中心设备端实现

ble_timer_app.lua 中,启动 5 秒的循环定时器,发布SEND_DATA_REQ消息到 ble_client_sender 模块,ble_client_sender 模块订阅到消息后,开始调用 write_value 向外围设备特征值写入数据,关键发送部分 demo 如下所示:

wKgZO2i5RqSAFeBVAAFao7J2O0I632.png


2、外围设备端要求

服务 UUID 和特征 UUID 需要和上面中心设备端实现的一致,同时特征 UUID 的属性需包含 WRITE。

服务 UUID:FA00,特征 UUID:EA02。

触发 ble.EVENT_WRITE 事件,接收到写请求并通过 luatools 打印出来。

3、结果展示

wKgZPGi5RtWAP6KnAAlR215S7tY770.png

7.3 中心设备读取特征值(Read)

1、中心设备端实现

ble_timer_app.lua 中,启动 5 秒的循环定时器,发送READ_REQ请求,ble_client_main 模块收到请求后通过 read_value 开始读取外围设备特征值数据,读取成功后将数据转给 ble_client_receiver 模块处理,关键 demo 如下所示:

wKgZO2i5RwuAJCRbAAHXJPbPpUo884.png

2、外围设备端要求

服务 UUID 和特征 UUID 需要和上面中心设备端实现的一致,同时特征 UUID 的属性需包含 READ。

服务 UUID:FA00,特征 UUID:EA03。

wKgZPGi5Rz-ALOWOAAECV6v00xo874.png


3、结果展示

wKgZO2i5R2KAfbvgAARVdYjpOlc612.png

八、总结

本篇文档介绍了 Air8000 的 BLE central 模式,通过两个 Air8000 核心板:一个作中心设备,一个作外围设备,演示了 BLE 中心设备三大核心操作:

1)订阅通知(Notify):自动获取外围设备推送的数据,

2)写入特征值(Write):用于发送控制指令,要求外围设备特征支持 WRITE 属性;

3)读取特征值(Read):主动获取外围设备状态,需外围设备开放 READ 权限。

三种操作均需中心设备和外围设备的服务/特征 UUID 严格匹配。

今天的内容就分享到这里了~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信系统
    +关注

    关注

    6

    文章

    1247

    浏览量

    54956
  • BLE
    BLE
    +关注

    关注

    13

    文章

    745

    浏览量

    65981
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Air8000 BLE外围模式解析:数据收发实战指南!

    Air8000BLE外围设备模式(peripheral)是实现低功耗蓝牙通信的关键功能,它既能主动向中心设备发送通知数据,也能接收
    的头像 发表于 11-24 14:26 1571次阅读
    <b class='flag-5'>Air8000</b> <b class='flag-5'>BLE</b>外围<b class='flag-5'>模式</b><b class='flag-5'>全</b>解析:数据收发实战指南!

    Air8000 核心板实现 BLE 中心模式的开发实践 !

    聚焦 Air8000 核心板BLE 开发,本文以配置为例,讲解中心设备
    的头像 发表于 09-04 16:09 3734次阅读
    <b class='flag-5'>双</b> <b class='flag-5'>Air8000</b> <b class='flag-5'>核心板</b>实现 <b class='flag-5'>BLE</b> <b class='flag-5'>中心</b><b class='flag-5'>模式</b>的开发实践 !

    BLE 5.4时代下,Air8000蓝牙通知与手机读写操作实战攻略

    随着BLE 5.4的普及,Air8000模块蓝牙通信性能再升级。本篇将从实战角度出发,讲解如何通过Air8000发送设备通知,以及如何利用手机APP对从机设备进行数据读写,助你高效完成
    的头像 发表于 08-13 15:31 669次阅读
    <b class='flag-5'>BLE</b> 5.4时代下,<b class='flag-5'>Air8000</b>蓝牙通知与手机读写操作实战攻略

    是否必须使用LuatIO?Air8000 GPIO配置与设计规范深度解析

    Air8000的GPIO应用开发中,LuatIO的角色至关重要。本文剖析其必要性,结合设计注意事项,为开发者提供从配置到优化的流程指南。 想要4G+GNSS+WiFi+BLE
    的头像 发表于 07-29 13:54 378次阅读
    是否必须使用LuatIO?<b class='flag-5'>Air8000</b> GPIO配置与设计规范深度解析

    高效开发:解锁Air8000 LuatOS softAP配网功能的核心技术!

    为缩短物联网项目开发周期,掌握高效的配网技术至关重要。本文聚焦Air8000平台,深入讲解如何利用LuatOS系统开发softAP配网功能,通过优化代码架构与协议设计,实现设备快速、稳定的网络接入
    的头像 发表于 07-17 15:49 469次阅读
    高效开发:解锁<b class='flag-5'>Air8000</b> LuatOS softAP配网功能的<b class='flag-5'>核心</b>技术!

    如何用Air8000打造无线接入点?AP模式操作指南

    借助Air8000工业引擎的AP模式,可构建自主控制的Wi-Fi网络。本文将介绍所需硬件、接线方式及关键配置步骤,助力设备间无线通信的快速部署。   一、AP 概述   文章开篇先简单
    的头像 发表于 07-11 17:36 576次阅读
    如何用<b class='flag-5'>Air8000</b>打造无线接入点?AP<b class='flag-5'>模式</b>操作指南

    北斗GPS双模赋能Air8000:定位精度革命与天线设计优化的实践路径

    Air8000模块通过集成北斗与GPS双模导航系统构建了全天候、高可靠的定位网络。其独特的天线设计,包括微带线阻抗控制与共面波导结构,有效解决了信号传输损耗问题,使得设备在弱信号区域仍能精准
    的头像 发表于 07-11 16:24 444次阅读
    北斗GPS双模赋能<b class='flag-5'>Air8000</b>:定位精度革命与天线设计优化的实践路径

    Air8000蓝牙新篇章:BLE 5.4——轻松实现通知推送与手机端设备控制!

    在物联网设备互联需求日益增长的背景下,Air8000蓝牙功能迎来重大突破,全面兼容BLE 5.4标准。本文将详细讲解如何利用该模块发送实时通知,以及通过手机实现从机设备的读写操作,解锁智能交互新场景
    的头像 发表于 07-11 15:13 591次阅读
    <b class='flag-5'>Air8000</b>蓝牙新篇章:<b class='flag-5'>BLE</b> 5.4——轻松实现通知推送与手机端设备控制!

    LuatOS蓝牙配网开发全攻略:以Air8000核心实战教学

    聚焦Air8000核心板的蓝牙配网功能,本文整合开发流程:硬件准备、脚本编写、固件烧录及测试验证,为开发者提供一站式解决方案。 一、蓝牙配网概述   文章开篇先简单介绍下
    的头像 发表于 07-10 17:17 385次阅读
    LuatOS蓝牙配网开发全攻略:以<b class='flag-5'>Air8000</b>为<b class='flag-5'>核心</b>实战教学

    LuatOS蓝牙配网流程解析:Air8000开发入门必备

    针对Air8000开发的蓝牙配网功能,本文通过详细步骤分解技术要点,结合LuatOS系统特性,帮助开发者从零基础搭建蓝牙通信环境,掌握关键代码逻辑与调试技巧。 一、蓝牙配网概述  
    的头像 发表于 07-10 17:11 461次阅读
    LuatOS蓝牙配网<b class='flag-5'>全</b><b class='flag-5'>流程</b>解析:<b class='flag-5'>Air8000</b>开发入门必备

    快速上手Air8000 AP模式:Wi-Fi热点创建与设备管理

    Air8000 工业引擎的 AP 模式,一般来说,Air8000 工业引擎使用中支持两种无线网络工作模式,分别为 AP 模式和 STA
    的头像 发表于 07-10 16:28 325次阅读
    快速上手<b class='flag-5'>Air8000</b> AP<b class='flag-5'>模式</b>:Wi-Fi热点创建与设备管理

    Air8000核心板SoftAP配网方案:快速构建无线接入点

    本文聚焦Air8000核心板的SoftAP配网方案,详细介绍如何快速创建SoftAP热点,实现设备间的无线通信,为物联网应用提供灵活的网络接入途径。 下面以Air8000
    的头像 发表于 06-20 09:36 491次阅读
    <b class='flag-5'>Air8000</b><b class='flag-5'>核心板</b>SoftAP配网方案:快速<b class='flag-5'>构建</b>无线接入点

    Air8000核心板Wi-Fi应用之SoftAP配网方案详解!

    本文深入探讨Air8000核心板在Wi-Fi应用中的SoftAP配网方案,通过该方案可快速搭建无线接入点,实现设备与网络的便捷连接,为物联网场景下的快速配置提供高效解决方案。 下面以Air8000
    的头像 发表于 06-18 11:59 648次阅读
    <b class='flag-5'>Air8000</b><b class='flag-5'>核心板</b>Wi-Fi应用之SoftAP配网方案详解!

    多功能+高扩展能力加持,Air8000开发最新资料

    ”,尤其适合需要通信、控制、数据采集的场景,如:远程监控、智能终端等。 一、开发主要配置 Air8000开发基于Air8000多功能工业
    的头像 发表于 06-09 14:18 503次阅读
    多功能+高扩展能力加持,<b class='flag-5'>Air8000</b>开发<b class='flag-5'>板</b>最新资料

    Air8000 Wi-Fi功能实操指南:固件升级与网络配置步骤!

    若您计划使用Air8000的无线网络功能,请按以下步骤操作,完成全部步骤后方可正常使用。快快学起来吧~ 一、Air8000升级Wi-Fi实操要点   本文以Air8000核心板为例,采
    的头像 发表于 05-28 15:48 581次阅读
    <b class='flag-5'>Air8000</b> Wi-Fi功能实操指南:固件升级与网络配置步骤!