デジカメ(THETA SC) シャッターリモコン

ガジェット

PQI Air Pen

「PQI Air Pen」というモバイル用のルーターがあるのだが、これがTHETAのシャッターリモコンになるらしい。 ルーターがなぜリモコンに?と不思議なのだが、調べてみると、このルーターは内部でlinuxが動いており、それをハックしてリモコンに出来る様子。凄いことを考える人がいたもんだ。

PQI Air Pen

リモートシャッターへのハックは こちら で実施された様子。しかし旧THETA向けなようで、THETA Sなどではうまく動かないらしい。 しかし、さらに改良 を加えた人がおり、これにより新しい機種でも動作するとのこと。THETA SCは最新の機種になるが、中身はTHETA Sに近いはずなので、 これで動くと思われる。チャレンジしてみよう。

早速PQI Air Penを購入。発売は2012年11月なようで、すでに4年経過。だいぶ古い機種なようで、ネットの店によって値段が大きく違う。 危なくなさそうな、なるべく安い店で購入してみる。

中にはAirPen本体と持ち運び用と思われるケースが同梱されていた。

普通に使ってみる

モバイルルータが本来の機能であるため、まずはそれを使ってみる。 USBで十分充電しておいてから、[P]ボタンを1秒位長押しすると、Pボタンが青く光って電源が入る。

その後「http://192.168.200.1/」につなぎに行くと、すんなりと接続。パスワードとかは全くなし。 さすが中身のlinuxさえハックされる不用心さ。まあある意味使いやすさは満点だ。迂闊に外でハックされないようにするには、ここでパスワードなどを設定しておけばいいのだろう。 面倒なのでなにもしないけど。

ここでSDカード(MicroSDのみ)を本体横の穴に入れて、Web画面の左にある「FileList」をクリックしてみると、 SDカード中身が見える。しかしいきなり「/sda1」などと見えてしまう。まあ分かるけど、だいぶやっつけじゃない?

しかしこのSDカード穴、使いにくい。まず差し込み方向がオモテウラ逆。つまり「P」ボタンを上にした場合に、 SDカードは電極が見える方を上にして挿し込む必要がある。これって逆ジャネ?

そして、カードはぎりぎり奥まで差し込まないとカチッと入らない。中途半端だとバネに押されて飛び出してしまう。 一度これでSDカードが飛んでいき、小さなカードを床で探すハメに。なかなかの厳しい仕様。

ハックしてみる

ではいよいよハック開始。詳しい手順はファイルの「HOWTOUSE.txt」に記述してある。

接続設定

まずはAir Penの電源を入れて、PCで接続する。
ブラウザで「http://192.168.200.1/」につなぐ。
繋がったらTHETAの電源を入れる。
PQI管理画面の下の方にある「Concurrent Mode:」で、scanなどを押すなどして、THETAのSSIDを表示させて選択する。
THETA接続のパスワードを入力してconnectボタンを押す。

10秒程度してから、すぐ下にある「Refresh Status」ボタンを押してみて、すぐ上のConnection Statusが「Connected」となっていれば、接続完了。これで、接続情報は覚えてくれたはずなので、Air PenとTHETAが揃っていればすぐつながってくれるはず。

ハックソフト

下記より、ソフトを入手。zipなので解凍するが、直接MicroSDカードに解凍するのが良い。 SDカードの直下に「thisisautorun」ファイルが存在する状態となっていること。

ThetaShutter_PQIAirPen003.zip

ハック用MicroSDカードが用意できたら、THETA S向けにちょっとアレンジ。 thetaフォルダの下にある「theta_remote.sh」ファイルを編集する。windowsで作業の場合はメモ帳なんかは使わずに、 ちゃんとしたテキストエディタで編集する。(改行コードなどが通常とは違うので)

theta_remote.sh(diff結果)
*** theta_remote.sh
--- theta_remote_org.sh
***************
*** 65,74 ****
  done
 
  killall "rc"
! #/tmp/www/ftp/sda1/theta/theta_proc.sh $theta_ip $theta_port $trigger_port&
!
! sed="/tmp/www/ftp/sda1/theta/busybox-mips sed"
! execute="http://192.168.1.1/osc/commands/execute"
 
  while [ 1 ]
  do
