main.lua 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "bledemo"
  3. VERSION = "1.0.0"
  4. --[[
  5. BLE 扫描
  6. 状态:
  7. 1. 扫描, 可用
  8. 2. 接收扫描结果, 可用
  9. 支持的模块:
  10. 1. Air101/Air103, 开发板的BLE天线未引出, 需要靠近使用, 且功耗高
  11. 2. ESP32系列, 包括ESP32C3/ESP32S3
  12. ]]
  13. log.info("main", PROJECT, VERSION)
  14. -- 一定要添加sys.lua !!!!
  15. sys = require("sys")
  16. --添加硬狗防止程序卡死
  17. if wdt then
  18. wdt.init(9000)--初始化watchdog设置为9s
  19. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  20. end
  21. -- 接收扫描结果
  22. sys.subscribe("BLE_SCAN_RESULT", function(addr, name, uuids, mfg_data)
  23. -- addr 蓝牙设备的地址, 7字节
  24. -- 首字节是地址类型, 0 代表 随机地址, 1 代表真实地址
  25. -- 后6字节是蓝牙地址
  26. -- name 设备名称, 不一定有
  27. -- uuids 服务id
  28. -- mfg_data 工厂默认信息, 主要是iBeacon或者自由广播的数据, 2023-03-19添加
  29. log.info("blescan", (addr:toHex()), name, json.encode(uuids), mfg_data and mfg_data:toHex() or "")
  30. end)
  31. sys.taskInit(function()
  32. sys.wait(2000)
  33. -- BLE模式, 默认是SERVER/Peripheral,即外设模式, 等待被连接的设
  34. nimble.mode(nimble.CLIENT) -- 默认就是它, 不用调用
  35. -- 可以自定义名称
  36. -- nimble.init("LuatOS-Wendal") -- 蓝牙名称可修改,也有默认值LOS-$mac地址
  37. nimble.init() -- 蓝牙名称可修改,也有默认值LOS-$mac地址
  38. sys.wait(500)
  39. -- 打印MAC地址
  40. local mac = nimble.mac()
  41. log.info("ble", "mac", mac and mac:toHex() or "Unknwn")
  42. sys.wait(1000)
  43. -- 发送数据
  44. while 1 do
  45. log.info("ble", "start SCAN ...")
  46. nimble.scan()
  47. -- TODO 扫描到指定设备后, 应跳出循环
  48. sys.wait(30000)
  49. end
  50. end)
  51. -- 用户代码已结束---------------------------------------------
  52. -- 结尾总是这一句
  53. sys.run()
  54. -- sys.run()之后后面不要加任何语句!!!!!