ぴらぴの居場所がわかるぴらぴら探知機(ぴらぴらの電話番号を知っていれば見られる)。片手間の遊びにしたことだけど、報告。こんど鬼ごっこするときに使おうか。
あ、ここに書いてあるとおりにやったのに動かなかった、無駄になった出費を、無駄になった作業時間をどうしてくれる、と言われても、どうもしません。すみません。
前提
Linux 2.6.24をThinkpadのX60sで動かしている。
屋外からインターネットにつながってないとあまりおもしろくない。たとえばemobileを使うなら、D02NE on Linuxなどを参考にするとつながる。
GPSレシーバの設定
I-O DATAのNavi Clip (USBGPS2)を買った。
カーネルの、driver/usb/serial/ftdi_sio.h の中の、ふたつのシンボリック定数の値を書き換えて、これらにした。(お行儀がわるい。なにか動かなくなってもしらない。)
#define FTDI_VID 0×04bb
#define FTDI_232RL_PID 0×093B
そのカーネルをコンパイルして、動かす。あ、コンパイル前に、ftdi_sioもコンパイルするように設定した。
Navi Clipをさしこむと、システムのログ(僕の所では/var/log/everything/current)に、
May 24 10:46:22 [kernel] usb 4-1: new full speed USB device using uhci_hcd and address 6
May 24 10:46:22 [kernel] usb 4-1: configuration #1 chosen from 1 choice
May 24 10:46:22 [kernel] ftdi_sio 4-1:1.0: FTDI USB Serial Device converter detected
May 24 10:46:22 [kernel] drivers/usb/serial/ftdi_sio.c: Detected FT232RL
May 24 10:46:22 [kernel] usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB0
みたいなものが出てくる(太字は、ここに載せるときに修飾した)。
gpsdというものをインストールした。/etc/conf.d/gpsd という設定ファイルにこんな二行がある状態にした。
GPS_DEV=”/dev/ttyUSB0″
GPSD_OPTS=”-P /var/run/gpsd.pid -f GPS0 -F /var/run/gpsd.sock”
gpsdを動かした。
シェルで、% telnet localhost 2947 として、一行「p」と送ると「GPSD,P=?」と返事が来た。空が見えるところで数分待つと、二回目以降の「p」に対して、「GPSD,P=35.843075 139.249282」(数字をちょっと変えた)みたいに、緯度と経度を返してくれるようになった。
xgpsというものを動かすと、GPS衛星がどっちにあるはずで、そのうちどれとどれから信号を受信できているか、見せてくれる。
地図表示の設定
緯度と経度さえわかれば、たとえばGoogle Mapsを使えば、地図に位置の印と拡大縮小ボタンをつけて、表示するのはかんたんで、こんなHTMLをブラウザに読んでもらえばいい。
<html><head><title>ぴらぴら探知機</title>
<script
src="http://maps.google.com/maps?file=api&v=2&key=GOOGLE_MAPS_API_KEY"
type="text/javascript"></script>
<script type="text/javascript">
<!----
function initialize() {
var location = new GLatLng(36.72877,132.734297);
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(location, 15);
map.addOverlay(new GMarker(location));
map.addControl(new GSmallZoomControl());
}
}
----> </script>
</head>
<body onload="initialize()" onunload="GUnload()">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
</body>
</html>
GOOGLE_MAPS_API_KEYのところには、自分で取得したキーを埋め込んでください。