XBee応用製作第1弾 リモートレリーズ 調査編

無事にXBeeが動くようになったので、その応用を考えてみることにする。
第一弾は最近使わなくなったデジカメSP-560UZのリモートレリーズに挑戦しようと思う。
普通、リモートレリーズというと、

な感じのケーブル(これはETSUMIのRM-L1-O2・・・のはず)を付けて、有線でシャッターを切るのだが、今回はそれをXBeeとAVRを使って無線式に改めることにする。早速中をばらしてみると、

な感じの基板が出てきた。左上のジャックは2.5ミリのステレオミニジャックで、どうやらカメラ以外にもう1台レリーズできるようになっているようである。

今回は、有線レリーズの機能を生かしたまま無線レリーズの機能を追加したいので、この2.5ミリのステレオミニジャックを入力端子として使うことを考えてみることにした。(注:まだ実際に改造して確認したわけではないので注意!)

右上のケーブルの黒はGNDで、シャッターを半押しすると白がダイオードを経由してGNDへ、さらに全押しすると赤がダイオードを経由してGNDへ落ちるようになっている。さらにパターンを追っていくと、左上のジャックからは写真で横向きになっているダイオード2つを通して、真ん中のスイッチに接続されているようなので、この横向きのダイオード2つを取っ払い、オレンジで書いた線の通りに接続すると、2.5ミリステレオミニジャックから制御できるようになるはず。2.5ミリのミニジャックは根元がGND、RチャンネルをGNDに落とすと半押し、Lチャンネル(先端)をGNDに落とすと全押しになるはずである。(しつこいけど、動作未確認)
この状態でSWを押すとショートするように見えるけど、実際には2.5ミリのミニジャックからはオープンコレクタまたはオープンドレインで駆動するので、問題は生じない。

~つづく~

ATmegaとのシリアル通信~AVRLibのtimerのテスト(その後)

しばらく前にAVRlibのテストをしていましたが、その際にPWMが動いていないようだ、ということを書きました。

結局、端子の割り付けの差だったようで、
  // set the OC1x port pins to output
  // We need to do this so we can see and use the PWM signal
  // ** these settings are correct for most processors, but not for all
  sbi(DDRD, PD4);
  sbi(DDRD, PD5);

の部分を、ATmega88のOC1xの端子配置に合わせて、
  // set the OC1x port pins to output
  // We need to do this so we can see and use the PWM signal
  // ** these settings are correct for most processors, but not for all
  sbi(DDRB, PB1);
  sbi(DDRB, PB2);
に直してやると、あっけなく動作しました。
(よく見ると、コメントに違うCPUもあるよ、って書いてありますね・・・)
その際にいろいろと調べていたのですが、結局開発環境としてはArduinoへの乗り換えを検討しています。
死蔵しているATmega88がいっぱいあるのでちょっともったいないのですが、趣味の世界では他の人が築き上げたものを使わない手はありません。貴重な時間は最終的なアプリケーションに費やした方が楽しいですし。(それがArduinoがウケている理由だと思うのです)
で、調べてみると、Arduinoの世界では、ATmega168とかだと19200bpsでのシリアル通信が使われるようなので、XBeeの通信速度も19200bpsに変更しました。

PIC24USBでUSBシリアルに挑戦 (5)結末

XBeeの通信モニタ用に作っていたPIC24USBによるシリアルモニタだが、挫折してしまった。
Microchipから提供されているUSB-CDCクラスのフレームワークは、割り込みで動作させていても結局ポーリングをし続ける必要があり、そこに大きな構造上の制約を受けてしまう。

そこに時間を割いても面白くないので、ホストとのI/FはFT245にやらせることにして、以下のようなボードと、その上で動く簡単なシリアルラインモニタソフトを作成した。9600bps程度で動かしているので、速度的にはまったく問題ないはずである。

 
ボード上にはAE-FT245とPIC24FJ64GB006が載っている。
左上のコネクタはISP用である。

FT245でホストとI/Fしながら、いくつかの端子を下の10ピンコネクタに出し、PIC24の特徴であるピンアサイン機能を使って、2チャンネルのUARTレシーバを10pinコネクタの5pinと6pinに出すようにした。
ホスト側に接続するとこんな感じになる。

 

