« 2013年5月 | トップページ | 2013年7月 »

2013年6月の2件の記事

2013年6月30日 (日)

RaspberryPiライブカメラの可動部を設計する

 自宅外からストリーミングビデオを見ることが出来て、高まっていた気分が一気に落ち着いた。いつもの悪い癖で暫く何もする気がなくなる。長年の野望だったライブカメラという目標を曲がりなりにも達成したのだ。PCの前に向かっても脱力してやることが思い浮かばない。

 それでも力を奮い立たせて、次の目標を考える。ここはやはり予定通りカメラの遠隔操縦を次のテーマにするべきだろう。カメラを遠方から、パン(左右に振る)したり、チルト(上下にあおる)させることは、これまた長い間の夢である。

 モーター制御を勉強していたのも、この遠大な目的があったから始めたようなものだ。そのためにモーターは各種のステッピングモーターを揃えて準備している。気がつけば秋月の売っているステッピングモーターの殆どの機種は揃っていた。P7025934

 カメラを遠方から動かせれば、RaspberryPiのライブカメラは立派な監視カメラになる。さらにズームが出来たり音声が聞けたり、現場に所定の音声(猫を叱責する声など)が出せたりすれば完璧だが、まあそこまで凝ることもないだろう(音声合成チップは用意してあるが)。

 このカメラ可動部のフレームは、アクリル板から自作するつもりでいる。アクリル板の工作は、焦電型センサーの時、これも自作の温度調整付きのアクリル曲げ機でフレームを作り、ノウハウが出来ている。カメラ可動部については、前から、沢山スケッチを描いては構想を練っている。

P6305923 構成は大体決まっている。パン(左右)動作は、中型のステッピングモーターをシャフトを上にしてフレームに固定し、カメラを載せた可動台座は、このシャフトに固定して左右に回転する。可動台座は浮かせるか、キャスターをつけてフレームの上を自由に動かす。モーターは強力なので直結でも大丈夫だろう。

 チルト(上下)は、可動台座に載せた小型のステッピングモーターを平型ギヤで減速し、焦電型センサーと同じような機構でカメラを上下にあおることにする。手持ちのウェブカメラ(C270)には、三脚用の固定ネジはなく、ディスプレイなどにはさむだけのしかけしかないが、当面は、こちらもアクリル板にはさむだけで良いだろう。

 室内専用なので、防水、防塵などについては考える必要はない。カメラがずれるようだったら、三脚用のネジをカメラにつければ良い。スケッチは10枚近くも描いただろうか。市販のライブカメラなどの構造を調べるが、似たようなデザインばかりだ。

 あんまり同じものを描いていると、作る意欲がなくなってしまいそうな気がしてきたので、適当なところで切り上げることにする。何枚目かのスケッチを元に具体的に必要なパーツのリストアップに入った。

 ウェブで部品を探す。高回転させるものでもないし、たいした負荷もかからないので、普通の玩具工作のギヤなどで十分なのだが、意外に選べるものが少ない。千石電商の2号店がロボット関係の部品を置いているので機会を見つけては立ち寄っているが、なかなか思うようなものは揃わなかった。

しかし、最近、近くのツクモ本店にも「ロボット王国」というロボット部品を専門に扱っているところを発見した(本館2階)。ここは千石よりロボットに特化し、置いている商品の品数も多そうだ。早速、ウェブで買いたいパーツを心積もりして、梅雨の秋葉原を訪れた。

