综合实验

实验简介

  随着农业物联网技术的不断发展,日光温室的智能化程度越来越高,将智能终端系统嵌入到温室大棚的监控中已经成为未来发展的一种趋势。
  实验要求基于中国移动免费开放的物联网云平台 OneNET,研发了一个智能监控系统,采用STM32单片机为主控芯片搭建硬件系统并完成软件设计,使用 OneNET 云平台实时监控现场。
  用户通过登录云平台可以随时随地观察温室内的环境数据,根据植物生长要求下发命令实现远程控制。管理人员还可以以扫描二维码的方式,在云平台上查询历史数据,实现追溯功能。
①根据温室大棚的环境因素与功能要求,设计以 STM32 单片机为核心的硬件系统;
②采用 ESP8266 模块实现传感器数据与 OneNET 云平台的无线通信,实现终端采集和测量;
③云平台进行命令下发,通过 STM32 接收命令、继电器执行来远程控制现场设备,根据植物生长需要设定上下限阈值实现自动控温功能;
④管理人员使用 PC 机网页、手机 APP 或者扫描二维码的方式登录到云平台上进行历史数据、设备在线状态、多个设备管理操作,根据环境数据分析农作物生长情况,实现生 长数据追溯。


实验内容

1、由于时间有限,不要求大家搭建硬件系统并编写相应软件;
2、仅要求大家按照OneNET云平台的数据格式要求编写几组大棚温湿度数据,并采用一定的通信方式将数据上传到云平台;

OneNET 云平台与其他物联网的不同之处在于,该平台提供了个性化的人机交互界面,通过 OneNET 应用编辑器,用户可以方便快捷地实现 OneNET 平台上的设备元件可视化,直接拖拽元件进行画面的组态。简化了整个设计过程。平台包括了基础元件和控制元件。基础元件只是监测设备的数据流,不能下发指令,如仪表盘和柱状图等;控制元件在监测数据流的同时还可以对设备下达指令。应用编辑器同时可以设置多个页面,各个页面之间是相互独立的,而且支持手机页面编辑,可以与 PC 机网页实时进行切换。

3、实现追溯功能,主要包括历史数据的查看和统计,并将二维码技术应用到云平台上,用户通过扫描二维码访问云平台获取温室环境的历史数据,根据环境的变化程度采取相应的措施,实现生长环境的追溯;
4、将云平台查询历史数据的地址写入二维码中,用户登录自己的账号便可以扫描二维码查看环境历史数据。


实验过程

本次通过AD64软件通过Python脚本配合OneNET平台实现对计算机CPU温度的监控

1、注册OneNET平台 平台网址:https://open.iot.10086.cn/

OneNET注册平台

2、在多协议接入添加HTTP产品

OneNET平台

3、进入设备列表后添加一个新设备

OneNET平台

4、在设备中创建一个APIKey;记录自己的设备ID和APIKey用于数据的交互
5、本次获取电脑cpu和cpu核心温度并绘制曲线图;
6、电脑温度采用aida64软件获得并写入注册表中;

AD64软件

7、编写python程序从注册表获取温度并发送给OneNET(具体代码见附录);

Python程序

8、返回OnENET后台管理在应用管理中创建应用

平台可视化编辑

9、提交发布,通过审核后即可在线查看

附录代码

#导入所用的库
import urllib.request
import json
import time
from time import sleep
import os, winreg
#设备ID
deviceId = "你的设备ID号"
APIKey = "你的APIKey"

#从AD64获取温度值
def query():
    if os.name != "nt":
        pass
    db = {}
    with winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Software\\FinalWire\\AIDA64\\SensorValues") as key:
        for i in range(winreg.QueryInfoKey(key)[1]):
            name, data, _type = winreg.EnumValue(key, i)
            attr = name.split(".")
            if (attr[0] == "Label"):
                db[attr[1]] = {}
                db[attr[1]]["label"] = data
            else:
                db[attr[1]]["value"] = data
    return db

#上传函数
def http_put_data(data1,data2,data3):
    url = "http://api.heclouds.com/devices/" + deviceId + '/datapoints'
    d = time.strftime('%Y-%m-%dT%H:%M:%S')

    values = {"datastreams": [ {"id": "temperature", "datapoints": [{"value": data1}]},
                               {"id": "cpu_01", "datapoints": [{"value": data2}]},
                               {"id": "cpu_02", "datapoints": [{"value": data3}]}]}

    jdata = json.dumps(values).encode("utf-8")
    request = urllib.request.Request(url, jdata)
    request.add_header('api-key', APIKey)
    request.get_method = lambda: 'POST'
    request = urllib.request.urlopen(request)
    return request.read()


if __name__ == '__main__':
    while(1):
        a = query()
        date_cpu = int(a["TCPUPKG"]["value"])
        date_cpu_01 = int(a["TCC-1-1"]["value"])
        date3_cpu_02 = int(a["TCC-1-2"]["value"])
        R = http_put_data(date_cpu,date_cpu_01,date3_cpu_02)
        print(R)
        time.sleep(3)

实验展示

点击查看