main.lua 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "ble"
  3. VERSION = "1.0.0"
  4. -- 引入必要的库文件(lua编写), 内部库不需要require
  5. sys = require("sys")
  6. log.info("main", "project name is ", PROJECT, "version is ", VERSION)
  7. -- 通过boot按键方便刷Air8000S
  8. function PWR8000S(val)
  9. gpio.set(23, val)
  10. end
  11. gpio.debounce(0, 1000)
  12. gpio.setup(0, function()
  13. sys.taskInit(function()
  14. log.info("复位Air8000S")
  15. PWR8000S(0)
  16. sys.wait(20)
  17. PWR8000S(1)
  18. end)
  19. end, gpio.PULLDOWN)
  20. -- characteristic handle
  21. local characteristic1,characteristic2,characteristic3,characteristic4
  22. local att_db = {--Service
  23. string.fromHex("FA00"), --Service UUID
  24. -- Characteristic
  25. { -- Characteristic 1
  26. string.fromHex("EA01"), -- Characteristic UUID Value
  27. ble.NOTIFY|ble.READ|ble.WRITE, -- Properties
  28. },
  29. { -- Characteristic 2
  30. string.fromHex("EA02"),
  31. ble.WRITE,
  32. },
  33. { -- Characteristic 3
  34. string.fromHex("EA03"),
  35. ble.READ,
  36. },
  37. { -- Characteristic 4
  38. string.fromHex("EA04"),
  39. ble.READ|ble.WRITE,
  40. },
  41. }
  42. local function ble_callback(ble_device, ble_event, ble_param)
  43. if ble_event == ble.EVENT_CONN then
  44. log.info("ble", "connect 成功")
  45. elseif ble_event == ble.EVENT_DISCONN then
  46. log.info("ble", "disconnect")
  47. -- 1秒后重新开始广播
  48. sys.timerStart(function() ble_device:adv_start() end, 1000)
  49. elseif ble_event == ble.EVENT_WRITE then
  50. log.info("ble", "write", ble_param.conn_idx,ble_param.service_id,ble_param.handle,ble_param.data:toHex())
  51. elseif ble_event == ble.EVENT_READ then
  52. log.info("ble", "read", ble_param.conn_idx,ble_param.service_id,ble_param.handle)
  53. ble_device:read_response(ble_param,string.fromHex("1234"))
  54. end
  55. end
  56. sys.taskInit(function()
  57. sys.wait(500)
  58. log.info("开始初始化蓝牙核心")
  59. bluetooth_device = bluetooth.init()
  60. sys.wait(100)
  61. log.info("初始化BLE功能")
  62. ble_device = bluetooth_device:ble(ble_callback)
  63. if ble_device == nil then
  64. log.error("当前固件不支持完整的BLE")
  65. return
  66. end
  67. sys.wait(100)
  68. log.info('开始创建GATT')
  69. characteristic1,characteristic2,characteristic3,characteristic4 = ble_device:gatt_create(att_db)
  70. log.info("创建的GATT为",characteristic1,characteristic2,characteristic3,characteristic4)
  71. if characteristic1 == nil then
  72. log.error("创建GATT失败")
  73. end
  74. sys.wait(100)
  75. log.info("开始设置广播内容")
  76. ble_device:adv_create({
  77. addr_mode = ble.PUBLIC,
  78. channel_map = ble.CHNLS_ALL,
  79. intv_min = 120,
  80. intv_max = 120,
  81. adv_data = {
  82. {ble.FLAGS,string.char(0x06)},
  83. {ble.COMPLETE_LOCAL_NAME, "LuatOS"},
  84. {ble.SERVICE_DATA, string.fromHex("FE01")},
  85. {ble.MANUFACTURER_SPECIFIC_DATA, string.fromHex("05F0")},
  86. }
  87. })
  88. sys.wait(100)
  89. log.info("开始广播")
  90. ble_device:adv_start()
  91. -- ble_device:adv_stop()
  92. end)
  93. -- 用户代码已结束---------------------------------------------
  94. -- 结尾总是这一句
  95. sys.run()
  96. -- sys.run()之后后面不要加任何语句!!!!!