本文介绍如何为树莓派主板增加一个温湿度传感器,用于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平台查询上报的数据。
    前往设备详情页,单击物模型数据 > 运行状态,查看新增的机房温度和湿度数据。运行状态

后续步骤

数据分析