ロボット部品は高い。ありそうな部品がない(6/25/2013)

 部品がうまく揃わない。カメラのチルト部に予定しているモーターは減速するので小さいステッピングモーターですみ、モーターシャフト径も3ミリで汎用部品が多いので部品に不自由しないが、カメラを左右に振る部分(パン)に使う予定のモーターは、例の自動巻き機に使ったモーターで、シャフト径は、なんと1/4インチ、6.3ミリもある。

 このシャフトと、カメラ台座を固定する部品が見つからない。自動巻き機の時には、ロッドストッパーとか、シャフトリテイナーとかいう、内径が6ミリで、6ミリネジが外に出ている部品で時計を入れる容器(コップ)とモーターシャフトを固定した。S_p5134875 6ミリの内径では、1/4インチのシャフトが入らなかったので、丸やすりをつけたミニリューターで無理やり穴を広げて何とか入れた。この工作を繰り返すのは避けたい、それに、この程度のネジだけでカメラ台座を固定するのは強度に不安がある。

 大きな円板などを固定するつばが広がったようなものがないか探し回る。こういうやつ(図)を探しているのだが、ないのである。 何という名前なのかがわからないのでウェブで探しようがない。Photo

 ツクモに出かけた理由は、店頭でこの種の情報を得たかったこともある。これなしで、パンするモーター直結の機構は作れないわけではないが、みなあまりすっきりした形にならない。プーリーや、ホーンをシャフトにつけて、台座に固定すれば良いようなものだが、どうも美しくない。

 店頭で聞いてみたが、やはり自分が考えている以上の情報は得られなかった。あきらめて残りの必要な部品を揃える。金属製のギヤは高いので、硬質プラスチックのギヤにし、シャフト、ベアリング軸受け(必要ないけれど、こういう部品が好き)などを調達した。これだけで¥3000近い。6ミリシャフトのリティナーは欠品で買えなかった。千石に寄るがここにもなし。

 前にも書いたが、ロボット部品と称するパーツは皆、えーっと言うほど高い。このシャフトリティナーだって、ひとつ¥590もする。ベアリングのハウジングなど小さいのに¥2000近い(自分の買ったベアリングは日本精工製で¥280)。R/Cカーなどの部品と違って大量に売れない商品とはいえ、ちょっとしたロボットのキットが10万円以上するのは、何とかならないものか。S_p6295899 それはともかく、買って帰って、プラスチックギアを取り出し、シャフトに固定するイモネジのネジ穴がないことを発見して愕然となる。そうか、いくら硬質とはいえ商品として3ミリのねじ穴を開けておくわけにはいかないのだろう。迂闊だった。これは自分で開けるしかない。自分でつける分には耐久性は考えなくて良い。つけたらどうせはずさない。

制御はRaspberry直接か、ドライバーのマイコンをつけるか
 可動部の工作の準備が少し進んだので、制御ソフトのほうも考え始めた。多種多様な方法が考えられるので簡単には決まらない。あれこれウェブサイトをみながら検討する。LEDチカチカくらいは、RaspberryPiは、Linuxのスクリプトで簡単に出来るようだ。

 しかし、ステッピングモーターのマイクロステップ制御のようなPWMをやらせるわけにはいかない。LinuxやWindowsはリアルタイムOSではないので、PWM制御のようなことは簡単には出来ない。何でも良いから8ビットマイコンあたりを介在させるのが結局は一番簡単そうだ。

 どういうやりかたが、いかにすっきり、無駄なく、効率よく出来るか、色々頭を巡らして妄想する。このあたりが電子工作の醍醐味のひとつである。モーターの制御と、人間との操作インターフェースの部分も悩ましいところだ。

 ウェブを通すのでかなり大きな時間遅れが出来る。いわゆるプロポーショナルサーボ(通常のラジコンのプロポ)のようなことを実現するのは難しい。不定の時間差ができるのでかえって操縦が難しくなるだろう。昔やった、単純なON/OFFでモーターを左右に動かすだけの方が操作し易そうにも感じる。そうなると複雑なマイクロステッピング制御もいらないかもしれない。

 自動巻き機と違って、全回転させるわけではないので、始点と終点の設定も課題だ。無人環境が前提なので、うまく動かない時のフェイルセーフ機構もつけておかないと事故の心配がある。モーターが止まらなくなってコードを切ってしまい、断線、ショート、発火などの最悪の事態まで考えておかなければ、冗談では終わらない。

 考えることがたくさんあるし、しかも選択肢が多いので単純に決めていくのは難しい。まあ仕事ではないので、こういうのは楽しい悲鳴とでも言うのだろう。でも最近は仕事の夢を見ることが多い。多くの選択肢の中からひとつを決断し、それがうまく行ったときの快感は、やはり実際の仕事でなければ味わえないものだ。仕事の夢が多いというのは、この快感への欲求不満のあらわれとも言える。

 それはとにかく、考えるのに疲れると、無性に手を動かしたくなる。何か工作をしていないと不安な性格になってしまった。困ったものである。このところRasPiを触ることが多く、ハンダごてを握る機会が少ないので不満が溜まっている。最近のこの種の不満の解消は主にDC-DCコンバーターの工作である。

