玩转树莓派-加装温度传感器

编程/技术 更新时间: 2019-11-19 @ 09:38:06 创建时间: 2019-11-19 @ 08:06:03 浏览数: 46 净访问: 25 By: skyrover

本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议


树莓派吃灰许久,最近拿出来准备搞一个家庭智能中心,配合个人网站进行数据统计和展示。我的树莓派型号是3b+代型。

温度传感器是在淘宝买的DS18B20 测温模块,这块测温模块和单纯的DS18B20 传感器是有区别的,测温模块相当于温度传感器+电阻。另外还买了母对母的杜邦线,用于连接传感器和树莓派。

采集树莓派设备信息

在温度传感器到来之前,先做好树莓派和服务器之间的通信准备工作,顺便在每次上传数据的时候将树莓派设备本身的信息也采集出来并上传。设备本身数据比较重要的包括:内存使用量,内存使用率,CPU使用率,CPU温度,磁盘使用量,磁盘使用率。下面是相关代码:

def get_sys_info():
    cpu_pct = psutil.cpu_percent(interval=1)

    mem_info = psutil.virtual_memory()
    mem = mem_info.used / MB
    mem_pct = mem_info.percent

    disk_info = psutil.disk_usage('/')
    disk_used = disk_info.used / MB
    disk_pct = disk_info.percent

    # sensor
    sensor_temperature = psutil.sensors_temperatures()
    # {'bcm2835_thermal': [shwtemp(label='', current=31.634, high=None, critical=None)]}
    # 这块的型号每个人应该会不一样,按照实际情况来编码
    device_sensor = sensor_temperature.get('bcm2835_thermal')
    if device_sensor:
        cpu_temperature = device_sensor[0].current
    else:
        cpu_temperature = 0

    return {
        'cpu_pct': cpu_pct,
        'mem': mem,
        'mem_pct': mem_pct,
        'disk_pct': disk_pct,
        'disk_used': disk_used,
        'cpu_temperature': cpu_temperature
    }

温度传感器接线

双11的物流比平时慢了许多,等了好几天的温度传感器终于到了。安装并配置温度传感器很简单,我只花了5分钟吧。具体操作如下:

首先是接线,按照下面这个引脚图进行,温度传感器一共三个接头,分别是vcc, data, gnd分别代表电源正,数据线和接地,分别接到树莓派的引脚2,引脚4和引脚20(接地也可以到14和6等)

接好后通电,如下图:

温度传感器:

温度传感器配置和采集代码

下面进行配置以及构建采集代码

打开配置文件sudo vim /boot/config.txt 在最后面添加一行dtoverlay=w1-gpio-pullup,gpiopin=4,代表我们用引脚4进行采集数据。重启树莓派。

确认设备是否生效:

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

会显示28-00000494cb79 w1_bus_master1,前面的型号会因传感器不同而不同,打开它

cd 28-00000494cb79
cat w1_slave

会显示结果:

70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES
70 01 4b 46 7f ff 10 10 e1 t=23000

会看到t之后就是当前的温度23000/1000=23摄氏度

下面是采集代码:

def get_temperature():
    with open('/sys/bus/w1/devices/28-01144e0505aa/w1_slave') as open_file:
        try:
            text = open_file.read().strip()
            secondline = text.split("\n")[1]
            temperature_data = secondline.split(" ")[-1]
            temperature = float(temperature_data[2:])
            temperature = temperature / 1000
        except Exception as e:
            logging.exception(e)
            temperature = 0
        return temperature

运行一晚上之后,采集的温度如下面:

居然没变化。。我家的温度这么恒定吗?!


点赞走一波😏


评论

提交评论