跳到主要内容

Mqtt 接入天翼云(CTwing)

一、实现目标

通过 SB-C17 4G 模组(EC800) Mqtt 接入 CTwing 天翼云,并将设备唯一ID、传感器数据(温湿度)信息以 Json 形式发给云服务器。Json 消息形式举例如下(以温湿度传感器为例):

{"id":"Test01","Temperature":25.2, "Humidity":76.7}

二、源代码

----------------------配置信息开始----------------------
--MQTT参数
MqttServerAddr = "mqtt.ctwing.cn" --天翼云MQTT服务器ip地址或域名
MqttServerPort = 1883 --MQTT服务器端口号
MqttClientID = "15589964DTU01" --产品ID"15589964" + 设备编号"DTU01"
MqttUserName = "ShineBlink" --建议填写为用户自己的天翼物联网平台(AIoT)用户名
MqttPassword = "lMmugH2yURmY2uJqkNby-zQHGJ67ngjMAYR6kkGQmko" --采用的一型一密,特征串
MqttSubTopic = "device_control"--订阅用,用于接收服务器下发的数据
MqttPubTopic = "$device_send" --发布用,用于向服务器发送数据
----------------------配置信息结束----------------------

--全局变量
t = 0.0
h = 0.0

--定义10毫秒定时器的回调函数,函数名字必须是LIB_10msTimerCallback
function LIB_10msTimerCallback()
timer0 = timer0 + 10
timer1 = timer1 + 10
timer2 = timer2 + 10
end

--延时N秒函数
function DelayS(N)
timer2 = 0
target_ms = N*1000
while timer2 <= target_ms do

end
end

---------------------系统初始化开始-----------------------
--LIB_SystemLogEnable() --需要看详细log.txt日志时才用
UID = "Test01" --设备唯一ID,也可以自己定义,也可以用芯片唯一ID,比如UID = LIB_GetSysUniID()
--配置绿色LED的GPIO为输出(D9)
LIB_GpioOutputConfig("D9","STANDARD")
--设置sht3x传感器占用SCL0和SDA0引脚,并启动传感器以10Hz工作,选择最高精度
LIB_Sht3xConfig("IIC0","10","HIGH")
--设置0.96寸oled模块占用SCL1和SDA1引脚
LIB_0_96_OledConfig("IIC1")
--设置4G模块占用TX0、RX0、D5、D6引脚,MQTT模式,KeepAlive周期180秒,不开启GPS功能
LIB_Cat1MqttEC800Config("UART0","D5","HIGH","D6","HIGH",MqttServerAddr,MqttServerPort,MqttClientID,MqttUserName,MqttPassword,180,MqttSubTopic,"QOS0","NO_GPS")
--传感器前的预热时间(2秒)
DelayS(2)
--使能系统10毫秒定时器开始工作
timer0 = 0
timer1 = 0
timer2 = 0
LIB_10msTimerConfig("ENABLE")
---------------------系统初始化结束-----------------------

--开始大循环
while(GC(1) == true)
do
--查询sht3x传感器是否出数
sht3x_flag,sht3x_temp,sht3x_humi = LIB_Sht3xGetResult()
--如果传感器有新的温湿度数据就显示并更新t和h值
if sht3x_flag == 1 then
--在oled的第一行和第二行分别显示温度(摄氏度)和湿度(百分比)
LIB_0_96_OledPuts("1","1",string.format("temprature: %.2f", sht3x_temp))
LIB_0_96_OledPuts("2","1",string.format("humidity: %.2f", sht3x_humi))
t = sht3x_temp
h = sht3x_humi
end

--每隔1秒读取一次4G状态信息
if timer1 >= 1000 then
timer1 = 0
State,IMSI,ICCID,CSQ = LIB_Cat1StatusQuery()
if State == "Connected" then
LIB_GpioWrite("D9", 0) --4G模块已和服务器建立连接,绿灯亮
else
LIB_GpioWrite("D9", 1) --4G模块未和服务器建立连接,绿灯灭
end
end

--每隔5秒向服务器上传一串json字符串,包含C2M自身唯一ID,以及温湿度数据
if timer0 >= 5000 then
timer0 = 0
json_str = string.format("{\"id\":%s, \"Temperature\":%.2f, \"Humidity\":%.2f}", UID, t, h)
LIB_Cat1MqttEC800SendPub("QOS0", MqttPubTopic, json_str)
end

end

三、设备接入云指导

天翼云MQTT官方教程:https://www.ctwing.cn/sbjr/39#see

天翼云入口:https://www.ctwing.cn/,进入后在屏幕右上角点击进入“控制台”。

(1)在AEP控制台创建产品(MQTT透传模式接入)

​ 创建产品的参数可参考下图:

CtwingProductDetails

(2)在上一步创建好的产品中的《设备管理》中添加一台设备

​ 创建每台设备时注意保持“设备编号”的唯一性,例如下图中的设备编号为 “DTU01”

CtwingDeviceDetails

(3)设备参数配置

​ 在天翼云后台添加好设备之后,用 USB Type-C 数据线来配置设备的参数。

​ 下面仅列出和 Mqtt 接入天翼云相关的参数:

--Part3: MQTT参数(SysMode=1时才有用)
MqttServerAddr = "mqtt.ctwing.cn" --天翼云MQTT服务器ip地址或域名
MqttServerPort = 1883 --MQTT服务器端口号
MqttClientID = "15589964DTU01" --产品ID"15589964" + 设备编号"DTU01"
MqttUserName = "ShineBlink" --建议填写为用户自己的天翼物联网平台(AIoT)用户名
MqttPassword = "lMmugH2yURmY2uJqkNby-zQHGJ67ngjMAYR6kkGQmko" --采用的一型一密,特征串
MqttSubTopic = "device_control"--订阅用,用于接收服务器下发的数据
MqttPubTopic = "$device_send" --发布用,用于向服务器发送数据

注意:[MqttClientID] 和 [MqttPassword] 一定要是你的设备 ID 和特征串,不要照抄上面的。

四、上电测试

给设备上电后,等待设备绿灯亮了之后表示设备已接入天翼云,接下来每隔一段时间,在天翼云后台的数据查看里可以看到设备上发的 Json 数据,形式如下:

{"Uid":"Test01","Temperature":25.2, "Humidity":76.7}

实际截图如下:

pic1