DC-DCコンバーターの道草(1) HT7750は1V程度でも動く
 DC-DCコンバーターは、これまで沢山、実用(あ、何かの機器に組み込むことです)として使ってきた。所長が電気工作に目覚めた少年時代には全くなかった概念の機器で、特に昇圧コンバーターは乾電池だけで高電圧のDCが使える夢のような装置である。何かと機会を見つけては使っている。

 数えてみると、3VのリニアPCMプレーヤーに5VのLCDをつけるための負電圧のコンバーターから、秋月のファンクションジェネレーターの両電源、ガイガーカウンター2号機の電源、FPGAを使ったフォトフレームのTFT液晶バックライト電源など、4つも使っていた。

 特にあてがなくても作る。部品数が少なく、簡単に結果が見られるので作っていて楽しい。小さなブレークアウト基板に、ちまちまとした部品をつけようと一生懸命考えている時は、何もかも忘れる。へたった乾電池ひとつで、高輝度の白色LEDが煌々と点くのを見ると、いつも感動する。

 これまでこのブログに紹介していないDC-DCコンバーター自作基板も結構ある。アジア製(台湾)のHoltekのHT7750という廉価なコンバーター(秋月で5 ヶ¥200)を使った基板も随分前に作った。こいつ結構性能が良く、1Vを割る乾電池でも5V近い電圧を発生する。

S_p6295917  オシロで見てみると、パルスが他のDC-DCコンバーターに比べれば大きいが、アナログアンプに使うものでもなく、LEDぐらいだったらこれで十分である。何しろ安いのが嬉しい。

 このHT7750は、5Vで最大電流が200mA程度だが、もっと大きな電流のとれるDC-DCコンバーターチップもある。ただ、ブレッドボードではうまく動かなかったり、突然、具合が悪くなって動かない時があって結構気難しい。

 一旦動かなくなると、アナログに弱い当研究所では、なかなか原因をつきとめられない。このあいだのLM2735のときもそうだった。この石は、出力9Vで1A近い出力が出せるのだが、どうも相性が悪い。

DC-DCコンバーターの道草(2) LM2735不調。3つも壊してしまった(6/26/2013)   LM2735(DigiKeyで¥308)は、ストロベリーリナックスのブレークアウト基板で知り、そのあとDigiKeyで、2回にわけて計5つも買った石である。この基板そのものはFPGAのフォトフレームで使った。TFT液晶のバックライトの電源(9V)に5Vから昇圧して全く安定して動作した。

 これに味を占めて、ガイガーカウンター2号機のChaneyキットの電源(9V)にも使った。DigiKeyから石を買い、データシートの推奨回路で昇圧コンバーターを作った。一個は、ガイガー管の高圧に触れて壊したが、取り替えてその後は問題なく動いている(はずだ。長期貸与中)。

 さらに、これはブログにも紹介したが、この2つの成功体験を元に、006P乾電池の充電池化を目論んで、電池ごとケースにいれる工作に挑戦した。動くところまで行ったのだが、停止時の消費電流が大きすぎ、実用化は断念した。S_p6275060  ところが、その後、この電池の状態がおかしくなった。この電池システムは、リチウム2次電池を使っており、過放電を防止するためにリセットICとFETを使ったシャットダウン回路がついている。これが少し使っただけで、リチウム電池の電圧は規定以上あるのに出力が出なくなってしまう。

 ちょうどハンダ付けに飢えていた頃だったので、LM2735を取り替えてみた。暫く動いていたが、また動かなくなってしまった。ふーむ、このシャットダウン回路が悪さをしているのかもしれない。この部分だけが快調に動いているものと違うところである。理屈はつけられないが、ここしか疑うところがない。

 シャットダウン回路をとりのぞいて調べてみた。おやあ、一番最初、こわれたと思ったLM2735が生き返った。2番目の石はもう、うんともすんとも言わない(入力電圧が出力されるだけ)。LM2735の交換は、ピッチ変換基板で低温ハンダで取り替えていたので、ハンダ付けの熱が原因かもしれない。

 生き返った方も規定どおり昇圧されるが、無負荷で100mA以上が流れる異常な状態でとても実用にはならない。3つめのLM2735をつけてやっと元に戻った。結局、高圧で失った最初の石と、この2つ合わせて3つもLM2735を失ったことになる。原因は良くわからない。

