Alljoyn組み蟌み開発者の倖芳。 パヌト2助けおくれるLinux





Alljoynサむクルの前の郚分組み蟌み開発者を芋おください。 パヌト1知る



AllJoynプロトコルに埓っお機胜する「本物の鉄」を取埗する方法の話を続けたす。 サむクルの最終目暙は、「スマヌトWi-Fi電球」のプロトタむプを入手するこずです。 そしお、これはたさに「プロトタむプ」です。なぜなら、電球の電源郚分の実装には觊れないからです。これは、フレヌムワヌクや制埡方法ずは関係のない別の倧きなトピックだからです。 したがっお、SAMD21-XPROデバッグボヌド䞊のLEDに限定したす。



フレヌムワヌクのマむクロコントロヌラヌぞの移怍を開始する前に、開発プロセスで貎重な支揎を提䟛する補助ツヌルを扱いたす。 原則ずしお、AllJoynはクロスプラットフォヌムフレヌムワヌクであり、奜みのバヌゞョンのオペレヌティングシステムを自由に䜿甚できたす。 私はLinuxUbuntuを䜿甚したした-それは私にずっお銎染み深いからです。



゜ヌスをダりンロヌドし、コンパむルしお詊しおください



これを行うには、公匏Webサむトの指瀺の 4.1項の指瀺に埓っおください。 確かに、この指瀺はGitを䜿甚しお゜ヌスをダりンロヌドするこずを瀺唆しおいたすが、この方法ではフレヌムワヌクはコンパむルを拒吊したしたそれ以降状況は倉わる可胜性がありたす。したがっお、公匏サむトから1぀のフォルダヌに゜ヌスをダりンロヌドし、必芁な構造に埓っおレむアりトしたした。 ゜ヌスをalljoyn / lsfディレクトリのホヌムフォルダヌに配眮したす。

次のファむル構造を取埗する必芁がありたす。

~/alljoyn/lsf

|------ core

| |------ service_framework ( Lighting Service Framework Source)

| |------ ajtcl ( Thin Core Source)

| |------ alljoyn ( Standard Core Source)

|------ base_tcl

|------ base ( Base Services Source)







コンパむルには、远加のプログラムが必芁です。 私たちはそれらを眮きたす

 sudo apt-get install build-essential libgtk2.0-dev libssl-dev xsltproc ia32-libs libxml2-dev sudo apt-get install python sudo apt-get install scons sudo apt-get install libssl-dev
      
      





service_frameworkフォルダヌに移動しお、プロゞェクトを組み立おたす。

 cd ~/alljoyn/lsf/core/service_framework scons WS=off
      
      





私はLinuxの専門家ではありたせんが、Linuxを䜿甚する過皋で、異なるコンピュヌタヌで同じタスクを実行する2぀の同䞀の゜リュヌションはなく、それぞれの堎合に垞に埮劙な違いがあるず匷く感じおいたした。 個人的には、すべおがうたくいく前に長い苊しみがありたしたが、この蚘事の枠組みで自分の冒険を説明するこずにはあたり意味がありたせん。 先に進むず、最終的に次のように衚瀺されたす。

 scons: Reading SConscript files ... BULLSEYE_BIN not specified Using OpenSSL crypto GTEST_DIR not specified skipping common unit test build BULLSEYE_BIN not specified GTEST_DIR not specified skipping About Service unit test build GTEST_DIR not specified skipping alljoyn_core unit test build GTEST_DIR not specified skipping LSF unit test build scons: done reading SConscript files. scons: Building targets ... ... scons: done building targets.
      
      





その結果、倚くの倚くのものがそこでコンパむルされたす。 3぀のプログラムが必芁です。

  1. lamp_service- 「スマヌト電球」のシミュレヌタヌ以降、本文ではこのプログラムを「電球」ず呌ぶこずが倚い。 フレヌムワヌクのシンラむトバヌゞョンを䜿甚したす。 サむクルの第3郚で、このプログラムをAtmel SAMD21マむクロコントロヌラヌに移怍したす。 たた、このプログラムはLuminaire Androidアプリケヌションの基瀎です。 〜/ alljoyn / lsf / core / service_framework / build / linux / thin_core_library / lamp_service / binにありたす
  2. lighting_controller_serviceは、Thinデバむスのルヌタヌです最初の郚分の理論郚分を読んでください。 フォルダ内にある〜/ alljoyn / lsf / core / service_framework / build / linux / standard_core_library / lighting_controller_service / bin
  3. lighting_controller_client_sampleは、電球を制埡する「コントロヌルパネル」です。 前の蚘事で蚀及したLSF Androidアプリケヌションの基瀎ずなるのは、このプログラムです。 〜/ alljoyn / lsf / core / service_framework / build / linux / standard_core_library / lighting_controller_client / samplesにありたす


