• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Air780E小程序远程开关-LuatOS版本

武飞扬头像
如果能编程回忆
帮助1

目前,Air780E的CSDK已经开源了,LuatOS也作为其中的一个部分开源了出来,今天学习一下如何通过小程序远程控制开发板上灯的开关,学会以后可以制作远程开关控制各种设备。

本教程无需拥有服务器和小程序开发经验,会点鼠标会复制粘贴就能做

先来效果演示

学新通

一、腾讯云准备

1、新建项目

我们用到的是腾讯云的物联网开发平台https://console.cloud.tencent.com/iotexplorer

没账号的自己注册,每个账号都有免费额度,足够我们自己玩玩了。点进公共实例。

学新通

 新建项目

学新通

 项目名称自己起一个,描述写不写都行,填完保存

学新通

2、新建产品

 然后在页面上就能看到我们新建的项目了,点击项目名称,进去新建产品,名称我这里叫远程开关,可以随便写。然后品类选标准品类,点进去搜索开关,勾选一路开关,如下图。通信方式选2G/3G/4G,其他默认。点击确定。

学新通

学新通

3、添加设备

 点进我们刚新建的产品,点4设备调试页面,点击新建设备。

学新通

填写设备名称,建议用设备imei等唯一标识,我这里演示方便就写了air780e 学新通

 点击我们刚新建的设备,记录以下几个参数,一会要用。

学新通

 二、设备端开发

可以自行编译CSDK里的luatos项目,也可以用我这里编译好的LuatOS-SoC_V1001_EC618.soc

具体怎么编译以后再写教程

1、计算连接参数

腾讯云是需要鉴权才允许设备连接,因此,我们要首先计算连接参数,这里使用iotauth库可以方便的计算阿里云,腾讯云,百度云,涂鸦云,阿里云,华为云的连接参数。

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

学新通

 代码如下,参数以变量的形式定义好了,改成自己的就行学新通

 2、连接服务器

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

  1.  
    mqttc = mqtt.create(nil, product_key .. ".iotcloud.tencentdevices.com", 1883)
  2.  
    mqttc:auth(client_id, user_name, password)
  3.  
    mqttc:keepalive(240) -- 默认值240s
  4.  
    mqttc:autoreconn(true, 3000) -- 自动重连机制
  5.  
    mqttc:on(
  6.  
    function(mqtt_client, event, data, payload)
  7.  
    if event == "conack" then
  8.  
    sys.publish("mqtt_conack")
  9.  
    log.info("mqtt", "mqtt已连接")
  10.  
    mqtt_client:subscribe("$thing/down/property/" .. product_key .. "/".. device_id)
  11.  
    elseif event == "recv" then
  12.  
    log.info("mqtt", "收到消息", data, payload)
  13.  
    local json = json.decode(payload)
  14.  
    if json.method == "control" then
  15.  
    if json.params.power_switch == 1 then
  16.  
    LED(1)
  17.  
    elseif json.params.power_switch == 0 then
  18.  
    LED(0)
  19.  
    end
  20.  
    end
  21.  
    elseif event == "sent" then
  22.  
    log.info("mqtt", "sent", "pkgid", data)
  23.  
    end
  24.  
    end
  25.  
    )
  26.  
    mqttc:connect()
  27.  
    sys.wait(10000)
  28.  
    mqttc:subscribe("$thing/down/property/" .. product_key .. "/" .. device_id)
  29.  
    sys.waitUntil("mqtt_conack")
  30.  
    while true do
  31.  
    local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)
  32.  
    if ret then
  33.  
    if topic == "close" then
  34.  
    break
  35.  
    end
  36.  
    mqttc:publish(topic, data, qos)
  37.  
    end
  38.  
    end
  39.  
    mqttc:close()
  40.  
    mqttc = nil

3、处理数据

根据腾讯云的文档,我们使用的物模型中power_switch是我们需要的开关参数。我们只需要根据文档对收到的数据解析即可,具体代码看前文代码

