Air780E涂鸦云远程开关-LuatOS

news2025/4/15 20:07:32

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)

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()

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()之后后面不要加任何语句!!!!!

2、绑定设备

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

image-20221121154915485

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/24994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JDK动态代理

可以针对一些不特定的类或者一些不特定的方法进行代理 可以在程序运行时动态变化代理规则 代理类在程序运行时才创建代理模式成为动态代理 代理类并不是在Java代码中定义好的 而是在程序运行时根据在Java代码中指示动态生成的 Proxy JDK动态代理 面向接口 import java.lang.r…

前后端分离页面(从数据库到前端、后端手把手教你如何搭建 -- 功能实现:增加查询)

目录 一、准备条件 前台 后台 二、数据库设计 建议不要导入,导入有乱码的风险;新建查询运行下面代码更快捷。 三、导入前端项目 导入后使用命令行打开黑窗口,测试一下有没有npm -v环境 如果出现命令无效,就使用管理员身份打开…

SpringAOP(1)-spring源码详解(六)

上篇文章说了spring监听器,监听event,先把事件全部存储在多播器,通过publicEvent来触发多播器发送事件,他可以通过代码注解,或者实现接口的方式来实现事件监听,达到解耦和异步的效果。 Spring监听器-sprin…

Jupyter介绍和安装使用

一. 前言: 最近,小熙发现了一个有意思的工具Jupyter notebook,刚上手熟悉了下,特此记录分享。 二. 简介: 简单介绍并说下用途: Jupyter Notebook是一款开源的web应用,支持markdown编辑&#…

Windows为什么使用广播机制更新信息?

很多 Windows 信息通知机制是基于广播消息,例如,DDE,WM_FONTCHANGE 消息和系统设置的修改等。 当我们知道,消息的广播可能导致系统由于某个窗口停止处理消息而导致整个系统停止时,为什么我们还是使用广播呢&#xff1f…

【解决】VSCode编写C++自定义头文件undefined reference异常问题

最近在使用VSCode编写C程序过程中,自定义一个 *.h 文件,其中包含了函数声明,在主函数中引入头文件后,调用头文件对应C文件中的方法,出现了undefined reference问题,这个主要是配置没有正确造成的&#xff0…

Git——分支(详细解释)

目录 一、概念 1.1 服务器运行模式 1.2 分支概念 1.3 分支的好处 二、分支相关操作 2.1 分支操作 2.2 查看当前分支 2.3 创建分支 2.4 切换分支 2.4.1 切换分支 2.4.2 修改代码并提交(完整过程) 三、合并分支 3.1 正常合并 3.2 冲突合并&#xff…

DGL学习笔记——第一章 图

提示:DGL用户指南学习中 文章目录一、关于图的基本概念?二、图、节点和边三、节点和边的特征四、从外部源创建图1、从Scipy稀疏矩阵中构建图示例2、从networkx中构建图示例3、从csv中构建图结构总结一、关于图的基本概念? 图是用以表示实体及…

【推荐系统学习笔记】-- 1、推荐系统架构

根本解决的问题:在信息过载的情况下,用户如何高效获取感兴趣的信息。 1 逻辑架构 推荐系统要处理的问题就可以被形式化地定义为:对于某个用户U(User),在特定场景C(Context)下&…

区块链 - 各个国家Web3的现状与趋势

​潜力博主推荐,点上面关注博主↑↑↑ 2022年,元宇宙、NFT 、GameFi、DAO、DeFi 等 Web3 时代的新生事物,正在彻底改写传统商业模式,重塑全球数字商业的版图,一个全新的数字时代正在开启。 美国、欧洲官方开始在 Web…

【构建ML驱动的应用程序】第 4 章 :获取初始数据集

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

C语言——指针初阶详解

🐒博客名:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 目录 1. 指针是什么 2. 指针和指针类型 2.1指针类型的第一个意义 2.2指针类型的第二个意义 3. 野指针 3.1 野指针成因 3.2 如何…

零基础自学javase黑马课程第十六天

零基础自学javase黑马课程第十六天 ✨欢迎关注🖱点赞🎀收藏⭐留言✒ 🔮本文由京与旧铺原创,csdn首发! 😘系列专栏:java学习 💻首发时间:🎞2022年11月21日&…

三菱FX3U——ST编程点动与自锁

通过赋值 : 操作符,可以控制元件的状态; Y0:1,使Y0得电, Y0:0,使Y0失电; Y0:TRUE,使Y0得电, Y0:FALSE,使Y0失电; Y2:M0,通过M0的状态来控制Y2; NOT 取反操作, 状态取反&#xff…

活动现场大屏幕互动系统(微信墙)修复版完美PHP源码,带完整素材包和详细使用文档

源码收集于网络,觉得不错,2022-11-18亲测了源码,顺手修复了原来的几处bug。网上的这个源码有个重大bug,就是后台系统配音没法上传音乐文件。我理了一下代码,修复了这个问题,现在后台可以分别给每个模块上传…

CTFHub技能树 Web-文件上传详解

文章目录0x01 无验证0x02 前端验证0x03 .htaccess0x04 MIME绕过0x05 00截断0x06 双写后缀0x07 文件头检查0x08 其他摘抄0x01 无验证 介绍&#xff1a;直接上传后缀是php的文件即可 文件上传 <?php eval($_POST[777]);?> 进行连接 查找flag 0x02 前端验证 介…

智慧住建解决方案-最新全套文件

智慧住建解决方案-最新全套文件一、建设背景目前智慧住建的信息化现状&#xff1a;1、系统重叠建设&#xff0c;标准规范不统一2、信息应用水平不均衡&#xff0c;资源共享待提升3、应用系统众多&#xff0c;用户操作体验不佳4、原有架构难以适应“互联网”的新要求二、总体设计…

计算机中的第三个伟大发明

本节我们学习了控制计算机跳转指令的第三个发明的由来&#xff0c;以及清除指令。并且展示了计算机的整体控制部分的布线图。 第三个发明 对于跳转指令&#xff0c;有时它会跳转&#xff0c;有时不会。跳或不跳只是两种可能性&#xff0c;所以只需要一个bit就可以确定哪一种会…

【Kubernetes快速实战】

K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ 文章目录前言一、K8S核心特性二、K8S集群安装1.安装K8S集群1、关闭防火墙2、关闭 selinux3、关闭 swap4、给三台机器分别设置主机名5、在 k8s‐master机器添加hosts&#xff0c;执行如下命令&#xff0c;ip需要修改…

全球最受欢迎的「数字游民」城市竟然是它?

相信你已经或多或少听说过「数字游民」这个词汇了。 「数字游民」译自英文词组Digital Nomad&#xff0c;是指那些没有办公室等固定工作场所&#xff0c;利用互联网从事远程工作&#xff0c;实现地域和时间的相对自由&#xff0c;在全球范围内移动生活的人群。 想想看&#x…