--- 65,71 ----
  done
 
  killall "rc"
! /tmp/www/ftp/sda1/theta/theta_proc.sh $theta_ip $theta_port $trigger_port&
 
  while [ 1 ]
  do
***************
*** 81,100 ****
        done
 
        # Shutter
!       # /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port 0
!       sid=`$wget $execute --post-data='{"name":"camera.startSession"}'| $sed -e "s/^.*\"sessionId\":\"\([^\"]*\)\".*$/\1/"`
!       $wget $execute --post-data="{\"name\":\"camera.takePicture\",\"parameters\":{\"sessionId\":\"${sid}\"}}"
!       $wget $execute --post-data="{\"name\":\"camera.closeSession\",\"parameters\":{\"sessionId\":\"${sid}\"}}"
 
        # long press?
!       # /tmp/www/ftp/sda1/theta/sleepms 500
!       # read trig < $trigger_gpio
!       # if test ${trig} -eq 0
!       # then
!       #       # bracket shutter
!       #       /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port 2000
!       #       /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port -2000
!       # fi
 
        # Wait for release button
        while [ $trig -eq 0 ]
--- 78,94 ----
        done
 
        # Shutter
!       /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port 0
 
        # long press?
!       /tmp/www/ftp/sda1/theta/sleepms 500
!       read trig < $trigger_gpio
!       if test ${trig} -eq 0
!       then
!               # bracket shutter
!               /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port 2000
!               /tmp/www/ftp/sda1/theta/ThetaShutterTrig $trigger_port -2000
!       fi
 
        # Wait for release button
        while [ $trig -eq 0 ]

リモコン化

作業はこれで完了。出来上がったMicroSDカードをAir Penに差し込んでおき、THETA、Air Penそれぞれの電源を入れる。 THETAの無線LANマークの点滅が点灯に変われば、接続完了。AirPen側は青のLEDが早め(0.5秒)の点滅状態。

これでOKな状態のはずなので、Air Penの側面のSDカード口の上の方にあるリロードのような絵の小さなボタンを押すと、 シャッターを切ることが出来る。このときTHETAは静止画モードである必要があるはず。動画モードはまだやったこと無い。 1秒位タイムラグがあって、シャッターが切れる。(THETAのLEDが一旦消える)

最初のセッション確立までが少し時間がかかってしまうが、それ以降は特に問題はなく、 シャッターのタイムラグも、何ならスイッチを押すのに力を入れた後の、いい感じの被写体になっている気がする。 何と言っても小さな本体で完結しているのが素晴らしい。

改造

アプリ付属の「使い方」を見ると、THETAに接続してリモコンとして利用可能な状態になると、 「中央のLEDが緑に点灯」と記載があるが、実際には点灯せず、青のLEDの点滅のまま。シェルを見ても点灯させている部分は不明。

シェルにあるgpio23_outが緑LEDなのかを確認する意味も含め、ボタン検知のループ処理の前後に、 「echo 1 > /proc/gpio/gpio23_out」を追加してみると、見事に緑LEDが点灯となった。この状態できちんとシャッターも降り、シャッターボタンを押すと消灯となったので、 問題なさそう

theta_remote.sh
~
while [ 1 ]
do
    # green LED on
    echo 1 > /proc/gpio/gpio23_out
 
    # Wait for press button
    trig=1
    while [ $trig -eq 1 ]
    do
        /tmp/www/ftp/sda1/theta/sleepms 50
        read trig < $trigger_gpio
    done
    # green LED off
    echo 0 > /proc/gpio/gpio23_out

青のLEDは本体側で制御されている様子。THETAにきちんと接続された状態だと、早い点滅を行っている。 この状態でTHETAの電源を切ると、青いLEDは消灯となる。WiFi接続が切れると、消灯になるようだ。 この状態でもう一度THETAの電源を入れると、また青いLEDが点滅を始める。どうやら再接続を受け付けた様子。途中で切れても復活できるのは便利。シェルの中にその記述はないので、本体側処理で行っているのだろう。