| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- --[[
- @module ble_ibeacon
- @summary Air8000演示scan功能模块
- @version 1.0
- @date 2025.07.01
- @author wangshihao
- @usage
- 本文件为Air8000核心板演示scan功能的代码示例,核心业务逻辑为:
- 观察者模式(scan)的基本流程(概要描述)
- 1. 初始化蓝牙框架
- 2. 创建BLE对象
- local ble_device = bluetooth_device:ble(ble_event_cb)
- 3.设置扫描模式
- ble_device:scan_create() -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
- 4. 开始扫描
- ble_device:scan_start()
- 5. 在回调函数中处理扫描事件, 如接收设备信息等
- 6. 按需停止扫描
- ble_device:scan_stop()
- ]]
- local bt_scan = false -- 是否扫描蓝牙
- blDataTable = {}
- 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
- if #blDataTable < 40 then
- --log.info("信息采集中")
- --blDataTable[#blDataTable + 1] = ble_param.adv_addr:toHex() .. os.time() -- 插入字符串
- -- 获取当前年月日时分秒,格式如 "2025-10-14 19:55:30"
- -- 获取当前时间
- local time_str = os.date("%Y-%m-%d %H:%M:%S")
- -- 拼接 BLE 地址和时间
- local entry = ble_param.adv_addr:toHex() .. " " .. time_str .. " lan:" .. lat .. " lng:" .. lng
- -- 插入到 blDataTable
- blDataTable[#blDataTable + 1] = entry
- else
- --log.info("信息输出中")
- --local json_data = json.encode(blDataTable)
- --log.info("json", json_data)
- ble_device:scan_stop()
- end
- --log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
- -- 解析广播数据, 日志很多, 按需使用
- -- local adv_data = ble_device:adv_decode(ble_param.data)
- -- if adv_data then
- -- for k, v in pairs(adv_data) do
- -- log.info("ble", "adv data", v.len, v.tp, v.data:toHex())
- -- end
- -- end
- -- if ble_param.data:byte(1) == 0x1A then
- -- log.info("ble", "ibeacon数据", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
- -- end
- elseif ble_event == ble.EVENT_SCAN_STOP then
- log.info("ble", "scan stop")
- end
- end
- function ble_scan()
- sys.waitUntil("IP_IS_READY")
- 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(0,100,100) -- 使用默认参数, 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
- --function insert_task()
- -- local blDataTable = {}
- -- local i = 0
- -- table.insert(blDataTable, "hello")
- --
- -- table.insert(blDataTable, "world")
- --
- -- while true do
- -- sys.wait(1000)
- -- table.insert(blDataTable, i)
- -- local json = json.encode(blDataTable)
- -- log.info("json", json)
- -- i = i + 1
- -- end
- --end
- sys.taskInit(ble_scan)
|