Просмотр исходного кода

add: 补充公众号文章对应的完整代码 https://mp.weixin.qq.com/s/ST_8Uej8R7qLUsikfh3Xtw

Wendal Chen 3 лет назад
Родитель
Сommit
469be817f5
1 измененных файлов с 99 добавлено и 0 удалено
  1. 99 0
      script/turnkey/esp32c3_qcloud_switch/main.lua

+ 99 - 0
script/turnkey/esp32c3_qcloud_switch/main.lua

@@ -0,0 +1,99 @@
+--[[
+这个代码对应公众号文档 https://mp.weixin.qq.com/s/ST_8Uej8R7qLUsikfh3Xtw
+
+针对的硬件是 ESP32系列
+]]
+
+PROJECT = "qcloud100"
+VERSION = "1.0.0"
+
+--测试支持硬件:ESP32C3/Air105/Air780E
+
+local sys = require "sys"
+require("sysplus")
+
+sys.taskInit(function()
+    -- 统一联网函数
+    if rtos.bsp():startsWith("ESP32") then -- ESP32系列, C3/S3都可以
+        LED = gpio.setup(12, 0, gpio.PULLUP) -- 控制的灯对应的GPIO号
+        wlan.init()
+        --
+        -- ESP32系列, 这里要填wifi的名称和密码. 只支持2.4G频段
+        --
+        local ssid, password = "wifi的名字", "wifi的密码"
+        wlan.setMode(wlan.STATION)
+        wlan.connect(ssid, password, 1)
+        local result, data = sys.waitUntil("IP_READY")
+        log.info("wlan", "IP_READY", result, data)
+    elseif rtos.bsp() == "AIR105" then -- Air105走网卡,W5500
+        w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
+        w5500.config() --默认是DHCP模式
+        w5500.bind(socket.ETH0)
+        LED = gpio.setup(62, 0, gpio.PULLUP)
+        sys.wait(1000)
+    elseif rtos.bsp() == "EC618" then -- Air780E,走4G一堆网络
+        -- mobile.simid(2) -- 自动选卡, 如果不清楚在哪个卡槽,就取消注释
+        LED = gpio.setup(27, 0, gpio.PULLUP)
+        sys.waitUntil("IP_READY") -- 等联网就行,要插卡的
+        log.info("mobile", "IP_READY", mobile.imei(), mobile.iccid())
+    else
+        while 1 do 
+            sys.wait(1000)
+            log.info("bsp", "未支持的模块", rtos.bsp())
+        end
+    end
+
+    -- 往下就是连接到腾讯云了, 下面3个参数要改成自己的值, 到腾讯云上建项目建设备才有的
+    local product_key = "产品id" -- 一串英文字母,填前面的双引号以内
+    local device_id = "设备名称" -- 一定要改成自己的数据
+    local device_secret = "设备密钥" -- 设备密钥
+    local client_id, user_name, password = iotauth.qcloud(product_key, device_id, device_secret, "sha1", 1700561166)
+    log.info("mqtt参数", client_id, user_name, password)
+
+    -- MQTT参数准备好了,开始连接,并监听数据下发
+    local mqttc = mqtt.create(nil, product_key .. ".iotcloud.tencentdevices.com", 1883)
+    mqttc:auth(client_id, user_name, password)
+    mqttc:keepalive(240) -- 默认值240s
+    mqttc:autoreconn(true, 3000) -- 自动重连机制
+    mqttc:on(
+        function(mqtt_client, event, data, payload)
+            if event == "conack"then
+                -- 连上了,鉴权也ok
+                sys.publish("mqtt_conack")
+                log.info("mqtt", "mqtt已连接")
+                mqtt_client:subscribe("$thing/down/property/" .. product_key .. "/".. device_id)
+            elseif event == "recv" then
+                log.info("mqtt", "收到消息", data, payload)
+                local json = json.decode(payload)
+                if json.method == "control" then
+                    if json.params.power_switch == 1 then
+                        LED(1)
+                    elseif json.params.power_switch == 0 then
+                        LED(0)
+                    end
+                end
+            elseif event == "sent"then
+                log.info("mqtt", "sent", "pkgid", data)
+            end
+        end
+    )
+    mqttc:connect()
+    --sys.wait(1000)
+    sys.waitUntil("mqtt_conack")
+    while true do
+        local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)    
+        if ret then
+            if topic == "close" then
+                break
+            end
+            mqttc:publish(topic, data, qos)
+        end
+    end
+    mqttc:close()
+    mqttc = nil
+end)
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!