上半分が子機、下半分が親機である。これでシリアルの状態が見えるようになったので、先に進めることにしたい。

gFTPのインストール

Zigbeeいじりたくてしょうがないのですが、なかなか時間がとれません。
そんな中、ちょっと訳あって、リモートサーバにFTPアクセスする必要がでてきました。WindowsでFFFTPを使ってアクセスするよう指示されているのですが、そこは他の作業をできるだけUbuntuでやっているのもあって、なんとかUbuntuでやってしまいたいところです。(猛者ならコマンドラインでやっつけるところでしょうが、さすがにそこまでの元気は無い・・・)

ということで調べてみると、Ubuntu環境ではgFTPというのが定番のようですので、早速Synapticでインストールです。おもむろに、Synpticのクイック検索で「gftp」と入れると、4つヒットします。大元のパッケージは後ろに何も付かない gftp だと思うので、ポチッとマークしたら、残りの3つも選択されました。

インストールはあっという間に完了。予想通り、ほぼFFFTPと同様に使うことが可能でした。
気をつけて使えばサーバ上のファイルに対するファイルマネージャ(エクスプローラ)ライクに使えそうです。

TrueCryptでディスクを暗号化 (3)初期設定後編

ボリュームの生成が終了したら、暗号化したドライブのマウントを行う。

上半分がマウント先(マウント後にここで設定したドライブレターを通してアクセスする)で、そこにどの暗号化ドライブをマウントするかを下半分の「ファイルの選択」「デバイスの選択」で設定する。
設定したら「マウント」を押すと、暗号化ドライブにアクセスができるようになる。

ソフト処理でAESをかけている割には、極端に遅くなる感じもせず、いい感じである。
課題は、パスワードやキーファイル(使う場合)をどうやって管理するか、というところだろうか。

<追伸>
実は TrueCrypt は日本語化がされている。
ダウンロードのページを下のほうにスクロールしていくと、「More Downloads」というのがあって、その中に language packs というのがある。そこをクリックすると、ソースコードのダウンロードリンクや language packs へのリンクがでてくるので、さらにそこをクリックする。

そうすると、言語ごとの language pack のダウンロードリンクがでてくる。これをクリックすると .zip ファイルがダウンロードできるので、それをダウンロードして展開すると、ローカライズのためのファイルのほかに、日本語マニュアルが出てくる

これらのファイルを TrueCrypt.exe のあるフォルダに置いて、TrueCryptを再起動する。メニューの「Setting」→「Language」で日本語を選ぶと日本語表示になる。

TrueCryptでディスクを暗号化 (2)初期設定前編

インストールが終わったので、初期設定を行う。​

起動すると、こんな画面になる。最初は、「Create Volume」で暗号化ディスクを生成する。

 

 
ファイルを仮想ディスクにするか、パーティション/ドライブ丸ごとかを選択する画面が出る。
今回はディスク丸ごと暗号化なので、
真ん中の「Encrypt a non-system partition/drive」を選択する。
一番下はシステムドライブを暗号化する場合に使うらしい。

 
普通の暗号化ボリュームにするか、さらにその中に暗号化ボリューム(2階層になる)を
作るかを選択する。強制的にパスワードを喋らなければならない状況になった場合に備えて、
ということらしいが、後ろめたいことをするわけではないので普通のものにする。

 
暗号化するボリュームの場所を設定する。「Select Device」でドライブレターが
選択できるので、それで暗号化するディスクを選択する。

ボリューム作成時にフォーマットをするかを選択。上が標準で、ボリューム作成時にフォーマット。
下は、初めて読み出した際に暗号化するらしいが、すごく遅いらしい。

暗号化のモードを選択。普通はAESでいいと思う。
「ベンチマーク」を押すと、下のように暗号化のパフォーマンス測定をしてくれる。

ベンチマークの結果

 
ボリュームのサイズを聞いてくるが、HDD丸ごと1台なので選択肢なし

 
パスワードを入力する。画面ではキーファイルを指定していますが、実際には指定していません。
(キャプチャし忘れました)
キーファイルを使うと、うっかりキーファイルを消去してしまった場合にどうにもならなくなります。
キーファイルの代わりに、特定のUSBデバイスが使えれば便利なんでしょうが・・

