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

リモートシャッターへのハックは こちら で実施された様子。しかし旧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」ファイルが存在する状態となっていること。
ハック用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が点滅を始める。どうやら再接続を受け付けた様子。途中で切れても復活できるのは便利。シェルの中にその記述はないので、本体側処理で行っているのだろう。