合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

这篇具有很好参考价值的文章主要介绍了合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

1、项目介绍

之前发布的文章有esp8266的wifi模块和BC20的NB模块与华为云物联网通信为主,本期文章采用了合宙的4G LTE Cat.1模块,编程语言用的是lua,整体来说代码比较简洁,实现对华为云物联网平台的设备通信与控制,即采用一个变量作为模拟属性定时上报,并以一个LED灯作为受控设备进行云端命令的控制,本期内容为我们在户外的项目应用中提供一些参考方案,实现手机远程控制户外设备与数据通信的功能。

准备:

Air780e开发板

usb-typec数据线

4G SIM手机卡(可上网)

2、Air780E模组

Air780E 是合宙通信推出的 LTE Cat.1bis通信模块,采用移芯EC618平台,支持4G全网通 支持双卡单待、支持SPI LCD、支持USB 2.0, 仅CDC功能、支持I2S数字语音接口、支持摄像头等配置,支持AT指令开发、CSDK开发和luatos的lua脚本语言的多种开发,开发板目前淘宝官网是39.9,性价比还是可以的

合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

3、luatos

Lua可以说是目前嵌入式方案中,资源占用最小、运行效率最高、语法最简洁的一门脚本语言。对于编程小白来说,它适合作为你的编程入门语言,因为语法简单。对于会c语言的老手来说,它与c可以完美契合,再加上LuatOS本身就是开源,你可以轻松地使用c为其添加一套c库接口,享受它的高效。在本次教程中,我们便使用lua语言跑luatos实现对华为云物联网平台的设备通信与控制。

4、华为云物联网平台

物联网平台的相关配置在这里就不和大家一一重复了,创建服务、设备、属性、命令等过程大家可以参考以前发布的文章(文末有链接),主要需要提前准备的数据有华为云物联网平台的设备三元组、相关MQTT发布订阅主题等,参考如下:

local mqtt_host = "iot-mqtts.cn-north-4.myhuaweicloud.com"  
local mqtt_port = 1883  
local mqtt_isssl = false
local client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"
local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"
local password = "eaff6453a8b5b774b11funiotfuniot7funiotf8funiot5333funiotf76bea151"
local mqtt_hw = nil
local devdata_topic="$oc/devices/61fb2d7fde9933029funiot_esp8266_test01/sys/properties/report" --订阅属性上报主题
local cmdrec_topic="$oc/devices/61fb2d7fde9933029befuniot_esp8266_test01/sys/commands/#"         --订阅命令下发主题
local service_id="Dev_data"             --服务ID
local command_name="Control"            --控制命令

二、完整开发流程

1. 下载软件包与编译烧录工具

1) LuatOS软件包:Air780e使用LuatOS-SoC@EC618

下载链接:LuatOS-SoC@EC618 V1103

2) 调试与烧录工具:Luatools

下载链接:luatools调试与烧录工具

2. 编写luatos脚本

-- 获取更多资料,可以关注公众号"IOT趣制作"
-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "led"
VERSION = "1.0.0"
-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
log.info("main", "mqtt_huaweiiot")
print(_VERSION)
if wdt then
    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
--用户代码开始---------------------------------------------------
--根据自己华为云物联网平台的配置修改以下参数,下列参数仅作参考
local mqtt_host = "iot-mqtts.cn-north-4.myhuaweicloud.com"  
local mqtt_port = 1883  
local mqtt_isssl = false
local client_id = "61fb2d7fde9933029bfuniot_esp8266_test01_0_0_2023021710"
local user_name = "61fb2d7fde9933029bfuniot_esp8266_test01"
local password = "eaff6453a8b5b774b11funiot99aa3funiotuniot5333funiotf76bea151"
local mqtt_hw = nil
local devdata_topic="$oc/devices/61fb2d7fde9933029funiot_esp8266_test01/sys/properties/report" --订阅属性上报主题
local cmdrec_topic="$oc/devices/61fb2d7fde9933029befuniot_esp8266_test01/sys/commands/#"         --订阅命令下发主题
local service_id="Dev_data"             --服务ID
local command_name="Control"            --控制命令
local LED_PIN=27                        --LED引脚编号
gpio.setup(LED_PIN,0, gpio.PULLUP)      --设置LED上拉输出