DC-DCコンバーターの道草(3)PT1301のテスト
 DC-DCコンバーターでは、ブログに紹介していないもうひとつの基板がある。Aitendoで見つけた低電圧用のDC-DCコンバーターチップ、PT1301(¥100)を使った基板である。この石はこのあいだのペンライトで使ったストロベリーリナックスのコンバーター基板のAS1322チップとほぼ同じ性能のようで、0.8Vから3Vに昇圧できる。

 3W白色LEDをたったひとつの単4電池でつけるこのペンライトが思いのほか使い勝手が良く、2台目を作ろうと、PT1301のブレークアウト基板を作り始めた(まあ、PT1301を動かすため2台目を作ることに決めたようなものだが)。S_p6295911

 手持ちに指定のチップインダクターがなく、秋月の大ぶりのインダクターを使ったのでストロベリーリナックス基板のように薄くは出来ない。でもペンライトのケースは余裕があるので、少々部品の背が高くても十分中に収容可能だ。部品数が少ないので簡単に組みあがる。点灯してみる。全く問題なく3Vがでて、まばゆく白LEDが点った。

 基板は切り出す時、一応アートワークしておくのだが、作ってみると1列小さくできた。本当はこんなことをやっていはいけないのだが、サーキュラーソーでさらに1列分切り離してブレークアウト基板を小型化し、悦に入る。なにしろ手を動かすことが目的のような工作なのでやることが完全に本末転倒している。

DC-DCコンバーターの道草(4)MC34063の0.22オーム抵抗(6/28/2013)

 PT1301と同じ時に、Aitendoで買ったMC34063(¥100)である。これも目的もなく買ってあった。この石は、ウェブで色々とりあげられているNJM2360のオリジナルICであることを後から知った(NJM2360がセカンドソース)。

 MC34063の推奨回路には、0.22オームという超低抵抗が入っている。これで過大電流を制限できるしかけなのだそうだ。なくても別に動作に問題はない(過大な電流が流れてもシャットダウンしないだけ)。

 0.22オームのような、こんな低抵抗は通常では売っていない。どこで売っているのだろうと、ウェブを探し始めているうちにMC34063そのものを無性に動かしたくなった。この抵抗はなくてもかまわないと言われると。「へそ曲がり」の気性がまたむくむく起き上がって、どうしても抵抗を揃えて動かしたくなった。

S_p6305930  ウェブではさすがに簡単に買えるところは見つからない。見つかっても数十円の単価のものに送料¥525では割が合わない。秋葉原駅下のラジオストアやラジオセンターあたりを探せばあるのかも知れないが、気難しい店員やおやじとの応対は気が重い(何百個も買うのならともかく)。

 理想は、2012くらいのチップ抵抗だが、だめもとで久しぶりに千石の地下の部品売り場を覗いた。おお、さすがは千石である。チップ抵抗の1オーム以下はなかったが、1/2Wクラスなら、0.1オームからちゃんと標準系列の抵抗が揃っていた。

 0.22と0.47Ω、それに1/8Wの1Ωを揃える。全部で¥50しない。肩の力の抜ける買い物である。感心にも、秋月で衝動買いした高性能LCRメーター(DE-5000)は、この超低抵抗をきちんと測定した。たいしたものだ(他のマルチメーターは1オーム以下は計るたびに違う)。

 ブレッドボードで組んでみる。実に5台目くらいのDC-DCコンバーターの自作だ。回路もみな同じなので殆ど覚えてしまっている。簡単に組みあがった。当研究所ではブレッドボードでDC-DCコンバーターが動かなかったことは幸い一度もない。

 MC34063のDC-DCコンバーターは、何事もなく、3Vの乾電池から、9V以上の電圧を出力した。念のため秋月で買ったあったNJM2360(2ヶ¥150)に差し替え、これも問題なく動くことを確めた。NJM2360の方が低電圧(2.6V)から出力できるらしいが、白LED(順電圧3.0V)ひとつくらいの負荷では、どちらも、2.4Vくらいから電圧が出る(9Vには届かないが)。

S_p6285896

 こうした、ちまちました実験は楽しいが、やはり何か実用的な目的がないと、すぐにあきてくる。そろそろ、ウェブカメラの可動部のプロジェクトに戻ろう。プラスティックギアの穴あけ用の工具も買ってきたことだし。

| | コメント (9) | トラックバック (0)

2013年6月17日 (月)

RaspberryPiのライブカメラを外からアクセスする

