Преглед изворни кода

add: 添加新的demo/nimble/nimble_led

Wendal Chen пре 4 година
родитељ
комит
4c08be08f3
1 измењених фајлова са 104 додато и 0 уклоњено
  1. 104 0
      demo/nimble/nimble_led/main.lua

+ 104 - 0
demo/nimble/nimble_led/main.lua

@@ -0,0 +1,104 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "nimbledemo"
+VERSION = "1.0.0"
+
+log.info("main", PROJECT, VERSION)
+
+-- 一定要添加sys.lua !!!!
+local sys = require "sys"
+
+--添加硬狗防止程序卡死
+if wdt then
+    wdt.init(15000)--初始化watchdog设置为15s
+    sys.timerLoopStart(wdt.feed, 10000)--10s喂一次狗
+else
+    log.warn("wdt", "not wdt found!!!")
+end
+
+
+
+leds = {}
+if rtos.bsp() == "air101" then -- 与w800/805等价
+    leds["a"] = gpio.setup(24, 0, gpio.PULLUP) -- PB_08,输出模式
+    leds["b"] = gpio.setup(25, 0, gpio.PULLUP) -- PB_09,输出模式
+    leds["c"] = gpio.setup(26, 0, gpio.PULLUP) -- PB_10,输出模式
+elseif rtos.bsp() == "air103" then -- 与w806等价
+    leds["a"] = gpio.setup(16, 0, gpio.PULLUP) -- PB0,输出模式
+    leds["b"] = gpio.setup(17, 0, gpio.PULLUP) -- PB1,输出模式
+    leds["c"] = gpio.setup(18, 0, gpio.PULLUP) -- PB2,输出模式
+end
+
+-- 注册一个命令列表
+cmds = {
+    led = function(id, val)
+        local led = leds[id]
+        if led then
+            led(val == "on" and 1 or 0)
+        end
+    end,
+    reboot = function()
+        sys.taskInit(function()
+            log.info("ble", "cmd reboot, after 5s")
+            sys.wait(5000)
+            rtos.reboot()
+        end)
+    end,
+}
+
+-- 监听BLE主适配的状态变化
+if nimble then
+
+
+    sys.subscribe("BLE_STATE_INC", function(state)
+        log.info("ble", "ble state changed", state)
+        if state == 1 then
+            nimble.server_init()
+        else
+            nimble.server_deinit()
+        end
+    end)
+    
+    -- 监听GATT服务器的WRITE_CHR
+    sys.subscribe("BLE_GATT_WRITE_CHR", function(info, data)
+        -- info 是个table, 但当前没有数据
+        log.info("ble", "data got!!", data:toHex())
+        if data:len() == 0 then
+            return
+        end
+        local cmd = data:split(",")
+        if cmd[1] and cmds[cmd[1]] then
+            cmds[cmd[1]](table.unpack(cmd, 2))
+        else
+            log.info("ble", "unkown cmd", json.encode(cmd))
+        end
+    end)
+
+    
+    -- TODO 支持传数据(read)和推送数据(notify)
+
+    -- 配合微信小程序 "BLE蓝牙开发助手"
+    -- 1. 若开发板无天线, 将手机尽量靠近芯片也能搜到
+    -- 2. 该小程序是开源的, 每次write会自动分包为16字节
+
+    sys.taskInit(function()
+        sys.wait(2000)
+        nimble.debug(6)
+        nimble.init()
+    end)
+else
+    sys.taskInit(function()
+        while true do
+            sys.wait(1000)
+            log.warn("ble", "this demo need nimble lib")
+        end
+    end)
+end
+
+
+
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!