Python
Linux
IoT

USB 温度計で気温を測る(TEMPer; ID=413d:2107)


Amazon で購入できる usb 温度計 thermometer-528018

TEMPer シリーズというのだが,付属のソフトウェアを使わずに温度を取ってこられるように,いろいろな人が github にプロジェクトを作っている.

マイナーチェンジが繰り返されており,私が購入したもの(venderID:productID = 413d:2107)は Github のリポジトリを clone するだけでは利用できなかった.

なんとか温度だけ取得する方法を見つけたので手順をまとめておく.

環境

  • CentOS7
  • USB 温度計 TEMPer (venderID:productID = 413d:2107)

手順

デバイス ID の確認

$ lsusb
.
.
.
Bus 00X Device 00X: ID 413d:2107

USB温度計を接続した状態で lsusb コマンドを打つと, USB機器の一覧が表示される.ID が 413d:2107 のものがあることを確認する.

hidapi のインストール

hidaipをインストールする.

$ git clone https://github.com/signal11/hidapi
$ cd hidapi/linux
$ make -f Makefile-manual

事前に依存パッケージのインストールが必要.

On Linux, you will need to install development packages for libudev,
libusb and optionally Fox-toolkit (for the test GUI). On
Debian/Ubuntu systems these can be installed by running:
sudo apt-get install libudev-dev libusb-1.0-0-dev libfox-1.6-dev
If you downloaded the source directly from the git repository (using
git clone), you'll need Autotools:
sudo apt-get install autotools-dev autoconf automake libtool

https://github.com/signal11/hidapi/blob/master/README.txt

TEMPerd のインストール

$ git clone https://github.com/hughesr/TEMPered
$ cd TEMPered
$ git checkout hack-413d-2107
$ git reset --hard 75aa1e2
$ cmake .
$ make
  • USB 温度計のデバイス ID がそもそも対応しているものなのであれば,clone して cmake するだけで良い.
  • cmake がインストールされていない場合はインストールしておく.

温度を取得する

USB 温度計を接続して utils 内の tempered を実行する.

$ utils/tempered
/dev/hidraw1 0: temperature 16.12 °C
/dev/hidraw1 1: Failed to get the temperature: Not enough data was read from the sensor.
/dev/hidraw1 1: no sensor data available

これで温度データは取得できる.

Python で温度データを利用する場合

get_temperature.py
import subprocess

def getTemperature():
    response = subprocess.check_output('/absolute/path/to/tempered', universal_newlines=True)
    temperature = response.split(" ")[3]
    return temperature

temperature = getTemperature()

関連記事