とんすけさんのMotion Playerシールド
 RaspberryPiの話の前に、報告しておかねばならないことをひとつ。すんさんの掲示板にも書いたが、とんすけさんのMotionPlayerシールドのことである。少しトラブルがあったのだが、とんすけさんの手助けで簡単に解決したので、ここでお礼を兼ねてご紹介する。 S_p5265875_2

 とんすけさんには大変お世話になった。この場を借りてあらためて御礼を申し上げておきたい。このMotionPlayerシールドとは、STM32F4-DiscoveryをベースにSDカードに入った音楽ファイルや動画ファイルの再生を液晶のタッチパネルで操作するプレーヤー基板のことで、ファームウエアが提供されており、ピンヘッダーをハンダ付けするだけで動作する。

 これを知った、そもそものきっかけは、例によってshuji009さんが、すんさんの掲示板で絶賛紹介されたことからであるが、とんすけさんそのものは2年ほど前、やはりshuji009さんの紹介で、STM32F103の外部メモリインターフェースFSMCを使ってLCDをドライブし、60fpsの動画を成功させた人として記憶に残っている。凄い人だなあと感心していたが、驚いたことに、この道のプロではなくアマチュアの方だそうである。いや凄すぎる。

 それはともかく、所長は、何度も言うように、「格安」とか「破格の値段」というのに弱い。秋月で多種類に亘って売り出されているCPU基板、STM32(8もあるが)Discoveryシリーズは販売促進という狙いで何しろみんな思い切った価格設定である。用もないのについ手が出てしまう。

 MotionPlayerのCPU基板STM32F4-Discoveryは秋月で発売後すぐ売り切れになり、直前に手に入れて、ひとりほくそえんでいたのだが(悪い性格だ)、間もなく潤沢に出回り始めて、そのうち興味も薄れ、現物はパッケージから出すこともなく部品庫に眠っていた。

 もうひとつの必要なパーツ、Aitendoの3.2インチTFT液晶は以前、直営店の店頭で見つけて、あてもないのに買い込み、これも部品庫のこやしになっていた。部品番号を確かめる。間違いない。同じ液晶基板だ。これで2つも長期在庫がさばける。これはもうこのシールドを買うしかないだろう。週末にネットで銀行振り込みをしたら月曜の夜にもう届いた。恐るべき早さである。

 ところが、これが動かない。画面は白いラスターのままで、何の映像も映らない。シリアル端末をつないでメッセージを出してみるとソフトそのものは動いているようだ。タッチパネルも何か感じているが肝腎の画像はでない。

S_p5145868

 ピンソケットの接触不良などは念入りにテスターで測って問題なし。TFTの初期不良が一番疑われるが確信はない。買ったのはもう2年近く前で今さら交換を要求するのも気が重い。それに、わざわざ出かけて行って交換して同じだったら目も当てられらない。思い余って、とんすけさんに、何か情報はないかとメールを出してみた。

 すると本人から、すぐ返事があり、送ってくれれば調べてあげると言われた。販売元でもないのにそれは申し訳ないと断わろうと思ったが、彼は複数台持っているとのことなので、正常に動く1台を貸してもらえば嬉しいのだがと少しあつかましいお願いをしてみた。

やっぱり初期不良だった。AitendoでTFT液晶は買いなおし(5/19/2013)
 まもなく返事があって、こちらの申し出を快く承諾されて完動品を送るとの報せが届いた。いやあ、これは有難い。待つこと数日。分厚いエアシートに包まれて、TFT液晶が届いた。感激、感激である。

 早速、接続してみる(ピンソケットは接続済み)。全く問題なく稼動した。音楽再生でpauseをかけると時々大きなノイズが入るのが少し気になるが(これはSDカードのバッファーサイズを大きくすると殆ど解消した)、動画も出る。タッチパネルの操作も楽だ。いや素晴らしい出来映えである。やっぱり2年前に買ったTFT液晶の方は初期不良だった。

 とんすけさんに借りたTFTを返却しようとした時、ふと思いついた。不良品のTFT液晶をAitendoに持ち込んで交換してくれる保証はない。お店で不愉快な気持ちになるくらいなら、これを、お礼がわりにとんすけさんに差し上げてはどうだろうか。

 とんすけさんが言うように、ちょっとしたことで直るのかも知れないが、こちらにはテスト環境もないし、不具合を特定できる技術も持っていない。とんすけさんのところで生き返ってくれれば、生きとし生けるものに少しでも幸せが訪れるというものだ。

