main.lua 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "httpdemo"
  3. VERSION = "1.0.0"
  4. --[[
  5. 本demo需要http库, 大部分能联网的设备都具有这个库
  6. http也是内置库, 无需require
  7. ]]
  8. -- sys库是标配
  9. _G.sys = require("sys")
  10. --[[特别注意, 使用http库需要下列语句]]
  11. _G.sysplus = require("sysplus")
  12. sys.taskInit(function()
  13. -----------------------------
  14. -- 统一联网函数, 可自行删减
  15. ----------------------------
  16. if wlan and wlan.connect then
  17. -- wifi 联网, ESP32系列均支持
  18. local ssid = "uiot"
  19. local password = "12345678"
  20. log.info("wifi", ssid, password)
  21. -- TODO 改成esptouch配网
  22. LED = gpio.setup(12, 0, gpio.PULLUP)
  23. wlan.init()
  24. wlan.setMode(wlan.STATION)
  25. wlan.connect(ssid, password, 1)
  26. local result, data = sys.waitUntil("IP_READY", 30000)
  27. log.info("wlan", "IP_READY", result, data)
  28. device_id = wlan.getMac()
  29. elseif mobile and mobile.imei then
  30. -- Air780E/Air600E系列
  31. --mobile.simid(2)
  32. LED = gpio.setup(27, 0, gpio.PULLUP)
  33. device_id = mobile.imei()
  34. log.info("ipv6", mobile.ipv6(true))
  35. sys.waitUntil("IP_READY", 30000)
  36. elseif w5500 then
  37. -- w5500 以太网, 当前仅Air105支持
  38. w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  39. w5500.config() --默认是DHCP模式
  40. w5500.bind(socket.ETH0)
  41. LED = gpio.setup(62, 0, gpio.PULLUP)
  42. sys.wait(1000)
  43. -- TODO 获取mac地址作为device_id
  44. end
  45. -- 打印一下支持的加密套件, 通常来说, 固件已包含常见的99%的加密套件
  46. if crypto.cipher_suites then
  47. log.info("cipher", "suites", json.encode(crypto.cipher_suites()))
  48. end
  49. -------------------------------------
  50. -------- HTTP 演示代码 --------------
  51. -------------------------------------
  52. while 1 do
  53. -- 最普通的Http GET请求
  54. local code, headers, body = http.request("GET", "https://www.air32.cn/").wait()
  55. log.info("http.get", "air32.cn", code)
  56. sys.wait(100)
  57. -- ipv6测试, 仅EC618系列支持
  58. local code, headers, body = http.request("GET", "https://mirrors6.tuna.tsinghua.edu.cn/", nil, nil, {ipv6=true}).wait()
  59. log.info("http.get", "ipv6", code, json.encode(headers or {}), body and #body or 0)
  60. sys.wait(100)
  61. -- 一个比较特别的外网URL, 获取地震信息的
  62. local url ="https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson"
  63. local code, headers, body = http.request("GET", url).wait()
  64. log.info("http.get", "earthquakes", code, json.encode(headers or {}), body and #body or 0)
  65. sys.wait(100)
  66. -- 超长URL测试
  67. local url ="https://www.baidu.com/?fdasfaisdolfjadklsjfklasdjflka=fdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflkafdasfaisdolfjadklsjfklasdjflka"
  68. local code, headers, body = http.request("GET", url).wait()
  69. log.info("http.get", "longurl", code, json.encode(headers or {}), body and #body or 0)
  70. sys.wait(100)
  71. -- 阿里云自动注册设备的验证, 不一样是200
  72. local url ="https://iot-auth.cn-shanghai.aliyuncs.com/auth/register/device"
  73. local req_headers = {}
  74. req_headers["Content-Type"] = "application/x-www-form-urlencoded"
  75. local req_body = "productKey=he1iZrw123&deviceName=861551056136351&random=2717&sign=DD31BA6E9E087A6DD88E96FD47A7AAA3&signMethod=HmacMD5"
  76. -- req_headers["Content-Length"] = tostring(#req_body)
  77. local code, headers, body = http.request("POST", url, req_headers, req_body).wait()
  78. log.info("http.get", "aliyun", code, json.encode(headers or {}), body and #body or 0)
  79. sys.wait(100)
  80. -- Content-Length:0的情况
  81. local code, headers, body = http.request("GET", "http://air32.cn/test/zero.txt").wait()
  82. log.info("http.get", "emtry content", code, json.encode(headers or {}), body and #body or 0)
  83. sys.wait(100)
  84. sys.wait(600000)
  85. end
  86. end)
  87. -- 用户代码已结束---------------------------------------------
  88. -- 结尾总是这一句
  89. sys.run()
  90. -- sys.run()之后后面不要加任何语句!!!!!