USBRH driver for Linux

USBRH driver for Linux

Contents

USBRH とは?

USBRHストロベリーリナックス から発売されている温度・湿度測定 ユニットです.USB 経由でセンサーの値を取得できます.

USBRH

USBRH の詳しい仕様については こちら を参照してください.

このページでは,USBRH の Linux 用ドライバを配布しています.

ライセンス

GNU General Public LicenseGNU General Public License の翻訳 )に従います.

ダウンロード

動作環境

Linux Kerel 2.6 以降で動作します.udev を使用していることを想定していま す.

開発は, Gentoo Linux Kernel 2.6.25 で行っています.

インストール

$ make
% sudo make install

使い方

ドライバをインストールした後,USBRH をパソコンに接続すると /proc/usbrh/[番号] というディレクトリが生成されます.[番号]は 0 から 始まり,接続される USBRH の個数が増える度に 1 ずつ増えます.

USBRH のセンサーの値はこの中にある以下のファイルを読み出すことで取得で きます.

temperature
温度(C) を出力します.
humidity
相対湿度(%RH) を出力します.
status
「t:温度 h:相対湿度」の形式で,温度と相対湿度の両方の値を出力します.

出力例

$ ls -la /proc/usbrh/0
合計 0
dr-xr-xr-x 2 root root 0 2008-04-05 02:46 ./
dr-xr-xr-x 3 root root 0 2008-04-05 02:46 ../
-rw-r--r-- 1 root root 0 2008-04-05 02:46 heater
-r--r--r-- 1 root root 0 2008-04-05 02:46 humidity
-rw-r--r-- 1 root root 0 2008-04-05 02:46 led
-r--r--r-- 1 root root 0 2008-04-05 02:46 status
-r--r--r-- 1 root root 0 2008-04-05 02:46 temperature
$ cat /proc/usbrh/0/temperature
30.05
$ cat /proc/usbrh/0/humidity
35.02
$ cat /proc/usbrh/0/status
t:30.07 h:34.95

トラブルシューティング

USBRH を接続しても /proc/usbrh が現れない

USBRH を接続しても /proc/usbrh が現れない場合は以下の点を確認してください.

確認1: USBRH がパソコンに認識されているか

下記のように lsusb を実行して,ID 1774:1001 のデバイスが表示される ことを確認してください.

$ su -
# lsusb -d 0x1774:0x1001
Bus 004 Device 002: ID 1774:1001

確認2: ドライバがロードされているか

下記のように lsmod を実行して,usbrh が表示されることを確認してくだ さい.

$ lsmod
Module                  Size  Used by
usbrh                   5636  0
  • ドライバがデバイスを認識しているかどうか

dmesg を実行して,下記のように「USBRH device now attached to /dev/usbrh[番号]」という出力がある事を確認してください.

$ dmesg
usbrh.c: USBRH device now attached to /dev/usbrh123

無い場合は,USBRH を一旦 PC から外し,再び接続してみてください.

確認3: ドライバをロードしてから,デバイスを接続しているか

make install によってドライバをロードしてから,デバイスを接続してくだ さい.デバイスを接続してからドライバをロードした場合,うまくデバイスを 認識できません.その場合,一旦デバイスを外すか下記のようにして USB のバ スリセットを行ってください.

# rmmod uhci_hcd; modprobe uhci_hcd

確認4: USBRH ドライバではなく USB HID ドライバがロードされてしまっている

dmesg を実行して,下記のように「hiddev96: USB HID v1.00 Device [Strawberry Linux Co.,Ltd. Hygrometer/Thermometer]」という出力があるか 確認して下さい.存在する場合,USBRH ドライバではなく USB HID ドライバが ロードされてしまっています.

$ dmesg
hiddev96: USB HID v1.00 Device [Strawberry Linux Co.,Ltd. Hygrometer/Thermometer] on usb-0000:00:1a.0-1

デバイスを外してから,下記のようにして USB HID ドライバを一旦アンロード してみて下さい.

# rmmod usbhid; modprobe usbhid

温度や湿度の取得に失敗することがたまにある

「Failed to get temperature/humierature」のようにエラーメッセージが時々 表示される場合,お使いの環境においてドライバで設定しているタイムアウト 時間(1秒)が短すぎる可能性があります.

ソースファイル usbrh.c 中の 150行目付近に下記のような行があると思いま す.その中の「1000」という数字を「5000」に書き換えてみてください. (5000にすると,USBRHの応答を最大5秒間待つようになります)

    result = usb_bulk_msg(dev->udev,
                          usb_rcvbulkpipe(dev->udev, USBRH_SENSOR_ENDPOINT),
                          value, sizeof(*value),
                          &read_size, msecs_to_jiffies(1000));

書き換えたあとは,次のようにしてドライバをロードし直してから,USBRH を抜き差し.

% sudo rmmod usbrh
% make
% sudo make install
% sudo modprobe usbrh

活用例

RRDtool などと組み合わせれば,温度と湿度の変化を簡単にグラフ化できま す.以下は,部屋の温度と湿度,そしてコンピュータ内の温度をプロットした ものです.

温度と湿度のグラフ

おまけ機能

このドライバでは,USBRH についている 2 つの LED とセンサーに内蔵されて いるヒータを制御する事も可能です.

LED の制御

/proc/usbrh/[番号]/led に値を書き込むことで LED の制御が行えます.

$ sudo su
[緑色の LED を点灯]
# echo 1 > /proc/usbrh/0/led
[赤色の LED を点灯]
# echo 2 > /proc/usbrh/0/led
[緑色と赤色の LED を点灯]
# echo 3 > /proc/usbrh/0/led

ヒータの制御

/proc/usbrh/[番号]/heater に値を書き込むことで LED の制御が行えます.

$ sudo su
[ヒータをオン]
# echo 1 > /proc/usbrh/0/heater

# cat /proc/usbrh/0/temperature
30.78
# cat /proc/usbrh/0/temperature
31.69
# cat /proc/usbrh/0/temperature
32.19

[ヒータをオフ]
# echo 0 > /proc/usbrh/0/heater

# cat /proc/usbrh/0/temperature
29.42
# cat /proc/usbrh/0/temperature
28.74

制御方法について

このドライバは,以下の情報に基づいて作成しました.

センサーの値を取得する際の通信ログを下記に示します.

SnoopyPro のログ