上传温湿度数据

更新时间:

本文介绍通过为树莓派主板增加一个温湿度传感器,实现Raspberry Pi 4计算机在服务器机房中搜集环境数据。

前提条件

已完成物模型定义。详细内容请参见为温湿度传感器定义物模型

硬件连接

  1. 准备DHT11传感器设备。

    传感器
  2. 将传感器接入到树莓派的主板。

    传感器拥有四个引脚,从左往右依次是VCC供电、数据、空、GND负极。由于数据脚需要上拉电平支持,所以我们需要使用一个额外的10 KΩ电阻连接VCC与数据管脚,具体连接如下图。线路展示

    接入后的效果图如下所示。效果展示

安装依赖程序

传感器的数据传递功能需要安装依赖程序开启。

  1. 在命令窗口执行以下命令,完成程序安装。

    cd /home/pi/Desktop
    sudo apt update
    sudo apt install git
    git clone https://github.com/adafruit/Adafruit_Python_DHT.git
    cd Adafruit_Python_DHT
    sudo python3 setup.py install
    cd /
  2. 继续执行以下命令,测试传感器是否已经工作正常。

    python3
    import Adafruit_DHT
    humidity, temperature = Adafruit_DHT.read_retry(11, 4)
    humidity,temperature

    如果传感器连接并且工作正常,会返回正确的温度与湿度数据。返回数据

修改和验证源码程序

您需要修改树莓派计算机的源码程序文件,将新属性(机房温度、机房湿度)数据添加到协议字段中。

  1. 修改源码程序文件run.py

    程序文件run.py的修改方法请参见将树莓派接入物联网平台

    说明

    不需要重新下载源码压缩包,直接修改已下载解压的程序文件即可。

    请对比以下内容修改run.py文件并保存。

    #!/usr/bin/python3
    
    import aliLink,mqttd,rpi
    import time,json
    import Adafruit_DHT
    
    
    # 三元素(iot后台获取)
    ProductKey = '***'
    DeviceName = 'raspberrypi4-******'
    DeviceSecret = "assef***"
    # topic (iot后台获取)
    POST = '/sys/***/raspberrypi4-***/thing/event/property/post'  # 上报消息到云
    POST_REPLY = '/sys/***/raspberrypi4-***/thing/event/property/post_reply'
    SET = '/sys/***/raspberrypi4-***/thing/service/property/set'  # 订阅云端指令
    
    
    # 消息回调(云端下发消息的回调函数)
    def on_message(client, userdata, msg):
        # print(msg.payload)
        Msg = json.loads(msg.payload)
        switch = Msg['params']['PowerLed']
        rpi.powerLed(switch)
        print(msg.payload)  # 开关值
    
    # 连接回调(与阿里云建立链接后的回调函数)
    def on_connect(client, userdata, flags, rc):
        pass
    
    # 链接信息
    Server, ClientId, userNmae, Password = aliLink.linkiot(DeviceName, ProductKey, DeviceSecret)
    
    # mqtt链接
    mqtt = mqttd.MQTT(Server, ClientId, userNmae, Password)
    mqtt.subscribe(SET)   # 订阅服务器下发消息topic
    mqtt.begin(on_message, on_connect)
    
    
    # 信息获取上报,每10秒钟上报一次系统参数
    while True:
        time.sleep(10)
        # 获取指示灯状态
        power_stats = int(rpi.getLed())
        if(power_stats == 0):
            power_LED = 0
        else:
            power_LED = 1
    
        # CPU 信息
        CPU_temp = float(rpi.getCPUtemperature())  # 温度   ℃
        CPU_usage = float(rpi.getCPUuse())         # 占用率 %
    
        # RAM 信息
        RAM_stats = rpi.getRAMinfo()
        RAM_total = round(int(RAM_stats[0]) / 1000, 1)
        RAM_used = round(int(RAM_stats[1]) / 1000, 1)
        RAM_free = round(int(RAM_stats[2]) / 1000, 1)
    
        # Disk 信息
        DISK_stats = rpi.getDiskSpace()
        DISK_total = float(DISK_stats[0][:-1])
        DISK_used = float(DISK_stats[1][:-1])
        DISK_perc = float(DISK_stats[3][:-1])
    
        # 获取传感器信息
        humidity, temperature = Adafruit_DHT.read_retry(11, 4)
        # 构建与云端模型一致的消息结构
        updateMsn = {
            'cpu_temperature': CPU_temp,
            'cpu_usage': CPU_usage,
            'RAM_total': RAM_total,
            'RAM_used': RAM_used,
            'RAM_free': RAM_free,
            'DISK_total': DISK_total,
            'DISK_used_space': DISK_used,
            'DISK_used_percentage': DISK_perc,
            'PowerLed': power_LED,
            'temperature': temperature,
            'humidity': humidity
        }
        JsonUpdataMsn = aliLink.Alink(updateMsn)
        print(JsonUpdataMsn)
    
        mqtt.push(POST, JsonUpdataMsn)   # 定时向阿里云IOT推送我们构建好的Alink协议数据
    
  2. 重启服务。

    在命令行窗口执行以下命令。

    cd /home/pi/Desktop/code/
    python3 run.py

    数据结果如图所示。数据

  3. 在IoT平台查询上报的数据。

    前往设备详情页,单击物模型数据 > 运行状态,查看新增的机房温度和湿度数据。运行状态

后续步骤

开发数据服务API