跳转到主要内容

一个Python包和CLI工具,用于在Raspberry Pi、Beagle Bone和其他设备上与DS1822、DS18S20和DS18B20等w1温度传感器协同工作。

项目描述

W1ThermSensor

Gitter

通过单行代码获取您的w1热传感器温度!
它专为与Rasperry Pi硬件一起使用而设计,但也适用于Beagle Bone和其他设备。


CI PyPI version codecov.io Code style: black

Raspberry Pi:此软件包在Raspbian中作为python-w1thermsensorpython3-w1thermsensor提供。

Python 2弃用:所有从2.0版本开始的w1thermsensor发布都需要Python 3.5+

支持的设备

以下w1热传感器设备得到支持

  • DS18S20
  • DS1822
  • DS18B20
  • DS28EA00
  • DS1825/MAX31850K

设置

需要以下硬件

  • w1热兼容传感器(其中一些可以在以下地方购买: Adafruit: DS18B20
  • 连接传感器到您的板子的电线(您可能还需要一个面包板)
  • 类似于Raspberry Pi或Beagle Bone的板子

在Raspberry Pi上,您需要在/boot/config.txt文件中添加dtoverlay=w1-gpio(用于常规连接)或dtoverlay=w1-gpio,pullup="y"(用于寄生连接)。默认数据引脚是GPIO4(RaspPi连接器引脚7),但可以通过dtoverlay=w1-gpio,gpiopin=x从4更改为x

之后,别忘了重启。

硬件连接

Raspi VCC (3V3) Pin 1 -----------------------------   VCC    DS18B20
                                               |
                                               |
                                               R1 = 4k7 ...10k
                                               |
                                               |
Raspi GPIO 4    Pin 7 -----------------------------   Data   DS18B20
       (BCM)    (BOARD)

Raspi GND       Pin 6 -----------------------------   GND    DS18B20

软件上拉

除了在/boot/config.txt中通过物理电阻实现的硬件上拉,或者上述提到的软件配置dtoverlay=w1-gpio,pullup="y"之外,还可以使用以下软件上拉。

import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)

当使用此软件上拉时,1-Wire设备仅在程序将GPIO引脚上拉时才对内核可见。

硬件设备连接验证

运行以下命令

ls -l /sys/bus/w1/devices

您应该检查以"28-"开头的文件名的可用性。

以"00-"开头的文件名可能意味着缺少上拉电阻。

1-Wire设备可以动态插入,并在它们的硬件连接后立即对内核驱动程序可见。

要测试读取温度,请发出以下命令

for i in /sys/bus/w1/devices/28-*; do cat $i/w1_slave; done

安装

从PIP

此可能性支持所有发行版

pip install w1thermsensor

注意:可能需要root权限

使用async额外功能添加对asyncio和AsyncW1ThermSensor的支持

pip install w1thermsensor[async]

在Raspbian中使用apt-get

如果您在运行Raspbian的Raspberry Pi上使用w1thermsensor模块,您可以从官方仓库安装它

sudo apt-get install python3-w1thermsensor

注意:对于此软件包的旧版本,您可能会遇到以下错误:ImportError: No module named 'pkg_resources',这表明您需要分别安装python-setuptoolspython3-setuptools

手动构建和安装deb包

debuild -us -uc
dpkg -i ../python3-w1thermsensor_*.deb

作为Python包的使用

使用非常简单,接口简洁。所有示例都使用DS18B20传感器 - 它对其他支持设备以相同的方式工作。

单个传感器的基本使用(隐式)

from w1thermsensor import W1ThermSensor, Unit

sensor = W1ThermSensor()
temperature_in_celsius = sensor.get_temperature()
temperature_in_fahrenheit = sensor.get_temperature(Unit.DEGREES_F)
temperature_in_all_units = sensor.get_temperatures([
    Unit.DEGREES_C,
    Unit.DEGREES_F,
    Unit.KELVIN])

所需内核模块将在W1ThermSensor类的构造函数中自动加载。
如果出现问题,将引发异常。

将采用找到的第一个传感器

单个传感器的基本使用(显式)

将采用ID为00000588806a的DS18B20传感器。

from w1thermsensor import W1ThermSensor, Sensor

sensor = W1ThermSensor(sensor_type=Sensor.DS18B20, sensor_id="00000588806a")
temperature_in_celsius = sensor.get_temperature()

多个传感器

使用get_available_sensors类方法,您可以获取所有可用传感器的ID。

from w1thermsensor import W1ThermSensor

for sensor in W1ThermSensor.get_available_sensors():
    print("Sensor %s has temperature %.2f" % (sensor.id, sensor.get_temperature()))

特定热传感器类型的传感器

from w1thermsensor import W1ThermSensor, Sensor

for sensor in W1ThermSensor.get_available_sensors([Sensor.DS18B20]):
    print("Sensor %s has temperature %.2f" % (sensor.id, sensor.get_temperature()))

设置传感器分辨率

一些w1热传感器支持更改温度读取的分辨率。w1thermsensor通过W1ThermSensor.set_resolution()方法启用此操作

sensor = W1ThermSensor(sensor_type=Sensor.DS18B20, sensor_id="00000588806a")
sensor.set_resolution(9)

如果将persist参数设置为False,则此值“仅”存储在易失性SRAM中,因此当传感器断电时会被重置。

如果将persist参数设置为True,则当前设置的分辨率将存储到EEPROM中。由于EEPROM的写入次数有限(>50k),应谨慎使用此命令。

sensor = W1ThermSensor(sensor_type=Sensor.DS18B20, sensor_id="00000588806a")
sensor.set_resolution(9, persist=True)

注意:此功能从Linux内核4.7版本开始支持
注意:此功能需要root权限

