NBIOT MQTT接入ONE NET云平台
-
- 一、本例程实现功能介绍
- 三、硬件接线图、材料清单
- 四、完整代码&代码解析
前言:MQTT是一种基于TCP物联网通信协议广泛应用于物联网领域,基本上所有云平台都支持设备MQTT协议访问,所以如果您的设备支持MQTT连接可以轻松连接各云平台(如ONE NET、阿里云、腾讯云等)。CORE提供的MQTT库函数也很简单,您只需按照云平台的规则调用MQTT对传入参数进行相应调整后,库函数可与各云平台对接。
一、本例程实现功能介绍
CORE向云端(ONE NET)上传温湿度数据,接受云下发的命令数据控制CORE电路板上LED2灯的亮灭。
三、硬件接线图、材料清单
四、完整代码&代码解析
代码功能:CORE每5秒到云端(ONE NET)上传温湿度数据,接受云下发的数据控制CORE电路板上LED2灯的亮灭。
--MQTT服务器地址(适用于ONE NET平台) server_addr = "183.230.40.96" --OneNet服务器ip地址,也可以写成"mqtts.heclouds.com"(推荐) server_port = 1883 --MQTT 连接参数(适用于ONE NET平台) mqtt_con_clientID = "TestDevice001" mqtt_con_username = "353255" mqtt_con_password = "version=2018-10-31&res=products/353255/devices/TestDevice001&et=1893427200&method=md5&sign=/5RJwGwytPWvVDB04K7rnw==" --MQTT topic相关参数(适用于ONE NET平台) mqtt_sub_topic = "$sys/353255/TestDevice001/cmd/request/ "--订阅用 mqtt_pub_topic = "$sys/353255/TestDevice001/dp/post/json" --发布用 --设置m5311 NB模块占用TX0、RX0、D5、D6引脚,MQTT模式 --KeepAlive周期180秒 LIB_NbMqttM5311Config("UART0","D5","HIGH","D6","HIGH",server_addr,server_port,mqtt_con_clientID,mqtt_con_username,mqtt_con_password,180,mqtt_sub_topic,"QOS0") --配置D9为普通输出,控制LED2 LIB_GpioOutputConfig("D9","STANDARD") --使能系统10毫秒定时器开始工作 LIB_10msTimerConfig("ENABLE") --设置sht3x
传感器占用SCL0和SDA0引脚,每秒出来10数据频率工作,"HIGH"表示最高精度 LIB_Sht3xConfig("IIC0","10","HIGH") --变量初始化 cnt_10ms = 0 cnt1_10ms = 0pub_id = 0 temprature = 0.00 humidity = 0.00 --定义10ms中断回调函数 function LIB_10msTimerCallback() cnt_10ms = cnt_10ms + 1 cnt1_10ms = cnt1_10ms + 1 end --开始大循环 while(GC(1) == true) do sht3x_flag,temp,humi = LIB_Sht3xGetResult() --如果传感器有新的温湿度数据产生 if sht3x_flag == 1 then temprature = temp humidity = humi end --查询是否收到服务器下发的cmd数据(已订阅的"$sys/353255/TestDevice001/cmd/request/+") recv_flag,topic,data = LIB_NbMqttM5311RecvSub() if recv_flag == 1 then --根据json路径"$.LED"解析服务器下发的json文本,并执行LED亮灭操作 Json_Val = LIB_JsonParse(data, "$.LED") --服务器下发的是"{"LED":0}" if Json_Val == "0" then LIB_GpioWrite("D9",1) --LED2灭 --服务器下发的是"{"LED":1}" elseif Json_Val == "1" then LIB_GpioWrite("D9",0) --LED2亮 --服务器下发的是"{"LED":2}" elseif Json_Val == "2" then LIB_GpioToggle("D9") --LED2亮灭切换 else LIB_GpioWrite("D9",1) --LED2灭 end --根据收到的topic中的cmdid应答服务器, --将收到的topic中"request"替换成"response"后作为应答topic发给服务器 topic = string.gsub(topic,"request","response") --应答内容可自定义,这里为"Got it!" LIB_NbMqttM5311SendPub("QOS0", topic, "Got it!") end --每5秒发送温湿度度数据给server if cnt_10ms >= 500 then cnt_10ms = 0 pub_id = pub_id + 1 json_str = string.format("{\"id\":%d, \"dp\":{\"temperatrue\":[{\"v\": %.2f,}], \"humidity\":[{\"v\":%.2f,}]}}", pub_id, temprature, humidity) --注意json_str的总长度不要超过150字节 LIB_NbMqttM5311SendPub("QOS0", mqtt_pub_topic, json_str) --publish end --每12秒打印一次NBIOT模组信息(包含sim卡) --注意:这里只是为了演示如何获取模组信息,实际应用中您可以根据您的需求查询即可,不需要一直查询 if cnt1_10ms >= 1200 then --12000ms cnt1_10ms = 0 State,IMEI,IMSI,ICCID,RSSI = LIB_NbStatusQuery() print(string.format("module state: %s", State)) print(string.format("module IMEI: %s", IMEI)) print(string.format("module IMSI: %s", IMSI)) print(string.format("module ICCID: %s", ICCID)) print(string.format("module RSSI: %d dBM", RSSI)) end end
点击此处查看详细内容代码详解