S_p5265876

 何か、修理を催促しているようで、最後まで迷ったのだが、こちらで持っていてもしようがないし、その旨、説明すれば理解してもらえると期待してメールを送る。予想はあたって快く受け取ってもらえた。2台を送る。ささやかなことだが、気持ちが通じると言うのは嬉しいものだ。

 次の日、秋葉原に出て、Aitendoを訪ね、件のTFTを買いなおした。幸い在庫はまだ沢山あった。ここに来るとついいらないものを買ってしまうのだが、今日は、USB-TTL(CP2102の方)ブレークアウト基板だけで我慢する(RasPi用)。買って帰ってTFTを早速テスト。もちろん何の問題もなく稼動した。

画像のフレームレートを上げる(5/31/2013)

 RaspberryPi(以下RasPi)の話に戻ろう。LogicoolのウェブカメラC270を使ったRasPiのストリーミングビデオは、自宅内のLANでは、問題なく画像を見られるようになった(ただし、motionの画像を見るのは、IEでは不能、FireFoxはメモリーリークでハングする。Chromeは全く問題ない)。

 画像の解像度は、358X288(motionのデフォルト解像度)ながら、前の30万画素のカメラに比べれば、格段に綺麗な映像である。次は、これを外から見られるようにすることと、このカメラの可動部を制作することだが、その前に解決しておきたい問題がある。

 それは、画面のフレームレートである。現在は、motionのパラメーターファイルをいじっても、1秒に2~3回程度(2~3fps)にしかなっていないので、動きの早い猫などの姿は満足に捉えられない。もう少し多くないと実用的とはいえない。Moti_conf

 motionの設定ファイル(motion.conf)は、非常に多くのパラメーターがあって、ともかくわかりにくい。少々いじっただけでは改善されなかった。PCのUbuntuで動かしてみたら全く同じようなフレームレートなので、低いのはRasPiのハードウエアの限界ではなく、この設定のせいに違いなのだが、どこを直せば良いのかわからない。

 何度目かのmotionの設定ファイルの見直しで、やっと見つけることが出来た。ファイルの最後の方にある、Live Webcam Serverという設定項目群の中にフレームレートを規定するところがまだあったのを見落としていた。

 motionのフレームレートを設定するパラメーターは、いくつものところにあり、2ヶ所まで変更してあったのだが、最後の設定が、defaultの1の(1fps)のままだったのである。

 いくら、その前の設定でframe_rateを上げていてもストリーミングのときには、ここで下げられてしまうのである。このwebcam_maxrate というパラメーターを1から、30にすると、映画並みの滑らかさになった。

 おーし、猫がケージから飛び降りても、しっかり画像がとれている。良いぞ。ただし、ネット上のデータ転送量は、これまでの毎秒12KBから50KB以上に跳ね上がった。まあ、これはとりあえずそんなに大きな問題ではない。次は、このストリームを外からアクセスするしかけの開発である。

ポートマッピングのテストは成功(6/4/2013)
 本来の目的は、留守宅にいる猫たちの監視である。外からライブカメラ的に見えなければ意味がない。一般家庭のルーターは、一応セキュリティ機能がついていて、外部からのアクセスリクエストは殆ど中に入れないようなしかけになっている。このままでは外から見ることは出来ない。

 というより、殆どの家庭用のルーターは、1つのグローバルアドレスをいくつかのローカルアドレスを持った機器で共用しているので(IPマスカレードともいう)、届け先を指定しない限り、外部からのパケットは届かない。

 外からのアクセスを可能にする方法が、ポートフォワードとか、ポートマッピングというしかけである。外部からのリクエストパケットのポート番号をキーに特定のローカルアドレスの機器に振り分ける。こうすることによって外部とのネットワークゲームや、ストリーミングが可能になる。

 ただ、不用意にポートを開けると、前にも書いたように、ネット上を飛び回っているロボットのポートスキャンを受けてあらぬ攻撃を受ける恐れもあるので、細心の注意が必要だ。画像転送以外に、カメラの位置制御もやりたいのでポートは複数あける必要がある(Apacheを立ち上げて、HTTPプロトコル(80)一本でやる方法もあるが)。

 偉そうなことは言っているが、実は、これまでは講釈だけでこういう実際の作業は始めてである。恐る恐るルーターのポートマッピングのテストを始める。motionのストリーム用のTCPのポート番号は8081なので、まず、こいつだけ開けて、Raspiのローカルアドレス(192.168.0.5)に通すことにする。Photo

 ダイナミックDNSのサービスを受けなくても、自分の今のグローバルアドレスで、外から直接ここへアクセスすれば、所定(RasPi)のサーバーが外から見えるかの確認は出来るはずだ。自宅のルーターの設定サイトにログインしてポートマッピングのエントリーを追加する。

 作業そのものは、1分もかからない。あっという間に終わった。本来なら、ネットカフェとか会社とか別のサイトからアクセスしなければわからないのだが、世の中には、色々なサービス(一種のプロキシーサーバー)をしてくれるサイトが結構沢山あってこういうことを、簡単に調べられることがわかった。

 こうしたネットサービスそのものの信頼性を疑う向きもあるが、疑ってばかりいても始まらない。ここのサイトで実際に試してみる。ルーターのポートマッピング(フォワード)を有効にして、テスト。おお、これまで拒否していた、ポート8081の認証に成功した。我家のルーターで閉じると、ちゃんと拒否した。良いぞ。動いている。

 次は、ニューヨークとベルリン、メルボルンの3ヶ所からアクセスしてくれるというこのサイトでテストする。すごい。3ヶ所とも1秒内外でアクセスに成功した(このサイトの説明が真実なら)。ネットワーク的には無事つながっているようだ。

