合宙Air780e+luatos+阿里云物联网平台完成设备通信与控制(属性上报+4G远程点灯)

本文介绍了如何使用合宙Air780ELTECat.1模块和Lua脚本语言luatos,连接阿里云物联网平台,实现设备的通信与控制。开发者需要准备Air780E开发板、SIM卡等硬件,并配置阿里云物联网平台的相关参数。文章详细阐述了从下载软件包、编写lua脚本到编译烧录的完整流程,以及如何通过MQTT协议进行属性上报和命令控制,最终实现LED灯的远程控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

在这里插入图片描述

1、项目介绍

之前发布的文章有采用合宙的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,性价比还是可以的

开发板pinout

3、luatos

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

4、阿里云物联网平台

阿里云物联网平台的相关配置在这里就不和大家一一重复了,创建产品、设备、属性等过程大家可以参考官方文档或视频,主要需要提前准备的数据有阿里云物联网平台设备的MQTT连接参数、MQTT发布订阅主题、设备属性等,参考如下:

在这里插入图片描述
在这里插入图片描述

--根据自己阿里云物联网平台的配置修改以下参数,下列参数仅作参考
local client_id = "a1ZR8uuCkfP.air780e_test|securemode=2,signmethod=hmacsha256,timestamp=1681048410186|"
local user_name = "air780e_test&a1ZR8u41341"
local password = "9b075c78b1a600065d28af9000www.funiot.xyz000www.funiot.xyz000"
local mqtt_host = "a1ZR8uuCkfP.iot-as-mqtt.cn-shanghai.aliyuncs.com"  
local mqtt_port = 1883  

订阅主题并设置设备属性:
在这里插入图片描述

local devdata_topic="/sys/a1ZR8uuCkfP/air780e_test/thing/event/property/post" --订阅属性上报主题
local cmdrec_topic="/sys/a1ZR8uuCkfP/air780e_test/thing/service/property/set" --订阅属性设置主题
local dev_control="thing.service.property.set"   --订阅属性控制下发主题
local command_name="LED_Control"            --控制命令

二、完整开发流程

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

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

下载链接:LuatOS-SoC@EC618 V1103

2) 调试与烧录工具:Luatools

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

2. 编写luatos脚本

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "led"
VERSION = "1.0.0"

-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")

log.info("main", "led")

print(_VERSION)

if wdt then
    --添加硬狗防止程序卡死,在支持的设备上启用这个功能
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
--用户代码开始---------------------------------------------------
--根据自己阿里云物联网平台的配置修改以下参数,下列参数仅作参考
local mqtt_host = "a1ZR8uuCkfP.iot-as-mqtt.cn-shanghai.aliyuncs.com"  
local mqtt_port = 1883  
local mqtt_isssl = false
local client_id = "a1ZR8uuCkfP.air780e_test|securemode=2,signmethod=hmacsha256,timestamp=1681048410186|"
local user_name = "air780e_test&a1ZR81132134"
local password = "9b075c78b1a600065d28afa0d3b42www.funiot.xy&&www.funiot.xyz"
local mqtt_aliyun = nil
local devdata_topic="/sys/a1ZR8uuCkfP/air780e_test/thing/event/property/post" --订阅属性上报主题
local cmdrec_topic="/sys/a1ZR8uuCkfP/air780e_test/thing/service/property/set" --订阅属性设置主题
local dev_control="thing.service.property.set"   --订阅属性控制下发主题
local command_name="LED_Control"            --控制命令
local LED_PIN=27                        	--LED引脚编号
gpio.setup(LED_PIN,0, gpio.PULLUP)      	--设置LED上拉输出

sys.taskInit(function()
    print("connected to aliyun example\r\n")
    while 1 do
        --网络相关
        mobile.simid(2)
        LED = gpio.setup(27, 0, gpio.PULLUP)
        device_id = mobile.imei()
        sys.waitUntil("IP_READY", 30000)
        --mqtt客户端创建
        mqtt_aliyun = mqtt.create(nil,mqtt_host, mqtt_port, mqtt_isssl, ca_file)
        mqtt_aliyun:auth(client_id,user_name,password) 
        mqtt_aliyun:keepalive(60) -- 默认值240s
        mqtt_aliyun:autoreconn(true, 3000) -- 自动重连机制
        --注册mqtt回调
        mqtt_aliyun: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
                --例如:
                --{"method":"thing.service.property.set","id":"273481693","params":{"LED_Control":1},"version":"1.0.0"}
                local mycmd=json.decode(payload)
                if mycmd then -- 若解码失败, 会返回nil
                    print("method :",mycmd["method"])
                    print("params is",mycmd["params"])
                    print("params->LED_Control is",mycmd["params"]["LED_Control"])
                    if mycmd["method"]==dev_control then
                        if  mycmd["params"]["LED_Control"]==1 then
                            print("led turn on")
                            gpio.set(LED_PIN, gpio.HIGH)
                        elseif mycmd["params"]["LED_Control"]==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_aliyun
                -- mqtt_client:connect()
            end
        end)
        --连接mqtt
        mqtt_aliyun:connect()
        sys.waitUntil("mqtt_conack")
        while true do
            -- mqtt_aliyun自动处理重连
            local ret, topic, data, qos = sys.waitUntil("mqtt_pub", 30000)
            if ret then
                if topic == "close" then break end
                mqtt_aliyun:publish(topic, data, qos)
            end
        end
        mqtt_aliyun:close()
        mqtt_aliyun = nil 
    end       