学新通

 三、测试

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

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

  1.  
    PROJECT = "gpiodemo"
  2.  
    VERSION = "1.0.0"
  3.  
    local sys = require "sys"
  4.  
    require("sysplus")
  5.  
    local wifi_ssid = ""
  6.  
    local wifi_password = ""--如果是wifi设备,这里改成你的wifi账号和密码
  7.  
    local product_key = ""
  8.  
    local device_id = "" --改为你自己的设备id
  9.  
    local device_secret = "" --改为你自己的设备密钥
  10.  
    local mqttc = nil
  11.  
    sys.taskInit(
  12.  
    function()
  13.  
    log.info("BSP", rtos.bsp())
  14.  
    if rtos.bsp() == "ESP32C3" then
  15.  
    LED = gpio.setup(12, 0, gpio.PULLUP)
  16.  
    wlan.init()
  17.  
    wlan.setMode(wlan.STATION)
  18.  
    wlan.connect(ssid, password, 1)
  19.  
    local result, data = sys.waitUntil("IP_READY")
  20.  
    log.info("wlan", "IP_READY", result, data)
  21.  
    elseif rtos.bsp() == "AIR105" then
  22.  
    w5500.init(spi.HSPI_0, 24000000, pin.PC14, pin.PC01, pin.PC00)
  23.  
    w5500.config() --默认是DHCP模式
  24.  
    w5500.bind(socket.ETH0)
  25.  
    LED = gpio.setup(62, 0, gpio.PULLUP)
  26.  
    elseif rtos.bsp() == "EC618" then
  27.  
    LED = gpio.setup(27, 0, gpio.PULLUP)
  28.  
    end
  29.  
    local client_id, user_name, password = iotauth.qcloud(product_key, device_id, device_secret, "sha1", 1700561166)
  30.  
    log.info("参数", client_id, user_name, password)
  31.  
    mqttc = mqtt.create(nil, product_key .. ".iotcloud.tencentdevices.com", 1883)
  32.  
    mqttc:auth(client_id, user_name, password)
  33.  
    mqttc:keepalive(240) -- 默认值240s
  34.  
    mqttc:autoreconn(true, 3000) -- 自动重连机制
  35.  
    mqttc:on(
  36.  
    function(mqtt_client, event, data, payload)
  37.  
    if event == "conack" then
  38.  
    sys.publish("mqtt_conack")
  39.  
    log.info("mqtt", "mqtt已连接")
  40.  
    mqtt_client:subscribe("$thing/down/property/" .. product_key .. "/".. device_id)
  41.  
    elseif event == "recv" then
  42.  
    log.info("mqtt", "收到消息", data, payload)
  43.  
    local json = json.decode(payload)
  44.  
    if json.method == "control" then
  45.  
    if json.params.power_switch == 1 then
  46.  
    LED(1)
  47.  
    elseif json.params.power_switch == 0 then
  48.  
    LED(0)
  49.  
    end
  50.  
    end
  51.  
    elseif event == "sent" then
  52.  
    log.info("mqtt", "sent", "pkgid", data)
  53.  
    end
  54.  
    end
  55.  
    )
  56.  
    mqttc:connect()
  57.  
    sys.wait(10000)
  58.  
    mqttc:subscribe("$thing/down/property/" .. product_key .. "/" .. device_id)
  59.  
    sys.waitUntil("mqtt_conack")
  60.  
    while true do
  61.  
    local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)
  62.  
    if ret then
  63.  
    if topic == "close" then
  64.  
    break
  65.  
    end
  66.  
    mqttc:publish(topic, data, qos)
  67.  
    end
  68.  
    end
  69.  
    mqttc:close()
  70.  
    mqttc = nil
  71.  
    end
  72.  
    )
  73.  
    -- 用户代码已结束---------------------------------------------
  74.  
    -- 结尾总是这一句
  75.  
    sys.run()
  76.  
    -- sys.run()之后后面不要加任何语句!!!!!

点击腾讯云设备的二维码

学新通

使用腾讯连连小程序扫码添加设备,添加完就能看到我们设备在线了 

 学新通

点击总开关,改变开关状态,就能看到,设备上的灯跟着改变状态了

学新通

 日志也可以看到收到的消息,可用根据消息调试其他功能,比如倒计时开启 

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaeief
系列文章
更多 icon
同类精品
更多 icon
继续加载