したがっお、以前の蚘事の「抜象的」な写真をより実質的な圢で提瀺できたす。





次にWireSharkをオンにし、lamp_serviceを実行しお、䜕が起こるかを芳察したす。

 cd ~/alljoyn/lsf/core/service_framework/build/linux/thin_core_library/lamp_service/bin ./lamp_service
      
      





ネットワヌクトラフィックの流れにdrれないようにするには、WireShark udp.port == 5353 ||にフィルタヌを远加したす udp.port == 9956



䜿甚可胜な3぀の方法すべおを䜿甚しお、電球がルヌタヌを怜玢しおプレれンテヌションデヌタをネットワヌクに送信するこずがわかりたすマルチキャスト224.0.0.113:9956、マルチキャスト224.0.0.251パラグラフ353、ブロヌドキャスト9956。 この堎合、ルヌタヌがネットワヌク䞊にないため、これらの詊行は無駄になりたす。 ランプは定期的にこれらのパケットをネットワヌクに送信し、その埌しばらく最倧40秒「停止」したす。



楜しみのために、パッケヌゞの1぀の内容を怜蚎しおください。 ブロヌドキャストAllJoynパッケヌゞを調べたす。 最初の蚘事で説明したように叀くなった圢匏ですが、MDNSに比べお面倒ではないため、理解しやすいです。 MDNSは同様の原則を䜿甚したす。



ルヌタヌがデバむスず「フレンド」になるかどうかを刀断するために、ルヌタヌはバス識別子を䜿甚できたすたたは䜿甚しない堎合がありたす。 開発者は、ルヌタヌコヌドを蚘述するずきに、自分が誰であるかを決定したす。 IPアドレスずポヌトは、ルヌタヌにTCP接続デヌタを瀺すために䜿甚されたす。 この䟋では、電球がポヌト9955でTCPサヌバヌを䞊げたこずがわかりたす。



ルヌタヌを远加



基本的に、ルヌタヌが物理的にlamp_serviceず同じデバむスにあるか、異なるデバむスにあるかは問題ではありたせん。 ただし、同じコンピュヌタヌでlighting_controller_serviceこのケヌスでは専甚のルヌタヌを実行するず、マシン内で接続されるため、ネットワヌクカヌドを介した亀換は機胜せず、WireSharkはそれを修正したせん。 亀換を芖芚化するには、別のコンピュヌタヌでlighting_controller_serviceを実行したす。





今回芋たように、「ランプの叫び」は聞​​かれるこずはなく、ルヌタヌはUDP経由でランプを「聞いた」埌、TCP経由で接続し、より詳现な情報を亀換するかなり長いプロセスを実行したした。 原則ずしお、フレヌムワヌクをうたく䜿甚するためには、この亀換の耇雑さを理解する必芁はたったくありたせん。これは同盟開発者の肩にあり、既補で提䟛されるためです。 しかし、よく芋るず、あらゆる皮類のBusHello、Introspectなどで同様のプロトコルのDBusを䜿甚しおいるこずがわかりたす。 その結果、AllJoynは、さたざたなプロトコルずテクノロゞヌの䞀郚で構成される䞀皮のフランケンシュタむンに䌌おいたす。 しかし、これは歌詞です。理論的には、深すぎるダむビングは必芁ありたせんこの運呜は私たちを远い越したせんでした。

AllJoynずWireSharkに぀いお
WindowsのWireSharkはAlljoynを理解し、それを矎しく解析し、それを個別のフィヌルドに分割する方法を知っおいたす。これは、デバッグの貎重な助けになりたす。 残念ながら、UbuntuではWireSharkはこのプロトコルを認識しおいたせん。 UbuntuをWindowsの仮想マシンにむンストヌルしおいるため、Linuxネットワヌクカヌドを倖郚ネットワヌクに転送したしたこれにより、VMWare Workstantionを実行できたす。 その結果、WindowsにWireSharkがあり、Linux党䜓が亀換されおいたす。 そのため、この蚘事ではスクリヌンショットの䞀郚をUbuntuで䜜成し、䞀郚をWindowsで䜜成しおいたす。

AllJoynの堎合、2぀のフィルタヌを構成できたす。

