main.lua 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "udpsrvdemo"
  3. VERSION = "1.0.0"
  4. -- sys库是标配
  5. _G.sys = require("sys")
  6. _G.udpsrv = require "udpsrv"
  7. -- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
  8. if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
  9. pm.power(pm.PWK_MODE, false)
  10. end
  11. -- 统一联网函数
  12. sys.taskInit(function()
  13. local device_id = mcu.unique_id():toHex()
  14. -----------------------------
  15. -- 统一联网函数, 可自行删减
  16. ----------------------------
  17. if wlan and wlan.connect then
  18. -- wifi 联网, ESP32系列均支持
  19. local ssid = "luatos1234"
  20. local password = "12341234"
  21. log.info("wifi", ssid, password)
  22. -- TODO 改成自动配网
  23. -- LED = gpio.setup(12, 0, gpio.PULLUP)
  24. wlan.init()
  25. wlan.setMode(wlan.STATION) -- 默认也是这个模式,不调用也可以
  26. device_id = wlan.getMac()
  27. wlan.connect(ssid, password, 1)
  28. elseif mobile then
  29. -- Air780E/Air600E系列
  30. --mobile.simid(2) -- 自动切换SIM卡
  31. -- LED = gpio.setup(27, 0, gpio.PULLUP)
  32. device_id = mobile.imei()
  33. elseif w5500 then
  34. -- w5500 以太网, 当前仅Air105支持
  35. w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  36. w5500.config() --默认是DHCP模式
  37. w5500.bind(socket.ETH0)
  38. -- LED = gpio.setup(62, 0, gpio.PULLUP)
  39. elseif socket then
  40. -- 适配的socket库也OK
  41. -- 没有其他操作, 单纯给个注释说明
  42. else
  43. -- 其他不认识的bsp, 循环提示一下吧
  44. while 1 do
  45. sys.wait(1000)
  46. log.info("bsp", "本bsp可能未适配网络层, 请查证")
  47. end
  48. end
  49. -- 默认都等到联网成功
  50. sys.waitUntil("IP_READY")
  51. sys.publish("net_ready", device_id)
  52. end)
  53. sys.taskInit(function()
  54. sys.waitUntil("net_ready")
  55. local mytopic = "my_udpsrv"
  56. local srv = udpsrv.create(12345, mytopic)
  57. if srv then
  58. -- 单播
  59. srv:send("I am UP", "192.168.1.16", 777)
  60. -- 广播
  61. srv:send("I am UP", "255.255.255.255", 777)
  62. while 1 do
  63. local ret, data = sys.waitUntil(mytopic, 15000)
  64. if ret then
  65. log.info("udpsrv", "收到数据", data:toHex())
  66. -- 按业务处理收到的数据
  67. else
  68. log.info("udpsrv", "没数据,那广播一条")
  69. srv:send("I am UP", "255.255.255.255", 777)
  70. end
  71. end
  72. else
  73. log.info("udpsrv", "启动失败")
  74. end
  75. -- 如果关闭,调用
  76. -- srv:close()
  77. end)
  78. -- 用户代码已结束---------------------------------------------
  79. -- 结尾总是这一句
  80. sys.run()
  81. -- sys.run()之后后面不要加任何语句!!!!!