• Air780E涂鸦云远程开关-LuatOS


    Air780E涂鸦云远程开关-LuatOS

    涂鸦智能在远程开关和灯控领域可以算是龙头了,今天就来学习一下,如何接入涂鸦云平台

    一、涂鸦云准备

    注册账号不写了,自己注册账号即可

    1、创建产品

    点击产品->极速智能化->产品开发页面的创建产品

    image-20221121142238006

    选择开关

    image-20221121142300596

    智能化方式选生态设备接入

    image-20221121142326118

    填写产品名称,通讯协议选2G/3G/4G,其他默认,然后点创建产品,完成创建

    image-20221121142345187

    2、功能定义

    点击标准功能,添加功能

    image-20221121142404002

    搜开关1,然后点那个箭头添加到右边

    image-20221121151229121

    3、添加设备

    点击设备开发,选择开放协议接入

    image-20221121151347174

    找到激活验证,申请免费授权码,每个项目有两个免费码

    image-20221121151500950

    稍等一下,分配完成以后就能看到我们有2个码了,然后点注册设备

    image-20221121151657062

    自行填写设备名,其他默认

    image-20221121151755107

    然后复制凭证供接下来使用

    image-20221121151828737

    二、设备端开发

    1、计算连接参数

    涂鸦云是需要鉴权才允许设备连接,因此,我们要首先计算连接参数,这里使用iotauth库可以方便的计算阿里云,腾讯云,百度云,涂鸦云,阿里云,华为云的连接参数。具体协议可以看涂鸦文档Tuya MQTT 标准协议-涂鸦 IoT 开发平台-涂鸦开发者

    根据api的说明,结合前面我们在涂鸦云注册的设备,代码就很简单了

    image-20221121152609368

    local ProductID= ""
    local DeviceID= "" --改为你自己的设备id
    local DeviceSecret = "" --改为你自己的设备密钥
    local client_id, user_name, password = iotauth.tuya(DeviceID, DeviceSecret,1700561166)
    log.info("参数", client_id, user_name, password)
    • 1
    • 2
    • 3
    • 4

    2、连接服务器

    获取参数以后,根据返回值就可以得到连接mqtt服务器的信息,根据mqtt库的说明,代码如下

    mqttc = mqtt.create(nil, "m1.tuyacn.com", 8883,true)
            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
                        sys.publish("mqtt_conack")
                        log.info("mqtt", "mqtt已连接")
                        mqtt_client:subscribe("tylink/"..DeviceID.."/thing/property/set")
    
                    elseif event == "recv" then
                        log.info("mqtt", "收到消息", data, payload)
                        local mqtt_date = json.decode(payload)
                        if mqtt_date.data.switch_1 ~= nil then
                            log.info("mqtt",mqtt_date.data.switch_1)
                            if mqtt_date.data.switch_1 == true then
                                LED(1)
                            elseif mqtt_date.data.switch_1 == false then
                                LED(0)
                            end
                        end
                    elseif event == "sent" then
                        log.info("mqtt", "sent", "pkgid", data)
                    end
                end
            )
            mqttc:connect()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3、处理数据

    根据涂鸦云的文档,我们使用的switch_1是我们需要的开关参数。我们只需要根据文档对收到的数据解析即可,具体代码看前文代码

    三、测试

    把完整代码烧录进设备,不会烧录的可以看 AIR780E二次开发点灯(LuatOS)

    1、烧录代码

    代码兼容Air780E,ESP32C3和Air105+W5500,注意修改相应参数为自己的。

    PROJECT = "gpiodemo"
    VERSION = "1.0.0"
    local sys = require "sys"
    require("sysplus")
    local wifi_ssid = ""
    local wifi_password = ""--如果是wifi设备,这里改成你的wifi账号和密码
    local ProductID= ""
    local DeviceID= "" --改为你自己的设备id
    local DeviceSecret = "" --改为你自己的设备密钥
    local mqttc = nil
    sys.taskInit(
        function()
            log.info("BSP", rtos.bsp())
            if rtos.bsp() == "ESP32C3" then
                LED = gpio.setup(12, 0, gpio.PULLUP)
                wlan.init()
                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
                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
                -- mobile.simid(2)
                LED = gpio.setup(27, 0, gpio.PULLUP)
            end
            local client_id, user_name, password = iotauth.tuya(DeviceID, DeviceSecret,1700561166)
            log.info("参数", client_id, user_name, password)
            mqttc = mqtt.create(nil, "m1.tuyacn.com", 8883,true)
            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
                        sys.publish("mqtt_conack")
                        log.info("mqtt", "mqtt已连接")
                        mqtt_client:subscribe("tylink/"..DeviceID.."/thing/property/set")
    
                    elseif event == "recv" then
                        log.info("mqtt", "收到消息", data, payload)
                        local mqtt_date = json.decode(payload)
                        if mqtt_date.data.switch_1 ~= nil then
                            log.info("mqtt",mqtt_date.data.switch_1)
                            if mqtt_date.data.switch_1 == true then
                                LED(1)
                            elseif mqtt_date.data.switch_1 == false then
                                LED(0)
                            end
                        end
                    elseif event == "sent" then
                        log.info("mqtt", "sent", "pkgid", data)
                    end
                end
            )
            mqttc:connect()
            sys.wait(10000)
            -- mqttc:subscribe("$thing/down/property/" .. product_key .. "/" .. device_id)
            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()之后后面不要加任何语句!!!!!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    2、绑定设备

    点击产品的产品配置页面,配置设备的绑定范围,改成全部可用

    image-20221121154915485

    点到设备管理页面,点击绑定二维码,用APP扫码绑定

    image-20221121154957624点击app里的开关就能控制设备上的灯了

  • 相关阅读:
    IGES文件在线渲染与转换方法
    9月1日目标检测学习笔记——通用物体检测
    clm大气强迫数据制作
    计算机精品视频教程合集
    【CSS】笔记5-定位、网页布局总结、元素显示隐藏
    WSL Ubuntu + Docker Desktop搭建python环境
    串级PID为什么外环输出时内环的期望值
    java编程基础总结——31.多线程编程相关知识
    百度面试——AI算法岗
    QT开发使用的技巧、遇到的坑
  • 原文地址:https://blog.csdn.net/rootuseres/article/details/127969483