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
(1)在AEP控制台创建产品(MQTT透传模式接入)
创建产品的参数可参考下图:
(2)在上一步创建好的产品中的《设备管理》中添加一台设备
创建每台设备时注意保持“设备编号”的唯一性,例如下图中的设备编号为 “DTU01”
(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}
实际截图如下: