Top Page Index Mail Form |
最終更新日 2009.7.11
Willcom CORE 3G用 USBモデム HX003ZTと GPSモジュールの GT-730F/Lは両方 /dev/ttyUSBn を使うので、同時に使うと差した順番によってデバイス名末尾の番号が変化してしまい、アプリケーションから使う場合に困るので、スクリプトとか作って対応してみた。
/etc/udev/rules.d/60-local.rules の末尾に以下を追加。追加後、再起動するか、$ sudo /etc/init.d/udev restat を実行。
SUBSYSTEM=="tty", ACTION=="add", SYSFS{idVendor}=="067b", SYSFS{idProduct}=="2303", SYMLINK="gps", RUN+="/etc/gpsd.sh" SUBSYSTEM=="tty", ACTION=="add", SYSFS{idVendor}=="19d2", SYSFS{idProduct}=="0031", RUN+="/etc/hx003zt.sh" SUBSYSTEM=="usb", ACTION=="remove", RUN+="/etc/gpsd.sh", RUN+="/etc/hx003zt.sh"
ちなみに、gpsdをインストールすると /lib/udev/gpsd.hotplug.wrapper というスクリプトも入っていてそちらを使うのが筋なのだろうが、なんかうまくいかなかったので自力で作ってみた。
/etc に以下のスクリプトを作る。$ sudo chmod +x … で実行権限を与えておくこと。
/etc/gpsd.sh
#!/bin/sh if [ "$ACTION" = "add" ] ; then /usr/sbin/gpsd -P /var/run/gpsd.pid /dev/gps elif [ "$ACTION" = "remove" ] ; then if [ "$MODALIAS" = "usb:v067Bp2303d0400dc00dsc00dp00icFFisc00ip00" ]; then kill `cat /var/run/gpsd.pid` rm -f /var/run/gpsd.pid rm -f /dev/gps fi fi
/etc/hx003zt.sh
#!/bin/sh if [ "$ACTION" = "add" ] ; then if [ "$ID_IFACE" = "03" ]; then rm -f /dev/modem ln -s $DEVNAME /dev/modem fi elif [ "$ACTION" = "remove" ] ; then if [ "$MODALIAS" = "usb:v19D2p0031d0000dc00dsc00dp00icFFiscFFipFF" ] ; then rm -f /dev/modem fi fi
これで GT-730F/Lを差すと自動的にシンボリックリンク /dev/gps ができて gpsdがそこを使うように常駐する。抜くと自動的に消える。HX003ZTを差すと自動的にシンボリックリンク /dev/modem ができるので、gnome-pppなどはそちらを指定するようにする。
なお、スクリプトで remove時に妙な環境変数を見ているが、うちの場合はこうしないとうまく後始末できなかったのでこうしてある。Ubuntuのバージョンが変わったら見直しが必要かもしれない。
というわけでこれを使って Google Mapを表示するオンライン型簡易カーナビのデモがこちら。gpsd.cgiのソースはこちら。デモなので GPS位置が初期値の長岡駅のままで動きませんが、雰囲気はつかめるかと。
このあたりを参考に Ubuntuで Willcom CORE 3G / HX003ZTが使えたのでその方法を書いておきます。
2009.7.4 追記。AT+ZCDRUN=8 という ATコマンドを送ると ZeroCDが無効になって Linuxならいきなり /dev/ttyUSB0, /dev/tttyUSB1, /dev/ttyUSB2 として認識されることがわかりました。一旦、Windowsで普通にツールをインストールして COMポートとして認識させた後、TeraTermとかハイパーターミナルとかで AT+ZCDRUN=8 を送ります。そうすれば以下の設定の1.USB_ModeSwitchのインストール、2.udevのルール作成 は不要。3の動作確認以降を実行して下さい。元に戻すには AT+ZCDRUN=9 らしい。
USB_ModeSwitch - Activating Switchable USB Devices on Linuxからソースをダウンロードする。$ tar xvf usb_modeswitch-1.0.2.tar.bz2 で解凍する。中にバイナリが入っているのでそれを使ってもいいと思うが、わたしゃ念のためビルドしなおした。インストールは $ sudo make install
/etc/usb_modeswitch.conf に以下の内容を追加。
######################################################## # Willcom HX003ZT(ZTE MF633) # # Contributor: KAWAKAMI Yukio DefaultVendor= 0x19d2 DefaultProduct= 0x0103 TargetVendor= 0x19d2 TargetProduct= 0x0031 # only for reference MessageEndpoint=0x01 MessageContent="55534243123456782000000080000c85010101180101010101000000000000" # if that command doesn't work, try the other ("eject") MessageContent="5553424312345678000000000000061b000000030000000000000000000000"
/etc/udev/rules.d/60-local.rules (無ければ作る)に以下の内容追加。
ACTION!="add", GOTO="ZTE_End" # Is this the ZeroCD device? SUBSYSTEM=="usb", SYSFS{idProduct}=="0103", SYSFS{idVendor}=="19d2", GOTO="ZTE_ZeroCD" # Is this the actual modem? SUBSYSTEM=="usb", SYSFS{idProduct}=="0031", SYSFS{idVendor}=="19d2", GOTO="ZTE_Modem" LABEL="ZTE_ZeroCD" # This is the ZeroCD part of the card, remove # the usb_storage kernel module so # it does not get treated like a storage device RUN+="/usr/sbin/usb_modeswitch", GOTO="ZTE_End" LABEL="ZTE_Modem" # This is the Modem part of the card, let's # load usbserial with the correct vendor # and product ID's so we get our usb serial devices RUN+="/sbin/modprobe usbserial vendor=0x19d2 product=0x0031", # Make users belonging to the dialout group # able to use the usb serial devices. MODE="660", GROUP="dialout" LABEL="ZTE_End"
これを書き換えたら /etc/init.d/udev restart でデーモンを再起動しておく。
この状態で HX003ZTを USBコネクタに差してみる。数秒は無反応で、その後、インジケータが赤く光る。また数秒後に青色に変わる。更に 30秒くらいしてから /dev/ttyUSB0~2ができていれば正常。なお、1、2の設定をせずに HX003ZTを USBコネクタに差すと CD-ROMドライブとして認識される。それを「イジェクト」すれば USBモデムとして使用可能。
本来なら Network Managerでスマートにいきたい所だが、とりあえず gnome-pppを使う。インストールは $ sudo apt-get install gnome-ppp で。後は以下のような設定。
あとはデフォルトでいいと思う。
パーミッションの設定のせいでうまくいかない場合は以下の設定を試してみて下さい。
参考にしたサイト:
秋月で売っているUSB接続GPSモジュール・GT-730F/Lは USB-シリアル変換チップに PL-2303を使っているので、つなげばそのまま /dev/ttyUSB0 として認識される。minicomや cuなどのシリアル通信ソフトで 38400bpsで /dev/ttyUSB0を開けば1秒ごとにデータが送られてくるのが見える。
緯度経度及び衛星の受信状況を見るだけなら $ sudo apt-get install gpsd-clients で gpsdとそのツールをインストールする。GPSモジュール接続後、$ gpsd /dev/ttyUSB0 を実行すると gpsdが常駐する。$ xgps & を実行すると現在位置と時刻、捕捉している衛星が表示される。
既存の地図に位置表示して簡易ナビと使うには gpsdriveを使う。$ sudo apt-get install gpsdrive でインストールできる。やはり gpsdを常駐後、$ gpsdrive & で実行する。
Eee PCのように画面が狭い場合は $ gpsdrive -M car -g 900x480 などとするとよい。更に画面が狭い場合は -M pda オプションで起動するとタブコントロールになるので狭い画面でも使いやすくなる。
→Manpage of GPSDRIVE ←日本語だが、ちょっと古いのでこれと合わせて $ man gpsdrive (英語)で確認した方がいいだろう。
地図表示に Google Mapを使うには Google maps to qpeGPS and gpsDriveを利用して地図データを Google Mapから取得して使う。取得したデータ(1280x1024ドット gifファイル)は ~/.gpsdrive/maps/ に入れ、map_koord.txtに指定された内容を追加する。なお、Overlapは 30%以上にしないと Pos.modeが正常に動作しないようだ。
この画像は Google Mapを使った例。ZOOMレベルを上げた地図を用意すればもっと詳しい表示が可能。
Xubuntu特有かもしれないが、設定→キーボード でキーリピートを変更してもリピートするまでの時間が変化しなかった。$ xset r rate 400 40 とか直接設定してやるといいようだ。.bashrcに xset r rate 40 &>/dev/null を追加しておく。
Eee PC 701の場合、madwifiのドライバを入れた方が安定するようだ。ビルド環境が必要なのであらかじめ $ sudo apt-get install build-essential でツールをインストールしておく。MadWifi subversion snapshot archiveから madwifi-hal-0.10.5.6-current.tar.gz をダウンロードする。 後は
$ tar xvf madwifi-hal-0.10.5.6-current.tar.gz $ cd madwifi-hal-0.10.5.6-rxxx-xxxxxxxx $ make $ sudo make install
でいいと思う。なお、カーネルを入れ替えた場合はその都度、makeして make install する必要があるだろう。
Eee PC 901-16Gの場合は標準のドライバでちゃんと使えるので特別な設定不要。