main.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. local att_db = {--Service
  8. string.fromHex("FA00"), --Service UUID
  9. -- Characteristic
  10. { -- Characteristic 1
  11. 0xEA01, -- Characteristic UUID Value
  12. ble.NOTIFY|ble.READ|ble.WRITE, -- Properties
  13. string.fromHex("1234") -- Value
  14. },
  15. { -- Characteristic 2
  16. 0xEA02,
  17. ble.WRITE,
  18. },
  19. { -- Characteristic 3
  20. 0xEA03,
  21. ble.READ,
  22. string.fromHex("5678")
  23. },
  24. { -- Characteristic 4
  25. 0xEA04,
  26. ble.NOTIFY|ble.READ|ble.WRITE,
  27. },
  28. }
  29. local scan_count = 0
  30. local function ble_callback(ble_device, ble_event, ble_param)
  31. if ble_event == ble.EVENT_CONN then
  32. log.info("ble", "connect 成功")
  33. elseif ble_event == ble.EVENT_DISCONN then
  34. log.info("ble", "disconnect")
  35. -- 1秒后重新开始广播
  36. sys.timerStart(function() ble_device:adv_start() end, 1000)
  37. elseif ble_event == ble.EVENT_WRITE then
  38. log.info("ble", "write", ble_param.handle,ble_param.uuid_service:toHex(),ble_param.uuid_characteristic:toHex())
  39. log.info("ble", "data", ble_param.data:toHex())
  40. -- ble_device:write_notify(ble_param,string.fromHex("123456"))
  41. elseif ble_event == ble.EVENT_READ_VALUE then
  42. log.info("ble", "read", ble_param.handle,ble_param.uuid_service:toHex(),ble_param.uuid_characteristic:toHex(),ble_param.data:toHex(),ble_param.data)
  43. elseif ble_event == ble.EVENT_SCAN_REPORT then
  44. print("ble scan report",ble_param.addr_type,ble_param.rssi,ble_param.adv_addr:toHex(),ble_param.data:toHex(),ble_param.data)
  45. scan_count = scan_count + 1
  46. if scan_count > 20 then
  47. ble_device:scan_stop()
  48. end
  49. if ble_param.addr_type == 0 and ble_param.data:find("LuatOS") then
  50. ble_device:scan_stop()
  51. ble_device:connect(ble_param.adv_addr,ble_param.addr_type)
  52. end
  53. elseif ble_event == 14 then
  54. local characteristic = {uuid_service = string.fromHex("FA00"), uuid_characteristic = string.fromHex("EA02")}
  55. ble_device:write_value(characteristic,string.fromHex("1234"))
  56. local characteristic = {uuid_service = string.fromHex("FA00"), uuid_characteristic = string.fromHex("EA03")}
  57. ble_device:read_value(characteristic)
  58. end
  59. end
  60. sys.taskInit(function()
  61. log.info("开始初始化蓝牙核心")
  62. bluetooth_device = bluetooth.init()
  63. log.info("初始化BLE功能")
  64. ble_device = bluetooth_device:ble(ble_callback)
  65. -- slaver
  66. log.info('开始创建GATT')
  67. ble_device:gatt_create(att_db)
  68. log.info("开始设置广播内容")
  69. ble_device:adv_create({
  70. addr_mode = ble.PUBLIC,
  71. channel_map = ble.CHNLS_ALL,
  72. intv_min = 120,
  73. intv_max = 120,
  74. adv_data = {
  75. {ble.FLAGS,string.char(0x06)},
  76. {ble.COMPLETE_LOCAL_NAME, "LuatOS"},
  77. {ble.SERVICE_DATA, string.fromHex("FE01")},
  78. {ble.MANUFACTURER_SPECIFIC_DATA, string.fromHex("05F0")},
  79. },
  80. })
  81. log.info("开始广播")
  82. ble_device:adv_start()
  83. -- ble_device:adv_stop()
  84. -- master
  85. -- ble_device:scan_create({})
  86. -- ble_device:scan_start()
  87. -- -- ble_device:scan_stop()
  88. end)
  89. -- 用户代码已结束---------------------------------------------
  90. -- 结尾总是这一句
  91. sys.run()
  92. -- sys.run()之后后面不要加任何语句!!!!!