sys.taskInit(function()
    while 1 do
        --网络相关
        mobile.simid(2)
        LED = gpio.setup(27, 0, gpio.PULLUP)
        device_id = mobile.imei()
        sys.waitUntil("IP_READY", 30000)
        --mqtt客户端创建

        mqtt_hw = mqtt.create(nil,mqtt_host, mqtt_port, mqtt_isssl, ca_file)
        mqtt_hw:auth(client_id,user_name,password) 
        mqtt_hw:keepalive(60) -- 默认值240s
        mqtt_hw:autoreconn(true, 3000) -- 自动重连机制
        --注册mqtt回调
        mqtt_hw:on(function(mqtt_client, event, data, payload)
            -- 用户自定义代码
            log.info("mqtt", "event", event, mqtt_client, data, payload)
            if event == "conack" then   --连接响应成功
                sys.publish("mqtt_conack")--订阅主题
                mqtt_client:subscribe(pub_devdata_topic)
                mqtt_client:subscribe(pub_cmdrec_topic)
            elseif event == "recv" then
                log.info("mqtt", "downlink", "topic", data, "payload", payload)
                print("payload:",payload)
                --解析json
                --例如:{"paras":{"led":1},"service_id":"Dev_data","command_name":"Control"}
                local mycmd=json.decode(payload)
                if mycmd then -- 若解码失败, 会返回nil
                    print("service_id :",mycmd["service_id"])
                    print("command_name is",mycmd["command_name"])
                    print("paras->led is",mycmd["paras"]["led"])
                    if mycmd["service_id"]==service_id and mycmd["command_name"]==command_name then
                        if  mycmd["paras"]["led"]==1 then
                            print("led turn on")
                            gpio.set(LED_PIN, gpio.HIGH)
                        elseif mycmd["paras"]["led"]==0 then
                            print("led turn off")
                            gpio.set(LED_PIN, gpio.LOW)
                        end
                    end            
                end 
            elseif event == "sent" then
                log.info("mqtt", "sent", "pkgid", data)
            -- elseif event == "disconnect" then
                -- 非自动重连时,按需重启mqtt_hw
                -- mqtt_client:connect()
            end
        end)
        --连接mqtt
        mqtt_hw:connect()
        sys.waitUntil("mqtt_conack")
        while true do
            -- mqtt_hw自动处理重连
            local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)
            if ret then
                if topic == "close" then break end
                mqtt_hw:publish(topic, data, qos)
            end
        end
        mqtt_hw:close()
        mqtt_hw = nil   
    end       
end)
--定时上报属性
sys.taskInit(function()
    local topic = devdata_topic --上报的topic
    local temp=0    --温度属性值
    local data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}"
    local qos = 1
    local temp=0
    while true do
        sys.wait(5000)
        if mqtt_hw and mqtt_hw:ready() then
            -- mqtt_hw:subscribe(topic)
            local pkgid = mqtt_hw:publish(topic, data, qos)
            temp=temp+1
            data = "{\"services\":[{\"service_id\":\"Dev_data\",\"properties\":{\"temp\": "..tostring(temp).."}}]}"
            -- 也可以通过sys.publish发布到指定task去
            -- sys.publish("mqtt_pub", topic, data, qos)
        end
    end
end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

3. 编译烧录

打开Luatools,点击项目管理按钮,选择下载好的固件(后缀名为soc的文件)和编写好的main.lua文件,勾选USB BOOT下载,点击下载底层和脚本按钮下载即可,具体操作流程如下图所示:
合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制
合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

4. 运行结果

合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制
合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

命令接收的同时开发板的LED灯光会对应的完成开关亮灭

5.Android APP

这里我们同样可以采用之前的Android APP完成与物联网平台的通信,实现手机远程控制户外设备与数据通信的功能,文章链接:

【华为云IOT的Android应用开发-详细教程】

合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制

6.其他相关参考文章

【stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与下发的命令处理】

【esp8266接入华为云物联网平台完成属性上报、命令处理】
【华为云IOT的Android应用开发-详细教程】文章来源地址https://www.toymoban.com/news/detail-443482.html