DiCEと同じ機能を持つ別のスクリプト開発(6/6/2013)
 外から8081ポート(motionのストリーム)にアクセスできることが確認されたので、次は、これを名前でアクセスするしかけの準備に入る。グローバルアドレスは固定ではないので、プロバイダーが変更したときは、これに自動的に追従する機能が必要だ。

 ネットを調べると、DiCEというパッケージが一番使われているようだが、驚いたことに、このパッケージは、日本の個人の制作である。もともとはWindows用のパッケージだが、Linux用もある。ただ、サポートはLinux用は余りされていないようだ。

 しかし、前にも書いたように、必ずしもこれを使わなくても、ダイナミックDNSのメンテナンスは自作スクリプトでも出来るような話がWebに出ている。へそ曲がりでは誰にも負けない所長である。自分で作りたくなった。久しぶりのLinuxのプログラミングだ。心がはやる。

 検索を続けているうちに、ちょうどこちらが使おうとしているNiftyのDDNSサービスを自動化するスクリプトのソースを公開しているサイトを見つけた。これは助かった。細かい、プロバイダーとのやりとりはそっくり真似をすることが出来る。ありがたくソースを頂く。

 Perlで書かれている。Perlなら、昔、Linuxに夢中になっていた頃、ウェブのCGIを作るために、本を2冊も買って勉強し、実際に通信ログの統計ソフトを開発したことがある。懐かしい(所長の蔵書は第2版で写真はPerl5のもの)。

Perl_ref_book1

  久しぶりに、Perlをお勉強する。ネット上のソースを、手元の参考書や、ウェブの情報を頼りに解読していった。perlは最近、Pythonとか、日本発のオブジェクト指向スクリプト言語Rubyなどに押されているようだが、とても強力な言語だ。

 ただ、余りにも色々なことができるため(この大量の特殊変数はとても覚えきれない)、人が書いたソースの可読性は余り高くないかもしれない。ただ、件のソースは、凝ったことはしていないのでまあまあ読み取れる。

それにしても、このwgetを使ったサイトの解析にはしびれた。

# @nifty DDNSのIPアドレス更新ページをwgetでアクセスし、現在のIPアドレスを確認 

$wget = `wget --secure-protocol=auto -O - -q $atniftyddns?$conf_ipaddr`;
$wget =~/[0-9]+(\.[0-9]+){3}/; #この正規表現で、nnn.nnn.nnn.nnnの文字列抽出!
$current_ip = $&; #抽出したIPアドレスを変数に収容

 これだけのスクリプトで良くあの大量のHTML文書から、IPアドレスを抜き出しているものだ。たったの1行である。ソースコードをRasPiにとりこみ、シリアル端末にメッセージを出すコマンドを追加してテストを始める。

 現在使っているAUひかりは、一旦つながってしまうと滅多にグローバルアドレスは変わらないようだ。このところ全く変更がない。どうも、それほどあせって自動化を図る必要もなさそうだ。とりあえず手動でコマンドを出して動かしてみる。cronにするのは後でも良い。

 よし、現在のグローバルアドレスが端末に出て、このPerlスクリプトが書いたテキストファイルに収容された。ここはこれくらいで良いだろう。まだ、NiftyからダイナミックDNSのドメイン登録をやっていないのでこちらを先に進めることにした。