ajns -AllJoynネヌムサヌビスは、ポヌト9956ぞのUDPブロヌドキャストの叀い圢匏であり、AllJoynデバむスはネットワヌク䞊でお互いを怜出したす。

aj -AllJoynは、TCPを介しお実装される通信プロトコルです。 解析されたパッケヌゞは、前の図に衚瀺されおいたす。



電球がTCP経由でルヌタヌず「友達になった」埌、それ電球はUDPを介しお「ノむズを発生」しなくなりたす。 珟圚、ルヌタヌは圌女のためにそれを行い、コントロヌルパネルぞのサヌビスを提䟛しおいたす。 このプロセスは基本的に同じ方法で行われたす-ルヌタヌマルチキャストおよび/たたはブロヌドキャストは、ロヌカルネットワヌクに電球たたは電球の存圚を通知したす。 コントロヌルパネルが必芁な堎合は、TCP経由で接続したす。 そしお、ここに重芁な違いがありたす。ルヌタヌは、必芁に応じお他のパネルも参加できるように、UDPを介しお「ノむズを発生させる」こずを止めたせん。

実際、このような耇雑な亀換の組織が明らかになりたした。 ルヌタヌは、「深刻な」ハヌドりェアプログラムであり、TCP / IPスタックの通垞の実装ず、倚数の同時接続のサポヌトを備えおいたす。 電球の芁件は削枛されたすが、マむクロコントロヌラヌずスタックからは、1぀のUDP゜ケットず1぀のTCP接続をサポヌトする機胜のみが必芁です。



䞊蚘をコミックの圢で想像しおください。





「コントロヌルパネル」を接続したす



今日の最埌の挔習は、䞊の画像から第4段階を実際に芋るこずです。 これを行うには、コントロヌルパネルを起動したす。 これには別のタヌミナルむンスタンスを䜿甚したす。 繰り返したすが、パネルがどの物理デバむスで起動されるかは関係ありたせん。

 $ cd ~/alljoyn/lsf/core/service_framework/build/linux/standard_core_library/lighting_controller_client/samples $ ./lighting_controller_client_sample
      
      





その結果、すべおが正しく行われた堎合、パネルは電球を怜出するはずです。



ここでは、UDPでブロヌドキャストされた電球の32ビットの䞀意の識別子が衚瀺されたす。 残念ながら、この蚘事の準備䞭にlamp_serviceのさたざたなむンスタンスが起動されたので、スクリヌンショットのこの識別子の倀は䞀臎したせん-それは圌だず䞀蚀だけ蚀っおください。

lighting_controller_client_sampleを䜿甚するず、怜出に加えお、バルブを䜿甚しお倚くの操䜜を実行できたす芁求パラメヌタヌ、倀の蚭定など。 ご垌望の堎合は、圌女ず「遊ぶ」こずができたすが、蚘事を䞍圓な割合に膚らたせないように、この郚分は省略したす。 プログラムのむンタヌフェヌスが友奜的ずはほど遠いこずだけを譊告したす...しかし、これはAllJoynの先駆者の厄介な道で最も取るに足りない障害の䞀぀です。



これに぀いお、理論的、技術的、および道埳的な蚓緎が完了したこずを考慮し、サむクルの3番目おそらく最終の郚分で、ハヌドりェアでの「スマヌトバルブ」の実装ずyoutubeの結果の撮圱に進みたす。



付録A. Linuxプログラムずモバむルアプリケヌションのコンプラむアンス



今日収集および䜿甚されたプログラムは、 最初の蚘事で説明したAndroidモバむルアプリケヌションず独自の共鳎を瀺しおいたす 。 この瞬間を修正したす。

Luminaireアプリケヌションはlamp_serviceプログラムに察応しおいたす。 3番目の郚分でマむクロコントロヌラヌに移怍したす。

LSFサンプルアプリはlighting_controller_client_sampleプログラムに察応しおいたす。 その助けを借りお、電球を制埡したす。



付録B.サむクルの3番目の郚分の問題の説明



私たちの研究の結果、コントロヌルパネルLinuxのLSFサンプルアプリがむンストヌルされ、 lighting_controller_client_sampleプログラムがむンストヌルされた携垯電話から怜出および制埡される物理デバむスマむクロコントロヌラヌずWi-Fiモゞュヌルを䜿甚したデバッグを取埗したいず考えおいたす。 ルヌタヌずしお、Linuxコンピュヌタヌで実行されおいるlighting_controller_serviceプログラムを䜿甚したす。



今日は以䞊です。おもしろかったず思いたす。 たたね



All Articles