main.lua 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. --[[
  2. w5500集成演示
  3. ]]
  4. -- LuaTools需要PROJECT和VERSION这两个信息
  5. PROJECT = "w5500demo"
  6. VERSION = "1.0.0"
  7. log.info("main", PROJECT, VERSION)
  8. -- 一定要添加sys.lua !!!!
  9. sys = require("sys")
  10. sysplus = require("sysplus")
  11. if wdt then
  12. --添加硬狗防止程序卡死,在支持的设备上启用这个功能
  13. wdt.init(9000)--初始化watchdog设置为9s
  14. sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
  15. end
  16. -- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
  17. if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
  18. pm.power(pm.PWK_MODE, false)
  19. end
  20. -- 联网函数
  21. sys.taskInit(function()
  22. sys.wait(100)
  23. if w5500 == nil then
  24. while 1 do
  25. log.info("w5500", "当前固件未包含w5500库")
  26. sys.wait(1000)
  27. end
  28. end
  29. -----------------------------
  30. -- w5500 以太网
  31. ----------------------------
  32. -- 接线提示:
  33. -- 首先要找到SPI端口, SCK时钟, MISO, MOSI, 接好
  34. -- 供电要足, 尤其是w5500模块是3.3v供电的, 最好能外接供电
  35. -- 下列默认选取的GPIO不是强制的, 可以替换成其他GPIO的
  36. local rtos_bsp = rtos.bsp()
  37. log.info("setup w5500 for", rtos_bsp)
  38. if rtos_bsp:startsWith("ESP32") then
  39. -- ESP32C3, GPIO5接SCS, GPIO6接IRQ/INT, GPIO8接RST
  40. w5500.init(2, 20000000, 5, 6, 8)
  41. elseif rtos_bsp:startsWith("EC618") then
  42. -- EC618系列, 如Air780E/Air600E/Air700E
  43. -- GPIO8接SCS, GPIO1接IRQ/INT, GPIO22接RST
  44. w5500.init(0, 25600000, 8, 1, 22)
  45. elseif rtos_bsp:startsWith("EC718") then
  46. -- EC718P系列, 如Air780EP/Air780EPV
  47. -- GPIO8接SCS, GPIO29接IRQ/INT, GPIO30接RST
  48. w5500.init(0, 25600000, 8, 29, 30)
  49. elseif rtos_bsp == "AIR101" or rtos_bsp == "AIR103" or rtos_bsp == "AIR601" then
  50. -- PA1接SCS, PB01接IRQ/INT, PA7接RST
  51. w5500.init(0, 20000000, pin.PA01, pin.PB01, pin.PA07)
  52. elseif rtos_bsp == "AIR105" then
  53. -- PC14接SCS, PC01接IRQ/INT, PC00接RST
  54. w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  55. else
  56. -- 其他不认识的bsp, 循环提示一下吧
  57. while 1 do
  58. sys.wait(1000)
  59. log.info("bsp", "本bsp可能未适配w5500, 请查证")
  60. end
  61. end
  62. w5500.config() --默认是DHCP模式
  63. -- w5500.config("192.168.1.29", "255.255.255.0", "192.168.1.1") --静态IP模式
  64. -- w5500.config("192.168.1.122", "255.255.255.0", "192.168.1.1", string.fromHex("102a3b4c5d6e"))
  65. w5500.bind(socket.ETH0)
  66. -- 提示: 要接上网线, 否则可能没有任何日志打印
  67. -- 默认都等到联网成功
  68. sys.waitUntil("IP_READY")
  69. sys.publish("net_ready")
  70. end)
  71. -- 演示task
  72. local function sockettest()
  73. -- 等待联网
  74. sys.waitUntil("net_ready")
  75. socket.sntp(nil, socket.ETH0)
  76. sys.wait(500)
  77. -- 注意这里的adapter参数, 所在bsp可能有多种适配器, 例如Air780E本身也有4G网络适配器
  78. -- 所以这里要指定使用哪个网络适配器去访问
  79. -- 同理, socket/mqtt/websocket/ftp库均有类似的配置项
  80. local opts = {}
  81. opts["adapter"] = socket.ETH0
  82. while 1 do
  83. log.info("发起http请求")
  84. local code, headers, body = http.request("GET", "http://httpbin.air32.cn/get", nil, nil, opts).wait()
  85. log.info("http", code, body)
  86. sys.wait(5000)
  87. end
  88. end
  89. sys.taskInit(sockettest)
  90. -- 用户代码已结束---------------------------------------------
  91. -- 结尾总是这一句
  92. sys.run()
  93. -- sys.run()之后后面不要加任何语句!!!!!