Просмотр исходного кода

add: 添加Air8000-ble-扫描demo以及readme文件

wangshihao 8 месяцев назад
Родитель
Сommit
eeccbcbc3d

+ 36 - 0
module/Air8000/demo/ble/peripheral/readme.md

@@ -0,0 +1,36 @@
+
+## 演示功能概述
+
+将使用Air8000核心板,演示Air8000蓝牙从机模式下发送通知到主机,以及如何通过手机向Air8000进行读写操作。
+
+## 演示硬件环境
+
+1、Air8000核心板一块
+
+2、TYPE-C USB数据线一根
+
+3、Air8000核心板和数据线的硬件接线方式为
+
+- Air8000核心板通过TYPE-C USB口供电;(核心板USB旁边的开关拨到 "充电" 一端)
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+[如何使用 LuaTools 烧录软件 - luatos@air8000 - 合宙模组资料中心](https://docs.openluat.com/air8000/luatos/common/download/)
+
+2、[Air8000 固件](https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/core)
+
+3、[Air8000 BLE从机代码](https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/ble/peripheral)
+
+## 演示核心步骤
+
+1、核心板通过usb数据线连接到电脑上
+
+2、通过Luatools将demo与固件烧录到核心板中
+
+3、烧录成功后,自动开机运行
+
+4、接下来通过蓝牙APP 连接作为蓝牙从机设备的Air8000进行操作,详见文档:https://docs.openluat.com/air8000/luatos/app/BLE/peripheral/

+ 0 - 0
module/Air8000/demo/ble/scan


+ 94 - 0
module/Air8000/demo/ble/scan/main.lua

@@ -0,0 +1,94 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "ble_scan"
+VERSION = "1.0.0"
+
+--[[
+Air8000的BLE支持4种模式,分别是主机模式(central),从机模式(peripheral),广播者模式(ibeacon),以及观察者模式(scan)。
+1.主机模式(central):
+主机模式是能够搜索别人并主动建立连接的一方,从扫描状态转化而来的。其可以和一个或多个从设备进行连接通信,它会定期的扫描周围的广播状态设备发送的广播信息,可以对周围设备进行搜索并选择所需要连接的从设备进行配对连接,建立通信链路成功后,主从双方就可以发送接收数据。
+2.从机模式(peripheral):
+从机模式是从广播者模式转化而来的,未被连接的从机首先进入广播状态,等待被主机搜索,当主机扫描到从设备建立连接后,就可以和主机设备进行数据的收发,其不能主动的建立连接,只能等别人来连接自己。和广播模式有区别的地方在于,从机模式的设备是可以被连接的,定期的和主机进行连接和数据传输,在数据传输过程中作从机。
+3.广播者模式(ibeacon)
+处于广播模式的设备,会周期性的广播beacon信息, 但不会被扫描到, 也不会连接其他设备。
+4.观察者模式(scan)
+观察者模式,该模式下模块为非连接,相对广播者模式的一对多发送广播,观察者可以一对多接收数据。在该模式中,设备可以仅监听和读取空中的广播数据。和主机唯一的区别是不能发起连接,只能持续扫描从机。
+蓝牙中的重要概念
+1. GATT(通用属性配置文件)
+  - 定义 BLE 设备如何组织和传输数据,以 “服务(Service)” 和 “特征(Characteristic)” 为单位。
+  - 示例:心率监测设备的 GATT 服务包含 “心率特征”,手机通过读取该特征获取心率数据。
+2. 服务和特征
+- 服务是特征的容器,通过逻辑分组简化复杂功能的管理;
+- 特征是数据交互的最小单元,通过属性定义实现灵活的读写与推送机制;
+- 两者结合构成 GATT 协议的核心框架,支撑蓝牙设备间的标准化数据交互(如智能穿戴、医疗设备、物联网传感器)。
+3. 特征的关键属性(Properties)
+特征通过 “属性” 定义数据的操作方式,常见属性包括:
+  1. 可读(Read):允许客户端读取特征值(如读取电池电量)。
+  2. 可写(Write):允许客户端写入特征值(如设置设备参数)。
+  3. 通知(Notification):服务端主动发送特征值更新(如心率变化时推送给手机)。
+  4. 指示(Indication):比通知更可靠的推送(需客户端确认接收)。
+4. UUID
+  UUID 是蓝牙 GATT 协议的 “数字身份证”,通过标准化的唯一标识机制,实现了跨厂商设备的功能互认(标准 UUID)与厂商个性化功能的扩展(自定义 UUID)
+  Air8000 的所有操作,都通过UUID来索引和管理
+]]
+
+log.info("main", "project name is ", PROJECT, "version is ", VERSION)
+
+-- 通过boot按键方便刷Air8000S
+function PWR8000S(val)
+    gpio.set(23, val)
+end
+
+gpio.debounce(0, 1000)
+gpio.setup(0, function()
+    sys.taskInit(function()
+        log.info("复位Air8000S")
+        PWR8000S(0)
+        sys.wait(20)
+        PWR8000S(1)
+    end)
+end, gpio.PULLDOWN)
+
+local function ble_callback(ble_device, ble_event, ble_param)
+    if ble_event == ble.EVENT_SCAN_INIT then
+        log.info("ble", "scan init")
+    elseif ble_event == ble.EVENT_SCAN_REPORT then
+        log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
+    elseif ble_event == ble.EVENT_SCAN_STOP then
+        log.info("ble", "scan stop")
+    end
+end
+
+local bt_scan = false   -- 是否扫描蓝牙
+
+sys.taskInit(function()
+    sys.wait(500)
+    log.info("开始初始化蓝牙核心")
+    bluetooth_device = bluetooth.init()
+    sys.wait(100)
+    log.info("初始化BLE功能")
+    ble_device = bluetooth_device:ble(ble_callback)
+    if ble_device == nil then
+        log.error("当前固件不支持完整的BLE")
+        return
+    end
+    sys.wait(100)
+    -- 扫描模式
+    sys.wait(1000)
+    ble_device:scan_create() -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
+    -- ble_device:scan_create(0, 10, 10) -- 使用自定义参数
+    sys.wait(100)
+    log.info("开始扫描")
+    ble_device:scan_start()
+
+    sys.wait(15000)
+    log.info("停止扫描")
+    ble_device:scan_stop()
+
+end)
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 36 - 0
module/Air8000/demo/ble/scan/readme.md

@@ -0,0 +1,36 @@
+
+## 演示功能概述
+
+将使用Air8000核心板,演示Air8000蓝牙在观察者模式下扫描蓝牙设备的操作。
+
+## 演示硬件环境
+
+1、Air8000核心板一块
+
+2、TYPE-C USB数据线一根
+
+3、Air8000核心板和数据线的硬件接线方式为
+
+- Air8000核心板通过TYPE-C USB口供电;(核心板USB旁边的开关拨到 "充电" 一端)
+
+- TYPE-C USB数据线直接插到核心板的TYPE-C USB座子,另外一端连接电脑USB口;
+
+## 演示软件环境
+
+1、Luatools下载调试工具
+
+[如何使用 LuaTools 烧录软件 - luatos@air8000 - 合宙模组资料中心](https://docs.openluat.com/air8000/luatos/common/download/)
+
+2、[Air8000 固件](https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/core)
+
+3、[Air8000 BLE扫描代码](https://gitee.com/openLuat/LuatOS/blob/master/module/Air8000/demo/ble/scan)
+
+## 演示核心步骤
+
+1、核心板通过usb数据线连接到电脑上
+
+2、通过Luatools将demo与固件烧录到核心板中
+
+3、烧录成功后,自动开机运行
+
+4、通过luatools日志查看扫描到的设备信息