main.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "air8000_factory"
  3. VERSION = "001.000.012"
  4. log.info("main", PROJECT, VERSION)
  5. -- 引入必要的库文件(lua编写), 内部库不需要require
  6. sys = require("sys")
  7. if wdt then
  8. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  9. wdt.init(9000)--初始化watchdog设置为9s
  10. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  11. end
  12. -- log.setLevel(log.LOG_ERROR)
  13. local uartid = 1 -- 根据实际设备选取不同的uartid
  14. --初始化
  15. uart.setup(
  16. uartid,--串口id
  17. 115200,--波特率
  18. 8,--数据位
  19. 1--停止位
  20. )
  21. -- gpio.setup(140, 1, gpio.PULLUP)
  22. local topic_uart_receive = "air8000_uart1_receive"
  23. -- --循环发数据
  24. -- sys.timerLoopStart(uart.write,1000, uartid, "test")
  25. uart.on(uartid, "sent", function(id)
  26. log.info("uart", "sent", id)
  27. end)
  28. -- 收取数据会触发回调, 这里的"receive" 是固定值
  29. uart.on(uartid, "receive", function(id, len)
  30. log.info("uart", "receive", id,len)
  31. data = uart.read(id, len)
  32. if data and len==#data then
  33. log.info("uart", "receive", data)
  34. sys.publish(topic_uart_receive,data)
  35. elseif #data > 2 then
  36. log.info("uart", "receive", data:toHex())
  37. uart.write(uartid, "ERROR\r\n")
  38. end
  39. end)
  40. local function ble_callback(ble_device, ble_event, ble_param)
  41. if ble_event == ble.EVENT_SCAN_INIT then
  42. log.info("ble", "scan init")
  43. elseif ble_event == ble.EVENT_SCAN_REPORT then
  44. log.info("ble", "scan report", ble_param.rssi, ble_param.adv_addr:toHex(), ble_param.data:toHex())
  45. elseif ble_event == ble.EVENT_SCAN_STOP then
  46. log.info("ble", "scan stop")
  47. end
  48. end
  49. sys.taskInit(function()
  50. while 1 do
  51. local ret, data = sys.waitUntil(topic_uart_receive)
  52. if ret then
  53. if data:sub(1,10) == "AT+WIFIOFF" then--关闭wifi------------
  54. local result = airlink.power(false)
  55. log.info("关闭wifi")
  56. if not result then
  57. uart.write(uartid, "OK\r\n")
  58. else
  59. uart.write(uartid, "ERROR\r\n")
  60. end
  61. elseif data:sub(1,9) == "AT+WIFION" then--开启wifi
  62. airlink.power(true)
  63. while airlink.ready() ~= true do
  64. sys.wait(100)
  65. end
  66. local result = wlan.init()
  67. log.info("开启wifi",result)
  68. if result then
  69. uart.write(uartid, "OK\r\n")
  70. else
  71. uart.write(uartid, "ERROR\r\n")--------------
  72. end
  73. elseif data:sub(1,11) == "AT+WIFISCAN" then--wifi扫描---------------
  74. while airlink.ready() ~= true do
  75. sys.wait(100)
  76. end
  77. wlan.init()
  78. wlan.scan()
  79. log.info("扫描wifi")
  80. sys.waitUntil("WLAN_SCAN_DONE", 5000)
  81. local results = wlan.scanResult()
  82. if results then
  83. uart.write(uartid, "OK\r\n")
  84. else
  85. uart.write(uartid, "ERROR\r\n")
  86. end
  87. elseif data:sub(1,8) == "AT+WIFI=" then -- 连接指定ssid/passwd--------
  88. wlan.init()
  89. local SSID = data:sub(9,data:find(",")-1)
  90. local PWD = data:sub(data:find(",")+1,data:find('\r')-1)
  91. log.info("SSID", SSID,"PWD", PWD)
  92. local result = wlan.connect(SSID, PWD)
  93. log.info("连接指定wifi",result)
  94. local result, ip, adapter = sys.waitUntil("IP_READY",5000)
  95. log.info("ready?", result, ip, adapter)
  96. if not result then
  97. uart.write(uartid, "ERROR\r\n")
  98. else
  99. -- netdrv.ipv4(socket.LWIP_STA)
  100. log.info("IP地址", netdrv.ipv4(socket.LWIP_STA))
  101. uart.write(uartid, "OK\r\n")
  102. end
  103. elseif data:sub(1,10) == "AT+BLEINIT" then--初始化蓝牙
  104. bluetooth_device = bluetooth.init()
  105. ble_device = bluetooth_device:ble(ble_callback)
  106. log.info("初始化蓝牙")
  107. if ble_device then
  108. uart.write(uartid, "OK\r\n")
  109. else
  110. uart.write(uartid, "ERROR\r\n")
  111. end
  112. elseif data:sub(1,10) == "AT+BLESCAN" then--蓝牙扫描
  113. -- 扫描模式
  114. sys.wait(1000)
  115. local result = ble_device:scan_create() -- 使用默认参数, addr_mode=0, scan_interval=100, scan_window=100
  116. -- ble_device:scan_create(0, 10, 10) -- 使用自定义参数
  117. sys.wait(100)
  118. log.info("开始扫描")
  119. ble_device:scan_start()
  120. sys.wait(5000)
  121. log.info("停止扫描")
  122. ble_device:scan_stop()
  123. if result then
  124. uart.write(uartid, "OK\r\n")
  125. else
  126. uart.write(uartid, "ERROR\r\n")
  127. end
  128. elseif data:sub(1,11) == "AT+RESETALL" then--整体复位
  129. uart.write(uartid, "OK\r\n")
  130. sys.wait(500)
  131. rtos.reboot()
  132. elseif #data > 2 then
  133. log.info("uart", data:toHex())
  134. uart.write(uartid, "ERROR\r\n")
  135. end
  136. end
  137. end
  138. end)
  139. -- 用户代码已结束---------------------------------------------
  140. -- 结尾总是这一句
  141. sys.run()
  142. -- sys.run()之后后面不要加任何语句!!!!!