end)
--定时上报属性
sys.taskInit(function()
	local topic = devdata_topic --上报的topic
    local temp=0    --温度属性值
    local data = "{\"method\":\"thing.service.property.set\",\"params\":{\"IndoorTemperature\":"..tostring(temp).."}}"
	local qos = 1
    local temp=0
    while true do
        sys.wait(5000)
        if mqtt_aliyun and mqtt_aliyun:ready() then
			-- mqtt_aliyun:subscribe(topic)
            local pkgid = mqtt_aliyun:publish(topic, data, qos)
            temp=temp+1
            data = "{\"method\":\"thing.service.property.set\",\"params\":{\"IndoorTemperature\":"..tostring(temp).."}}"
            print(data)
            -- 也可以通过sys.publish发布到指定task去
            -- sys.publish("mqtt_pub", topic, data, qos)
        end
    end
end)

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

3. 编译烧录

打开Luatools,点击项目管理按钮,选择下载好的固件(后缀名为soc的文件)和编写好的main.lua文件,勾选USB BOOT下载,点击下载底层和脚本按钮下载即可,具体操作流程如下图所示:
在这里插入图片描述
在这里插入图片描述

4. 运行结果

在这里插入图片描述
【注】命令下发通过设置设备属性实现,如下图
在这里插入图片描述

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

6.其他相关参考文章

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

【esp8266接入华为云物联网平台完成属性上报、命令处理】
【合宙Air780e+luatos接入华为云物联网平台完成设备通信与控制】

<think>好的,我现在需要帮助用户了解如何在阿里云物联网平台上集成亿百特4G模块。首先,我需要确认亿百特4G模块的型号是否支持阿里云物联网平台。用户提到的可能是类似Ebyte的E840系列,这些模块通常支持MQTT协议,适阿里云对接。 接下来,我应该参考现有的教程,比如引用[1]中的AIR724模块接入教程,虽然模块不同,但步骤可能有相似之处。例如,创建产品、添加设备、配置通信主题等流程是通用的。我需要将这些步骤适配到亿百特模块上。 然后,用户可能需要示例代码。由于亿百特模块通常使用AT指令,我需要提供连接阿里云所需的AT指令序列,包括连接网络、MQTT连接、订阅主题和发布消息的步骤。同时,要注意阿里云的三元组信息(ProductKey、DeviceName、DeviceSecret),这些是设备认证的关键。 另外,引用[2]提到的STM32设计案例可能涉及到硬件端的代码,但用户可能更关注模块本身的配置。需要确保提供的代码或指令亿百特模块兼容,并指导用户如何在阿里云控制台进行相关设置,比如物模型定义和数据解析脚本。 还需要考虑可能的问题,比如网络连接不稳定或证书配置错误,应该提醒用户检查这些方面。最后,生成相关问题,帮助用户进一步探索优化方法和故障排除。</think>### 阿里云物联网平台集成亿百特4G模块方法 亿百特(Ebyte)4G模块(如E840-DTU)阿里云物联网平台集成主要通过**MQTT协议**实现,需完成设备认证、主题订阅和数据通信三个核心步骤。以下是详细流程: --- #### 一、准备工作 1. **阿里云平台配置** - 登录[阿里云物联网平台控制台](https://iot.console.aliyun.com/),创建产品并定义物模型(如温度、湿度等属性)[^1]。 - 为设备生成**三元组信息**(ProductKey、DeviceName、DeviceSecret),用于设备身份认证。 2. **亿百特模块配置** - 通过串口工具(如AT指令)配置模块的APN、MQTT服务器地址(如`${YourProductKey}.iot-as-mqtt.${Region}.aliyuncs.com:1883`)及SSL证书(如需加密)[^2]。 --- #### 二、连接通信流程 1. **MQTT连接建立** 发送AT指令初始化MQTT连接,格式如下: ```python # 示例AT指令(需替换实际三元组) AT+MQTTCONN="ssl://${YourProductKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883",60,1,"${DeviceName}|${ProductKey}|","${ClientId}" ``` 2. **主题订阅发布** - 订阅设备属性上报主题: `$sys/${ProductKey}/${DeviceName}/thing/event/property/post` - 发布属性数据(JSON格式): ```json { "id": "123", "version": "1.0", "params": { "Temperature": 25.6, "Humidity": 60 } } ``` 3. **数据解析脚本(可选)** 在阿里云控制台配置**数据解析脚本**,将模块发送的原始数据转换为平台可识别的JSON格式。 --- #### 三、示例代码(AT指令序列) ```python # 配置APN(以中国移动为例) AT+CGDCONT=1,"IP","CMNET" # 连接MQTT服务器 AT+MQTTCONN="ssl://a1ABCD12345.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883",60,1,"device01|a1ABCD12345|","client123" # 订阅属性响应主题 AT+MQTTSUB="/sys/a1ABCD12345/device01/thing/event/property/post_reply",1 # 发布属性数据 AT+MQTTPUB="/sys/a1ABCD12345/device01/thing/event/property/post",1,1,'{"params":{"Temperature":25}}' ``` --- #### 四、注意事项 1. **安全认证**:一机一密模式下需使用`DeviceSecret`生成`ClientId`,算法参考阿里云官方文档。 2. **网络稳定性**:4G模块需保持信号强度≥-90dBm,避免频繁断连。 3. **数据格式**:物模型属性平台定义一致,否则会导致解析失败。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IOT趣制作

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值