DDNSのドメインを登録したが、勤め先からの接続は失敗(6/10/2013)
 NiftyのDDNS(ダイナミックDNS)サービスは、XXX.atnifty.comというサブドメイン(XXXが自分の名前)なら、一ヶ月¥200で、独自のドメイン(YYY.comや、ZZZ.jpなどが選べる)なら¥400で借りることが出来る。

 迷ったが、まあ最初なので、安い方にしておく(登録したドメインネームは、まだ認証機能がついていないのでここでは公開できない)。前にも書いたが、このNiftyのDDNSのサービスのサイトはとてもわかりにくいところにある。

 しかしページが見つかれば設定は至極簡単である。申請して、その名前がまだ使われていなければ、ほんの数分で登録が終わる(もちろんNiftyユーザーとしてログオンする必要あり)。登録がOKになったので、早速テスト。自分のPCでpingを打ってみる。

 だめだ。not reachableになってしまう。中からは名前を引くとグローバルアドレスになるからだめなのだろうか。いや、グローバルアドレスの直打ちならpingは通る。おかしいところはない。頭を抱えた。

 しかし、心配は無用だった。暫くすると、pingが返ってきた。そりゃそうだ。すべてのネームサーバーに瞬時に登録されるわけではない。沢山のサーバーを経由するわけだから少し時間がかかるのは当たり前なのだ(一旦つながれば、キャッシュされるらしく瞬時に帰ってくる)。

 次の日は出勤日だった。朝、出かける前にRasPiの電源を入れ、ウェブカメラを生かしたまま事務所に出た。ひととおりの仕事を片付けて、どきどきしながら、RasPiのストリーミングサーバーにアクセスする。グローバルアドレスが前日と替っていないことは確かめてある。

 残念。つながらない。それならとグローバルアドレスの直か打ちで8081のポートにアクセスしてみた。しかし、これもつながらなかった。ただ、門前払いでなく、ネットはつながるが、向こうのレスポンスがタイムアウトしているような感じだ。それならと、pingを打つ。何と、この事務所、pingが通らない。まあ、IT関連の事務所なので、ICMPパケットのフィルターが掛けられているようだ。

遂に外部からのアクセスに成功(6/12/2013)
 帰宅して、早速つながらない原因を追究した。内部のローカルアドレスでは問題なく動く。ルーターのポートマッピングのエントリーを調べる。今、2台のRasPiがいるので(1台はSAMBA用)、念のため、8081のポートは、2つのローカルアドレスにエントリーしてある(特にエラーにはならない)。

 ふむ、今、ストリーム用に生きているのは、192.168.0.10の2台目のRasPiで、もう一台の192.168.0.5は電源が入っていない。順番は、あーっ、192.168.0.5の方が先頭だ。このエントリーをルーターがどう解釈するかだが、ルーターが親切に2台を調べて動いている方にデータを送るなんてことは殆どありえない。

 これだ、これだ。これに違いない。事務所で動かなかったのは、電源の切れている192.168.0.5の方に8081リクエストを送っていただけに違いないだろう。あわててポートマッピングのエントリーをストリーミングサーバーにしている192.168.0.10の方だけにする。

 不具合(と思われる)箇所はすぐ直したが、その確認は今ここでは出来ない。意気込んだ気持ちの吐け口がわからなくて、ウェブを手当たり次第に検索したときである。自作したWWWサーバーが動いているかどうかテストしてあげるという親切なウェブサイトを発見した。

Www おおー、これなら外に行かなくても、自分のところからウェブサーバーの状況を見ることが出来そうだ。ポート番号が、HTTPの80番でないのが少々心配だが、だめもとである。早速、このサイトの項目に http://XXX.atnifty.com:8081/ と入れてみた(XXXは仮名)。

 やった、やりました。見事に、1Fに設置したライブカメラの映像が、PCに出現した。ヒャッホー、遂に、外部から自宅内のウェブカメラの映像が見えた瞬間である。2年前のBeagleBoardあたりから狙っていた機能が遂に実現したのである。Photo_2

 この数日後、事務所のPCで、実際に映像が映ることを確認した。名前引きでもちゃんと見える。これで間違いなく、ストリーミング映像は外部からアクセスできることがわかった。ライブカメラプロジェクトは、いよいよ次の大物、カメラのパンとチルトのモーター制御の開発に移ることが出来る。あ、DDNSの方もテストしておく必要があるか。

| | コメント (1) | トラックバック (0)

« 2013年5月 | トップページ | 2013年7月 »