禁用内核模块自动加载

在导入w1thermsensor包时,w1-thermw1-gpio内核模块将自动加载。这要求python进程以root身份运行。有时您可能不希望这样做,因此您可以禁用自动加载,并在使用w1thermsensor与传感器通信之前自己加载内核模块。

您可以通过将W1THERMSENSOR_NO_KERNEL_MODULE环境变量设置为1来禁用自动加载功能

# set it globally for your shell so that sub-processes will inherit it.
export W1THERMSENSOR_NO_KERNEL_MODULE=1

# set it just for your Python process
W1THERMSENSOR_NO_KERNEL_MODULE=1 python my_awesome_thermsensor_script.py

分配给W1THERMSENSOR_NO_KERNEL_MODULE的任何其他值都将导致w1thermsensor加载内核模块。

注意:上述示例也适用于CLI工具的使用。见下文。

校正温度/传感器校准

校准温度传感器的原理是获取已知的测量高值和测量低值,这些值可以用作纠正传感器的读数。最简单的方法是测量水的熔点和沸点,因为这些值是已知的。这种方法仅适用于防水传感器 - 如果您不使用防水传感器,则需要不同的机制来获取测量值。

为了获取 measured_low_point,将容器装满80%的冰,并向冰中加水,直到冰漂浮且水在表面。将您的传感器浸入冰水中,确保它不接触容器。等待5分钟,使容器中的温度稳定,然后当传感器的读数稳定约30秒(读数保持一致)时,将该值记录为 measured_low_point

为了获取 measured_high_point,将一壶水煮沸。将您的传感器放入沸水中,确保它不接触壶。允许传感器升温并稳定,一旦它稳定约30秒(读数保持一致),将该值记录为 measured_high_point

一般来说,reference_low_point 应该保持在0.0,除非您有特殊情况改变水的熔点。因为熔化不涉及气相变化,所以气压和海拔对熔点的影响很小。

另一方面,reference_high_point 受大气压(因此海拔)影响很大。例如,海平面的水沸点为100.0°C,而在珠穆朗玛峰顶峰(海拔8848米)的水沸点约为72°C。虽然气压实际上决定了沸点,但一般来说,海拔对于大多数用例来说是一个足够接近的近似值。《工程工具箱》(Engineering Toolbox)有一个页面提供了不同海拔的水沸点。

此方法来自 本指导

from w1thermsensor.calibration_data import CalibrationData
from w1thermsensor import W1ThermSensor, Unit

calibration_data = CalibrationData(
        measured_high_point=measured_high_point,
        measured_low_point=measured_low_point,
        reference_high_point=reference_high_point,
        reference_low_point=reference_low_point, # optional, defaults to 0.0
    )
sensor = W1ThermSensor(calibration_data=calibration_data)

corrected_temperature_in_celsius = sensor.get_corrected_temperature()
corrected_temperature_in_fahrenheit = sensor.get_corrected_temperature(Unit.DEGREES_F)
corrected_temperature_in_all_units = sensor.get_corrected_temperatures([
    Unit.DEGREES_C,
    Unit.DEGREES_F,
    Unit.KELVIN])

异步接口

为了支持asyncio,w1thermsensor 包实现了一个异步接口 AsyncW1ThermSensor

支持以下方法

  • get_temperature()
  • get_temperatures()
  • get_resolution()

例如

from w1thermsensor import AsyncW1ThermSensor, Unit

sensor = AsyncW1ThermSensor()
temperature_in_celsius = await sensor.get_temperature()
temperature_in_fahrenheit = await sensor.get_temperature(Unit.DEGREES_F)
temperature_in_all_units = await sensor.get_temperatures([
    Unit.DEGREES_C,
    Unit.DEGREES_F,
    Unit.KELVIN])

作为CLI工具使用

从版本 0.3.0 开始,w1thermsensor 模块可以用作CLI工具。
请注意,CLI工具将与 Raspbian Python 3 软件包一起安装sudo apt-get install python3-w1thermsensor

列出传感器

列出所有可用的传感器

$ w1thermsensor ls
$ w1thermsensor ls --json  # show results in JSON format

仅列出特定类型的传感器

$ w1thermsensor ls --type DS1822
$ w1thermsensor ls --type DS1822 --type MAX31850K  # specify multiple sensor types
$ w1thermsensor ls --type DS1822 --json  # show results in JSON format

显示温度

显示所有可用传感器的温度:(与 ls 具有相同的摘要)

$ w1thermsensor all --type DS1822
$ w1thermsensor all --type DS1822 --type MAX31850K  # specify multiple sensor types
$ w1thermsensor all --type DS1822 --json  # show results in JSON format

显示单个传感器的温度

$ w1thermsensor get 1  # 1 is the id obtained by the ls command
$ w1thermsensor get --hwid 00000588806a --type DS18B20
$ w1thermsensor get 1  # show results in JSON format

显示给定分辨率的单个传感器的温度

$ w1thermsensor get 1 --resolution 10
$ w1thermsensor get --hwid 00000588806a --type DS18B20 --resolution 11

更改温度读数分辨率并将其写入EEPROM

# w1thermsensor resolution 10 1
# w1thermsensor resolution --hwid 00000588806a --type DS18B20 11

注意:此功能需要root权限

贡献

我非常欢迎对这个项目的一切类型贡献! :beers


本项目发布在 MIT 许可下。
Timo Furrer 项目。
- :tada: -

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

w1thermsensor-2.3.0.tar.gz (36.9 kB 查看哈希值)

上传时间

构建分发

w1thermsensor-2.3.0-py2.py3-none-any.whl (22.1 kB 查看哈希值)

上传时间 Python 2 Python 3

支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面