ワイヤレスマウスで色々な事象の回数を計測

ワイヤレスマウスで色々な事象の回数を計測

Chumby で外部の動作をカウントアップできます。それもワイヤレスでワイヤレスで。
 
センサーには、ワイヤレスマウス(USBドングル)を使います。また、普通に使えば、内蔵電池だけで1年以上動作するでしょう。
例えば、こんな利用方法も面白いでしょうね。
    o マウスから左側スイッチを取り出して、スイッチの可動部を利用してドアの開閉回数をカウント。
    o スイッチ部にフォトセンサーを追加して、明暗数のカウント。
    o スイッチ部に交流電流センサーを接続して、コーヒーメーカーの稼働数(飲んだコーヒー)のカウント。
 
 
( ChumbyでUSBマウスのクリックを可視化する
~ PHP + BusyBoxシェルで作る「Mouse Counter」システム ~
 
Chumbyや組み込みLinux機のような軽量環境で、「USBマウスの左クリック回数をカウントしたい」
そんなニッチだけど妙に楽しい要求を、PHPとシェルだけで実現してみました。
 
GUIも不要、Xも不要不要です。/dev/input を直接読んでクリックを検出し、Webブラウザでリアルタイムに数値を表示します。
 
(1) 全体構成
このシステムは2つの部品で構成されています。
 
    o USBマウスのクリック検出 USB_mouse_Lswich.sh
    o Web表示&制御 mouse.php
 
関係はこうなります。
------------------------------------------------------------
 
USBマウス
   ↓
/dev/input/event*
   ↓
USB_mouse_Lswich.sh  →  CLICK行を出力
   ↓
mouse.php が行数を数えて /tmp/click_count.log に保存
   ↓
ブラウザに表示
 
(2) クリック検出の仕組み(シェル側)
USB_mouse_Lswich.sh の中身は実にハードコアです。
 
dd if="$DEV" bs=16 count=1 | hexdump | grep "01001001 01000000"
これは /dev/input/event* から
Linuxの生の入力イベント(EV_KEY + BTN_LEFT) を直接読んでいます。
 
01001001 01000000 は
 
「左ボタンが押された」
というイベントコードです。
 
つまりこれはXもlibinputも通さない、生のUSB HID監視です。
ChumbyやBusyBox環境に最適です。
 
(3) カウントをファイルで管理
PHP側では、このシェルの出力をこうやって処理しています:
 
(sh USB_mouse_Lswich.sh) | (
  c=現在の値
  while read line; do
    c=$((c+1))
    echo $c > /tmp/click_count.log
  done
)
ポイントは、「ログを追記しないで、常に上書き」です。
これにより、ログファイルが巨大化しない、PHPから一発で現在値が読める、再起動しても値を保持できる(要改造)という、組み込み機器に理想的な設計になります。
 
 
(4) 2つの動作モード
このシステムには「哲学的に重要な」2つのモードがあります。
 
Clear Mode:START時にカウンタを0に戻す
Keep Mode:前回の値を引き継ぐ
この状態は /tmp/mouse_mode.conf に保存されるため、Web画面をリロードしても、モードが維持されます。
 
(6) Webインターフェース(すべてWebブラウザだけで操作できます)
Chumby向けに 320px 幅・黒背景・等幅フォントで設計。
    o 現在のクリック数を巨大表示
    o スクリプトの実行状態
    o 実行ユーザー(START / STOP / RESET)
    o モード切替
 
cron も systemd も不要。PHPがプロセス管理UIになっているのが最大の特徴です。

 

このサイトについて

このサイトは、文鎮化していた Chumby の復活を願って開発されたプログラムを紹介して、Chumby の果たせなかった夢も 1mm でも前進させることを目的にしています。可能な限りの開発をしていますが、Chumby 自体と開発者の能力の限界があるとすれば、それが今日の姿です。

-- Good Luck !