main.lua 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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.setMac(0, string.fromHex("6055F9779010"))
  26. wlan.setMode(wlan.STATION) -- 默认也是这个模式,不调用也可以
  27. device_id = wlan.getMac()
  28. wlan.connect(ssid, password, 1)
  29. elseif mobile then
  30. -- Air780E/Air600E系列
  31. --mobile.simid(2) -- 自动切换SIM卡
  32. -- LED = gpio.setup(27, 0, gpio.PULLUP)
  33. device_id = mobile.imei()
  34. elseif w5500 then
  35. -- w5500 以太网, 当前仅Air105支持
  36. w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  37. w5500.config() --默认是DHCP模式
  38. w5500.bind(socket.ETH0)
  39. -- LED = gpio.setup(62, 0, gpio.PULLUP)
  40. elseif socket then
  41. -- 适配的socket库也OK
  42. -- 没有其他操作, 单纯给个注释说明
  43. else
  44. -- 其他不认识的bsp, 循环提示一下吧
  45. while 1 do
  46. sys.wait(1000)
  47. log.info("bsp", "本bsp可能未适配网络层, 请查证")
  48. end
  49. end
  50. -- 默认都等到联网成功
  51. sys.waitUntil("IP_READY")
  52. sys.publish("net_ready", device_id)
  53. end)
  54. sys.taskInit(function()
  55. sys.waitUntil("net_ready")
  56. local mytopic = "my_udpsrv"
  57. -- 注意, udpsrv.create有3个参数, 最后一个参数是网络适配器编号
  58. local srv = udpsrv.create(12345, mytopic)
  59. -- 在wifi模组中,通常有STA和AP两个适配器, 若需要在AP监听,则需要指定编号
  60. -- local srv = udpsrv.create(12345, mytopic, socket.LWIP_AP)
  61. if srv then
  62. -- 单播
  63. srv:send("I am UP", "192.168.1.5", 777)
  64. -- 广播
  65. srv:send("I am UP", "255.255.255.255", 777)
  66. while 1 do
  67. local ret, data, remote_ip, remote_port = sys.waitUntil(mytopic, 15000)
  68. if ret then
  69. -- remote_ip, remote_port 是2023.10.12新增的返回值
  70. log.info("udpsrv", "收到数据", data:toHex(), remote_ip, remote_port)
  71. -- 按业务处理收到的数据
  72. else
  73. log.info("udpsrv", "没数据,那广播一条")
  74. srv:send("I am UP", "255.255.255.255", 777)
  75. end
  76. end
  77. else
  78. log.info("udpsrv", "启动失败")
  79. end
  80. -- 如果关闭,调用
  81. -- srv:close()
  82. end)
  83. -- 用户代码已结束---------------------------------------------
  84. -- 结尾总是这一句
  85. sys.run()
  86. -- sys.run()之后后面不要加任何语句!!!!!