main.lua 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "iotclouddemo"
  3. VERSION = "1.0.0"
  4. -- sys库是标配
  5. _G.sys = require("sys")
  6. --[[特别注意, 使用mqtt库需要下列语句]]
  7. _G.sysplus = require("sysplus")
  8. local iotcloud = require("iotcloud")
  9. -- Air780E的AT固件默认会为开机键防抖, 导致部分用户刷机很麻烦
  10. if rtos.bsp() == "EC618" and pm and pm.PWK_MODE then
  11. pm.power(pm.PWK_MODE, false)
  12. end
  13. local product_id = "58JE68ZUHO"
  14. local product_key = "oncUYTstf0rak67j3PsvIWWh"
  15. local device_id = mobile.imei()
  16. -- 统一联网函数
  17. sys.taskInit(function()
  18. local device_id = mcu.unique_id():toHex()
  19. if mobile then
  20. -- Air780E/Air600E系列
  21. --mobile.simid(2) -- 自动切换SIM卡
  22. LED = gpio.setup(27, 0, gpio.PULLUP)
  23. device_id = mobile.imei()
  24. end
  25. -- 默认都等到联网成功
  26. sys.waitUntil("IP_READY")
  27. sys.publish("net_ready", device_id)
  28. end)
  29. sys.taskInit(function()
  30. -- 等待联网
  31. local ret, device_id = sys.waitUntil("net_ready")
  32. -- -- 动态注册
  33. iotcloudc = iotcloud.new(iotcloud.TENCENT,{produt_id = product_id ,product_secret = product_key})
  34. if iotcloudc then
  35. iotcloudc:connect()
  36. end
  37. end)
  38. sys.subscribe("iotcloud", function(cloudc,event,data,payload)
  39. -- 注意,此处不是协程内,复杂操作发消息给协程内进行处理
  40. if event == iotcloud.CONNECT then -- 云平台联上了
  41. print("iotcloud","CONNECT", "云平台连接成功")
  42. iotcloudc:subscribe("$thing/down/property/"..product_id.."/"..device_id) -- 可以自由定阅主题等
  43. elseif event == iotcloud.RECEIVE then
  44. print("iotcloud","topic", data, "payload", payload)
  45. local iot_msg = json.decode(payload)
  46. local led_value = iot_msg["params"]["power_switch"]
  47. print("led_value:", led_value)
  48. if led_value == 1 then
  49. LED(1)
  50. elseif led_value == 0 then
  51. LED(0)
  52. end
  53. -- 用户处理代码
  54. elseif event == iotcloud.OTA then
  55. if data then
  56. rtos.reboot()
  57. end
  58. elseif event == iotcloud.DISCONNECT then -- 云平台断开了
  59. -- 用户处理代码
  60. print("iotcloud","DISCONNECT", "云平台连接断开")
  61. end
  62. end)
  63. -- -- 每隔20秒发布一次qos为1的消息到云平台
  64. -- sys.taskInit(function()
  65. -- while 1 do
  66. -- sys.wait(20000)
  67. -- if iotcloudc then
  68. -- log.info("每隔20秒发布一次qos为1的消息到云平台,消息内容hello world")
  69. -- iotcloudc:publish("$thing/up/property/"..product_id.."/"..device_id, "hello world!", 1) -- 上传数据
  70. -- end
  71. -- end
  72. -- end)
  73. -- 用户代码已结束---------------------------------------------
  74. -- 结尾总是这一句
  75. sys.run()
  76. -- sys.run()之后后面不要加任何语句!!!!!