main.lua 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "WIFI_AP"
  3. VERSION = "1.0.0"
  4. --[[
  5. 本demo演示AP的配网实例
  6. 1. 启动后, 会创建一个 luatos_ + mac地址的热点
  7. 2. 热点密码是 12345678
  8. 3. 热点网关是 192.168.4.1, 同时也是配网网页的ip
  9. 4. http://192.168.4.1
  10. ]]
  11. -- sys库是标配
  12. _G.sys = require("sys")
  13. require "sysplus"
  14. dnsproxy = require("dnsproxy")
  15. dhcpsrv = require("dhcpsrv")
  16. httpplus = require("httpplus")
  17. local LEDA= gpio.setup(20, 0, gpio.PULLUP)
  18. function create_ap()
  19. log.info("执行AP创建操作", "luatos8888")
  20. wlan.createAP("luatos8888", "12345678")
  21. sys.wait(1000)
  22. netdrv.ipv4(socket.LWIP_AP, "192.168.4.1", "255.255.255.0", "0.0.0.0")
  23. dnsproxy.setup(socket.LWIP_AP, socket.LWIP_GP)
  24. dhcpsrv.create({adapter=socket.LWIP_AP})
  25. while 1 do
  26. if netdrv.ready(socket.LWIP_GP) then
  27. netdrv.napt(socket.LWIP_GP)
  28. break
  29. end
  30. sys.wait(1000)
  31. end
  32. end
  33. function wifi_networking()
  34. sys.wait(3000)
  35. -- AP的ssid和password
  36. wlan.scan()
  37. -- sys.wait(500)
  38. httpsrv.start(80, function(fd, method, uri, headers, body)
  39. log.info("httpsrv", method, uri, json.encode(headers), body)
  40. -- /led是控制灯的API
  41. if uri == "/led/1" then
  42. LEDA(1)
  43. return 200, {}, "ok"
  44. elseif uri == "/led/0" then
  45. LEDA(0)
  46. return 200, {}, "ok"
  47. -- 扫描AP
  48. elseif uri == "/scan/go" then
  49. wlan.scan()
  50. return 200, {}, "ok"
  51. -- 前端获取AP列表
  52. elseif uri == "/scan/list" then
  53. return 200, {["Content-Type"]="applaction/json"}, (json.encode({data=_G.scan_result, ok=true}))
  54. -- 前端填好了ssid和密码, 那就连接吧
  55. elseif uri == "/connect" then
  56. if method == "POST" and body and #body > 2 then
  57. local jdata = json.decode(body)
  58. if jdata and jdata.ssid then
  59. -- 开启一个定时器联网, 否则这个情况可能会联网完成后才执行完
  60. sys.timerStart(wlan.connect, 500, jdata.ssid, jdata.passwd)
  61. return 200, {}, "ok"
  62. end
  63. end
  64. return 400, {}, "ok"
  65. -- 根据ip地址来判断是否已经连接成功
  66. elseif uri == "/connok" then
  67. return 200, {["Content-Type"]="applaction/json"}, json.encode({ip=socket.localIP()})
  68. end
  69. -- 其他情况就是找不到了
  70. return 404, {}, "Not Found" .. uri
  71. end, socket.LWIP_AP)
  72. log.info("web", "pls open url http://192.168.4.1/")
  73. end
  74. -- wifi扫描成功后, 会有WLAN_SCAN_DONE消息, 读取即可
  75. sys.subscribe("WLAN_SCAN_DONE", function ()
  76. local result = wlan.scanResult()
  77. _G.scan_result = {}
  78. for k,v in pairs(result) do
  79. log.info("scan", (v["ssid"] and #v["ssid"] > 0) and v["ssid"] or "[隐藏SSID]", v["rssi"], (v["bssid"]:toHex()))
  80. if v["ssid"] and #v["ssid"] > 0 then
  81. table.insert(_G.scan_result, v["ssid"])
  82. end
  83. end
  84. log.info("scan", "aplist", json.encode(_G.scan_result))
  85. end)
  86. sys.subscribe("IP_READY", function()
  87. -- 联网成功后, 模拟上报到服务器
  88. log.info("wlan", "已联网", "通知服务器")
  89. end)
  90. function test_scan()
  91. while 1 do
  92. log.info("执行wifi扫描")
  93. wlan.scan()
  94. sys.wait(30 * 1000)
  95. end
  96. end
  97. sys.subscribe("WLAN_SCAN_DONE", function ()
  98. local results = wlan.scanResult()
  99. log.info("scan", "results", #results)
  100. for k,v in pairs(results) do
  101. log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
  102. end
  103. end)
  104. -- 每隔6秒打印一次airlink统计数据, 调试用
  105. -- sys.taskInit(function()
  106. -- while 1 do
  107. -- sys.wait(6000)
  108. -- airlink.statistics()
  109. -- end
  110. -- end)
  111. sys.taskInit(function()
  112. -- sys.wait(100)
  113. wlan.init()
  114. sys.wait(100)
  115. -- 启动AP测试
  116. create_ap()
  117. wifi_networking()
  118. -- 连接STA测试
  119. -- test_sta()
  120. -- wifi扫描测试
  121. -- test_scan()
  122. end)
  123. -- 用户代码已结束---------------------------------------------
  124. -- 结尾总是这一句
  125. sys.run()
  126. -- sys.run()之后后面不要加任何语句!!!!!