从 misc 读取温度数据。具有最小依赖性的“TEMPer”设备
项目描述
脾气.py
PCsensor 销售的 USB 温度和温度/湿度传感器可从母网站 ( http://pcsensor.com/usb-temperature-humidity.html )、亚马逊和 EBay 广泛购买。
设计
有几个支持这些传感器的开源软件项目,有时包括复杂的监控和绘图软件。与这些项目不同的是,该项目的目标是简单地从传感器读取数据而不做任何其他事情,考虑到以下约束:
- 必须在Linux下工作,
- 必须使用 Python 3,
- 尽可能避免使用第三方软件,
- 所有第三方软件必须作为标准 Debian 软件包提供。
未使用 libusb
我尝试使用 libusb (apt-get install python3-usb; "import usb.core"),它为 USB 设备提供了一个非常好的接口。不幸的是,我有一个温度计不适用于原始 USB,并且需要通过 hidraw 设备访问;我有另一个温度计,它有一个未记录的 HID 协议,但可以通过串行 tty 访问。
不使用 hid 和 hidapi
我尝试使用 hid (apt-get install python3-hid) 和 hidapi (apt-get install python3-hidapi),这些对于我拥有的两个温度计都可以正常工作,但对于需要通过串行 tty 访问的温度计则不行。
使用 pySerial
虽然直接访问 HID 设备,但 pySerial 用于 TTY。该模块作为 Debian 软件包提供:sudo apt-get install python3-serial
支持的设备
我拥有五种来自 PCsensors 的设备。这些都由 temp.py 支持。
在下表中,“I”表示传感器位于 U 盘内部,“E”表示传感器位于插入 U 盘的电缆上。
产品 | ID | 固件 | 温度 | 哼 | 笔记 |
---|---|---|---|---|---|
脾气 | 0c45:7401 | TEMPerF1.4 | 我 | 金属 | |
脾气 | 413d:2107 | TEMPerGold_V3.1 | 我 | 金属 | |
温度 | 413d:2107 | TEMPerX_V3.1 | 我 | 我 | 白色塑料 |
温度2 | 413d:2107 | TEMPerX_V3.3 | IE | 白色塑料 | |
TEMPer1F | 413d:2107 | TEMPerX_V3.3 | 乙 | 白色塑料 | |
TEMPerX232 | 1a86:5523 | TEMPerX232_V2.0 | IE | 我 | 白色塑料 |
TEMPer1V1.1 | 0c45:7401 | TEMPer1F1.1Per1F | 乙 | 金属 |
1a86:5523 设备可能会识别为 413d:2107,具体取决于按钮按下,但在该模式下无法成功使用。
如果您尝试使用其他使用 libusb 的软件,则 hidraw 设备可能会断开连接。在这种情况下,请移除并重新插入 U 盘。
TEMPer1F 只有一个外部传感器,但无法检测到它是外部的,因此报告为内部温度。
脾气
这是一个金属 U 盘,标有“TEMPer”,一侧带有温度计标志,另一侧带有“TEMPer”。USB 连接器对面的一端有一个螺丝孔。没有湿度检测器,但它看起来是防水的,我已经将我的暂时浸入冰水和沸水中。
温度
这是一个白色塑料 U 盘,标有“TEMPerHUM”、“-40C - +85C”和“0-100%RH”;带有标记为“TXT”的蓝色按钮。反面是“PCsensor”。该型号末端没有插孔。
按下按钮时,红色 LED 将闪烁,同时发送以下样式的消息(温度线每秒重复一次)。
www.pcsensor.com
temperx v3.1
caps lock:on/off/++
num lock:off/on/--
type:inner-h2
inner-temperinner-humidityinterval
32.73 [c]36.82 [%rh]1s
再次按下按钮时,LED 将熄灭或呈红色常亮。这是 temp.py 使用的模式。
温度2
物理描述:白色塑料U盘标有“TEMPer2”、“-40C - +125C”;带有标记为“TXT”的红色按钮。反面是“PCsensor”。该型号的末端有一个用于外部传感器的插孔。
注意:按下按钮时,红色 LED 将闪烁,同时发送以下形式的消息(温度线每秒重复一次)。
没有外部传感器:
www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:inner-tx
inner-tempinterval
27.93 [c]1s
使用外部传感器:
www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:inner-tx;outer-tx
inner-tempintervalinterval
27.18 [c]29.62 [c]1s
该程序使用 LED 熄灭或红色常亮的模式。
TEMPer1F
标有“TEMPer1F”、“-40C - +125C”的白色塑料 U 盘;带有标记为“TXT”的粉红色按钮。背面为“PCsensor”。该型号有一个用于外部传感器的插孔,但没有内部传感器。
按下按钮时,红色 LED 将闪烁,同时发送以下形式的消息(温度线每 1 秒重复一次)。
未插入探头:
www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:unknown
1s
插入探头后:
www.pcsensor.com
temperx v3.3
caps lock:on/off/++
num lock:off/on/--
type:outer-tx
outer-tempinterval
24.93 [c]1s
该程序使用 LED 熄灭或红色常亮的模式。
TEMPerX232
标有“TEMPerX232”、“0-100%RH”和“-40 - +85C”的白色塑料 U 盘;带有标有“按下”的绿色按钮。反面是“PCsensor”。在 USB 连接器对面的一端,有一个用于外部温度传感器的插孔(我没有也没有尝试过)。
按住按钮直到红色 LED 常亮时,蓝色 LED 将每秒闪烁一次。在此模式下,USB vendor:product 更改为 413d:2107,但只有一个 HID 设备可用,发送到 hidraw 设备的协议被拒绝并出现错误。
当 LED 呈蓝色闪烁并按下按钮时,将发送以下信息(温度线每秒重复一次)。
www.PCsensor.com
TEMPerX232-V2.0
type:inner-H2
inner-temperinner-humidityinterval
30.48 [C]40.19 [%RH]1
按住按钮直到红色 LED 常亮时,绿色 LED 将每秒闪烁一次。这是 temp.py 使用的模式。在这种模式下,如果向串口设备发送“Help”,将返回以下内容:
>>PCsensor<<
Welcome to use TEMPerX232!
Firmware Version:TEMPerX232_V2.0
The command is:
ReadTemp -->read temperature,temp_value = sensor_value + calibration
ReadCalib -->read calibration
SetCalib-type:xx.x,xx.x> -->set calibration, xx.x(-10.0~+10.0)
EraseFlash -->erase calibration
Version -->read firmware version
ReadType -->read the sensor type
ReadAlert-Temp -->read temp alert value
SetTempUpperAlert-type:xx.xx>-->set temp upper alert value,xx.xx(-40.00~+85.00)
SetTempLowerAlert-type:xx.xx>-->set temp lower alert value,xx.xx(-40.00~+85.00)
ReadAlert-Hum -->read hum alert value
SetHumUpperAlert-type:xx.xx> -->set hum upper alert value,xx.xx(00.00~99.99)
SetHumLowerAlert-type:xx.xx> -->set hum lower alert value,xx.xx(00.00~99.99)
SetMode-Temp:x> -->set tempmode, x(0~1)
ReadMode-Temp -->read tempmode
Help -->command help
? -->command help
The COM configuration is:
Mode: ASCII
Baud Rate: 9600bps
Data Bit: 8
Parity Bit: None
Stop Bit: 1
SHENZHEN RDing Tech CO.,LTD
www.PCsensor.com
这是 temp.py 使用的模式。我没有成功让该设备响应通过 HID 设备发送的任何命令。
在使用终端程序(例如,cu)时,我最初无法获得对 ReadTemp 的回复,但是 temp.py 中的示例没有任何问题,可能是因为在命令之后没有发送换行符。
示例命令输出
帮助
$ ./temper.py --help
usage: temper.py [-h] [-l] [--json] [--force VENDOR_ID:PRODUCT_ID]
temper
optional arguments:
-h, --help show this help message and exit
-l, --list List all USB devices
--json Provide output as JSON
--force VENDOR_ID:PRODUCT_ID
Force the use of the hex id; ignore other ids
列出设备
在此示例中,其中一个设备没有附加 HID 驱动程序,因为我使用的是基于 libusb 的程序来访问它。
$ ./temper.py -l
Bus 001 Dev 023 413d:2107 * ??? ['hidraw0', 'hidraw1']
Bus 001 Dev 086 0c45:7401 * TEMPerV1.4 []
Bus 002 Dev 002 04d8:f5fe TrueRNG ['ttyACM0']
温度
在此示例中,其中一个设备没有附加 HID 驱动程序,因为我使用的是基于 libusb 的程序来访问它。
$ ./temper.py
Bus 001 Dev 023 413d:2107 TEMPerX_V3.1 26.55C 79.79F 43.41%
Bus 001 Dev 086 0c45:7401 Error: no hid/tty devices available
$ ./temper.py --json
[
{
"path": "/sys/bus/usb/devices/1-1.2",
"busnum": 1,
"devnum": 23,
"vendorid": 16701,
"productid": 8455,
"vendor_name": "",
"product_name": "",
"devices": [
"hidraw0",
"hidraw1"
],
"ident": "TEMPerX_V3.1",
"celsius": 26.55,
"fahrenheit": 79.78999999999999,
"humidity": 43.65
},
{
"path": "/sys/bus/usb/devices/1-1.1.1",
"busnum": 1,
"devnum": 86,
"vendorid": 3141,
"productid": 29697,
"vendor_name": "RDing",
"product_name": "TEMPerV1.4",
"devices": [
],
"error": "no hid/tty devices available"
}
]
可以使用 --list 选项生成类似的 JSON 输出。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。