到了这里,关于合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Air780EG —— 合宙4G定位解决方案

    开机 - 搜星 - 定位成功 - 上报 - 关机 开机 - 搜星 - 定位成功 - 模块休眠,关闭GPS电源,但是备电不关 - 需要定位时,热启动 - 模块休眠,关闭GPS电源,但是备电不关 -循环 780EG Luatos的测试示例下载 优点 :思路简单,功耗计算固定 缺点 :不是最优解,且实际操作起来会发现

    2024年02月12日
    浏览(48)
  • LuatOS-SOC接口文档(air780E)--max30102 - 心率模块

    初始化MAX30102传感器 参数 传入值类型 解释 int 传感器所在的i2c总线id,默认为0 int int引脚 返回值 返回值类型 解释 bool 成功返回true, 否则返回nil或者false 例子 获取心率血氧(大概需要10s时间测量) 参数 无 返回值 返回值类型 解释 bool 成功返回true, 否则返回nil或者false number 心率

    2024年02月07日
    浏览(45)
  • LuatOS-SOC接口文档(air780E)--adc - 数模转换

    常量 类型 解释 adc.ADC_RANGE_3_6 number air105的ADC分压电阻开启,范围0~3.76V adc.ADC_RANGE_1_8 number air105的ADC分压电阻关闭,范围0~1.88V adc.ADC_RANGE_3_8 number air780E开启ADC0,1分压电阻,范围0~3.8V adc.ADC_RANGE_1_2 number air780E关闭ADC0,1分压电阻,范围0~1.2V adc.CH_CPU number CPU内部温度的通道id adc.CH

    2024年02月07日
    浏览(48)
  • 合宙Air724UG LuatOS-Air LVGL API-概念

    概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母) Click enable (单击启用) 我们可以使用 lvgl.obj_set_… 和 lvgl.obj_get_… 等前缀的函数设置或

    2024年02月11日
    浏览(34)
  • 合宙Air724UG LuatOS-Air LVGL API--对象

    对象 概念 在 LVGL 中,用户界面的基本构建块是对象。例如,按钮,标签,图像,列表,图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性: Position (位置) Size (尺寸) Parent (父母) Click enable (单击启用) 我们可以使用 lvgl.obj_set_… 和 lvgl.obj_get_… 等前缀的函数设

    2024年02月12日
    浏览(50)
  • 合宙Air724UG LuatOS-Air LVGL API--简介

    为何是 LVGL LVGL 是一个开源的图形库,它提供了创建嵌入式 GUI 所需的一切,具有易于使用的图形元素、漂亮的视觉效果和低内存占用的特点。 LVGL特点: 强大的 控件 :按钮、图表、列表、滑动条、图像等 高级图形引擎:动画、抗锯齿、不透明、平滑滚动、混合模式等 支持

    2024年02月12日
    浏览(35)
  • LuatOS-SOC接口文档(air780E)--audio - 多媒体音频

    常量 类型 解释 audio.PCM number PCM格式,即原始ADC数据 audio.MORE_DATA number audio.on回调函数传入参数的值,表示底层播放完一段数据,可以传入更多数据 audio.DONE number audio.on回调函数传入参数的值,表示底层播放完全部数据了 audio.BUS_DAC number 硬件输出总线,DAC类型 audio.BUS_I2S numb

    2024年02月07日
    浏览(65)
  • LuatOS-SOC接口文档(air780E)-- io - io操作(扩展)

    示例 判断文件是否存在 参数 传入值类型 解释 string 文件路径 返回值 返回值类型 解释 bool 存在返回true,否则返回false 例子 获取文件大小 参数 传入值类型 解释 string 文件路径 返回值 返回值类型 解释 int 文件数据,若文件不存在会返回nil 例子 读取整个文件,请注意内存消耗 参

    2024年02月07日
    浏览(47)
  • LuatOS-SOC接口文档(air780E)--lvgl - LVGL图像库

    创建一个lv_draw_mask_radius_param_t 参数 无 返回值 返回值类型 解释 userdata lv_draw_mask_radius_param_t指针 例子 释放一个lv_draw_mask_radius_param_t 参数 无 返回值 无 例子 创建一个lv_draw_mask_line_param_t 参数 无 返回值 返回值类型 解释 userdata lv_draw_mask_line_param_t指针 例子 释放一个lv_draw_mask

    2024年02月07日
    浏览(47)
  • LuatOS-SOC接口文档(air780E)-- httpsrv - http服务端

    启动并监听一个http端口 参数 传入值类型 解释 int 端口号 function 回调函数 返回值 返回值类型 解释 bool 成功返回true, 否则返回false 例子 停止http服务 参数 传入值类型 解释 int 端口号 返回值 返回值类型 解释 nil 当前无返回值 例子 无

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包