传感器数据上报


在小鹏AIoT系统中,约定“数据发布主题”为设备端向物联网系统推送数据的端点。
数据上报的流程大致如下:
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;

数据发布主题

在设备详情页,可以查看设备的数据发布主题

传感器数据上报

查看上报的数据

进入设备详情页,点击”数据“标签,即可看到上报的数据

传感器数据上报