传感器数据上报
在小鹏AIoT系统中,约定“数据发布主题”为设备端向物联网系统推送数据的端点。
数据上报的流程大致如下:
1. 设备端按一个频率读取传感器的数据(如每分钟获取1次);
2. 创建一个格式正确的数据包;
3. 向这个设备的“数据发布主题”推送数据包;
数据上报的流程大致如下:
1. 设备端按一个频率读取传感器的数据(如每分钟获取1次);
2. 创建一个格式正确的数据包;
3. 向这个设备的“数据发布主题”推送数据包;
示例程序
下面给出DHT11温湿传感器上报数据的示例程序:(请参考"设备端接入(ESP32)"小节让设备能正确接入)
###################################
# 温度数据上报小鹏AIoT系统
# author: billy_zh@126.com
###################################
import wifi
import mqtt
import json
import random
import time
import dht
from machine import ADC, Pin
# 温度数据上报主题
PUB_TOPIC = b'user/******/data'
# 定义dht11
dht11 = dht.DHT11(Pin(2))
# wifi 连接
wifi.connect()
# mqtt 连接
mqtt_client = mqtt.connect()
####################
# 读取温度数据并上报
####################
def read_and_publish():
t = time.localtime()
dht11.measure()
temp = dht11.temperature()
if temp==None:
print("DHT11传感器检测失败!")
return
msg_dict = {
'id': 't{year}{month}{day}{id}'.format(year=t[0],month=t[1],day=t[2],id=random.randint(100000, 999999)),
'data': {'temp':value}
}
msg = json.dumps(msg_dict)
mqtt_client.publish(PUB_TOPIC, msg)
print('消息已发送到{topic}, data:{data}'.format(topic=PUB_TOPIC.decode(), data=value))
if __name__ == "__main__":
time.sleep(1) #首次启动等1s让传感器稳定下来
####################
# 主循环
####################
while True:
try:
read_and_publish()
time.sleep(300) #休眠5分钟后再次测量
except Exception as e:
print(f"消息发送出现错误:{e}")
mqtt_client = mqtt.connect()
数据包格式
小鹏AIoT系统上报数据包采用JSON格式,支持一般数据和图片数据,一般数据格式如下:
{
"id": "abc123",
"data": {
"name1": value1,
"name2": value2,
...
}
}
其中:
id为数据包的唯一字符串值,每次上报新数据时必须给不一样的值。对于同一id的数据包,系统只处理一次,本例中是年月日+6位随机数据;
data中包含要上报的数据,可以包含多个数据,以name:value形式给出即可,数据值可以是数字和字符,本例中是数字,形如: “temp":25;
数据发布主题
在设备详情页,可以查看设备的数据发布主题
查看上报的数据
进入设备详情页,点击”数据“标签,即可看到上报的数据