TrueCryptでディスクを暗号化 (1)インストール編

雑多なデータはやはりWindows上にあることが多いので、Windowsから暗号化できないと面倒である。仕方がないので、Windows側にTrueCryptを導入して、暗号化パーティションを作成することにした。TrueCrypt(http://www.truecrypt.org/)は「オープンソースの暗号化された仮想ディスクを作成・利用するソフトウェア」(Wikipediaによる)である。詳しくは、Wikipediaの方を参照されたい。

単純にWindowsであればOSの暗号化機能でも良さそうな気もするが、ディスク自体は外付けであり、過去にOSの再インストール時に読めなくなったことがある(このときは他にバックアップがあって助かった)ので、やっぱり外だしのツールのほうが安心かも、ということである。

そんなこんなで、まずダウンロードする。TrueCryptのダウンロードのページにいくと、ダウンロードのリンクとPGP signatureのリンクがある。ダウンロードしたファイルの検証方法は PGP Signature のリンクを押すと表示されるが、Windows版の場合は電子署名を確認してもOKだよ、ということみたいである。よって、ダウンロードしたファイルをエクスプローラで右クリックして、プロパティを表示して確認していく。

プロパティを開いたところ。デジタル署名のタブをクリックする。

 

すでに選んであるが、TrueCrypt Fundation の署名を選択して「詳細」を押す

 

ここで「このデジタル署名は問題ありません」と出れば、OKみたいである。

引き続き、実行形式のファイルをダブルクリックして、インストールを行う。

お約束のライセンス確認である。中身を読んでチェックを入れて「Accept」を押す

 

インストールするのか、展開だけなのかを選ぶ。
展開だけを行う場合は、「システムドライブの暗号化を行う場合」と
「ポータブルモードで動作させる場合」のようである。
展開したファイルの実行形式をダブルクリックすると
ポータブルモードで動作するらしい。

 

セットアップオプションを選ぶ。標準のままにした。

 

インストールの過程が表示される。
完了すると、完了のメッセージが出る。

 

「初めて使うんだったら、チュートリアルを読むことをお勧めするよ、
チュートリアル見たい?」ということなので、「はい」を押す。

 

「はい」を押すと、TrueCryptのチュートリアルのページが開く

ということで、インストール自体はいたってシンプル。あっさり終わりました。

Ubuntuでディレクトリを暗号化

この時期になると、年賀状などを書かなくてはならないだが、年賀状は個人情報の塊でもある。

これまではNAS(玄箱PRO+Debian)に保管していたが、結局無防備な状態であった。調べてみると、Ubuntuでも暗号化ディレクトリが作れるということなので、試してみることにした。
  1. Cryptkeeperのインストール
    Cryptkeeperは、暗号化ディレクトリを生成する encfs のGUIとのこと。
    例によって、Synapticでサクッとcryptkeeperを検索して、インストールする。
  2. 適当にディレクトリを2つ作る。1つは暗号化されたディレクトリの実体(データ格納場所)、もう1つは暗号化されないデータを見せるマウントポイント。
    ここでは、/home/encryptedが暗号化されたデータの格納場所、/home/enc-mtptがマウントポイントとした。それぞれ、chown コマンドで group/owner を自分に変えてある。
  3. 以下の方法で暗号化されたディレクトリを実体にマウントする。
    $ encfs /home/encrypted /home/enc-mtpt
    新しい暗号化ボリュームを作成します。
    Please choose from one of the following options:
    enter "x" for expert configuration mode,
    enter "p" for pre-configured paranoia mode,
    anything else, or an empty line will select standard mode.
    > (ただリターンキーを押す)
    
    Standard configuration selected.
    
    設定が完了しました。以下のプロパティのファイルシステムが
    作成されます:
    ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 2:2:1
    Filename encoding: "nameio/block", version 3:0:1
    鍵サイズ: 192 ビット
    Block Size: 1024 bytes
    Each file contains 8 byte header with unique IV data.
    Filenames encoded using IV chaining mode.
    File holes passed through to ciphertext.
    
    Now you will need to enter a password for your filesystem.
    You will need to remember this password, as there is absolutely
    no recovery mechanism. However, the password can be changed
    later using encfsctl.
    
    新しい Encfs パスワード:
    Encfs パスワードの確認: 
    $ 
    

    これで /home/enc-mtpt にアクセスすると、暗号化されたデータにアクセスできた。

  4. アンマウントは
    $ fusermount -u enc-mtpt

    でアンマウントできた。

・・・が、ここで問題。EncFSで mount したディレクトリは、どうやら共有できない模様。Windowsからアクセスするディレクトリにするつもりだったので、ガックリである・・・。

PIC24USBでUSBシリアルに挑戦 (4)送信バッファ組込み

アナライザとしてPIC24USBを使う場合、大量のデータがPIC24USBからPCに上がってくることになるが、Microchip社が提供するUSB Frameworkでは送信バッファがそのままUSBコントローラに渡されるため、送信データは毎回ブロッキングされてしまう。これではちょっと都合が悪いので、ソフトウェアのバッファを噛ませることにした。
1KBのソフトバッファをかませたうえでのUSB-CDCの通信速度は約200~250Kbpsといったところのようである。PIC24USBからSOF割り込みの回数カウント値とデータ表示回数をカウントした値をsprintfで表示したものを、PC側でTeraTermProでひたすら表示しているだけである。
XBeeとAVRの間は9600bpsなので、上り下りで約20Kbpsである。凝った解釈をしなければなんとか表示できると思うのだが・・・。

VMware上にUbuntu10.04LTSとXubuntu10.10をインストール

Chromeブラウザのアルファ版を試してみたくなった。しかし、普段の環境にインストールすると後で往々にしてハマることが多いので、VMware上にインストールすることにした。

まずは、Ubuntu10.04LTSをインストール。インストールISOイメージを持ってくる(ダウンロードする)間に、仮想マシンを debian32bit で生成。仮想CDROMにインストールISOイメージをマウントして、仮想マシンを起動。インストールISOイメージを仮想ディスクとは別のHDDにいれていることと、仮想ディスクへのライトキャッシュを許可してあることからか、インストールはあっという間に終わってしまう。次に、アップデートマネージャを起動すると、数百MB分のアップデートが要るということで、かなりの時間を要してしまった。
VMware toolsのインストールも、共有ディスクを生成していないことでエラーが出るのと、vmxネットワークドライバのコンパイルでエラーになるが、操作性とグラフィックスの改善ができたのでよしとする。(しかし、実際には、VMwareについているVMware toolsよりも、ここで紹介されているopen-vm-toolsの方が良いのかもしれない。)
それはさておき、Ubuntuのインストール中に見つけた、軽量版のXubuntuが気になってしまった。(Ubuntuでも十分に軽いのだが)
同様にインストールISOイメージを持ってくる(ダウンロードする)間に、仮想マシンを debian32bit で生成。仮想CDROMにインストールISOイメージをマウントして、仮想マシンを起動。インストールISOイメージを仮想ディスクとは別のHDDにいれていることと、仮想ディスクへのライトキャッシュを許可してあることからか、インストールはあっという間に終わってしまう。こちらのインストール時は繁体字(中国語)まじりの日本語になっているが、インストール後の日本語の文字はUbuntu10.04と大差は無い。(ただし、メニュー自体は一部英語のままになっている)
次のアップデートもUbuntuと同様だったが、その次のVMware toolsのインストールで嵌ってしまった。結局、調べていくと、VMwareについているVMware toolsではなく、ここで紹介されているopen-vm-toolsを

$ sudo apt-get install open-vms-tools

でサクッとインストールするだけでよいことがわかった。
次にChromeブラウザをインストールした。デスクトップやランチャメニューに追加するには、Ubuntuの場合にはマウス操作でできたのだが、Xubuntuはそうはいかず、ランチャを一つずつ追加するしかなさそうである。
機能的にはやや劣るものの、XubuntuはUbuntuと比べても非常に軽い。そして概ね日本語化ができていて、フォントも(インストーラを除けば)Ubuntuのものと同じ綺麗なものが使われている。・・・と思ったら、XubuntuでChromeを使うとUIと異なるちょっと貧相なフォントが使われてしまうのが残念。Chromeの設定自体は同じようなので不思議なのだが・・・。


12/23追伸
Chromeのアルファ版はWindows版しかないのであった。がっくり。