MacとiPhone/iPadをWiFiルーター無しで接続
先日東京へ行ったとき、ミュージシャンの友人から
WiFiルーターの無いハコでライブするとき、
MacとiPadなどをWiFiで通信するにゃどーやって?
(iOSCやTouchOSCなど特に問題)
という素朴な疑問を投げかけられたんですが、
フツーにWiFiルーター持ち歩くのが一番手っ取り早い方法ではあるけど
実は、OSXは標準で自身がルーターになる機能もってるのです。
ほとんど使うこともないし地味すぎてあまり知られてないだけなんですが
ネット環境のない場所でMacとiPhoneを通信させるもう一つの方法であります。
アドホックというのはちょっと語弊あるかな〜?
無線LAN無し
有線LAN無し
もちろんインターネットも無し
Macを無線LANルーターとして機能させる。
こんな想定で設定してみます。
これはたとえばのネットワーク設定
Ethernet未接続
AirMacも「入」だけどどこにも繋がっていない状態
あとは、ネットワークの設定はなにもしない。(!)

つぎに、
システム環境設定の「共有」を開きます。

「インターネット共有」を選択し(まだチェックはいれないで!)
共有する接続経路を「Ethernet」
つぎにAirMacオプションを押します。

『ネットワーク名」に適当な名前を入力
これはWiFiにおけるSSIDです。WiFiサーチするときに出てくる名前
ライブ中に他の人がアクセスしてきても困りますのでWEPの設定もしておきましょう。

ここまでできたら、先ほどすっとばした、「インターネット共有」にチェックを入れます。
インターネット共有開始確認のダイアログがでるので開始してください。
これでMacはWiFiルーターとして機能します。
もちろんEthernetにはなにもつないでいないのでインターネットなどには繋がりません。
WiFiのLANのみのネットワーク構成されます。

このとき、AirMac状態をメニューバーへ表示するようになっていたらこのような扇+↑になっているはずです。

つぎにiPhone/iPad側の設定。
こちらは通常どおりのWiFi設定だけでOKなのです。
設定/ネットワークを開くと、さきほどMac側で設定したSSIDが見えるはず。
これをタップすると・

WEPのパスワードをきいてくるので入力してください。

無事接続されたら、IPを確認してみましょう。
右端の◎>をタップすると

取得したIPアドレス。
ルーターのIPアドレス。これはホスト側(Mac)のIPということです。
じつは、先に設定したインターネット共有では独自にDHCPが効くようで
クライアント側のIP設定が不要になるナイスな機能でした。

iOSCだとhost設定で↑のルーターIPを入力したり

TouchOSCもHostへルーターIPを入力してください

もちろん制御するアプリに併せてポートなども。
ほいでこれ忘れがちですが
ライブなどが終わったらインターネット共有のチェックは外してくださいませー。

————
あ、ちょっと捕捉
これEthernet無し、他のWifiルーター未接続前提でしたが
他のWiFiルーターへの接続は同居できません。
もし他のWiFiルーターへ接続済みの場合
「共有する接続経路」がAirMacとなり
「相手のコンピューターが使用するポート」にAirMacがでてこなくなります。
要はiPhone/iPadからはこのMacが見えなくなります。
まーiPhone/iPadが他のWiFiルーターへ接続すればいいんですけどね・

あと、共有するデバイスがiPhone/iPadだけではなく、有線のデバイスがある場合(Arduino+Ethershieldとか)
上の「相手のコンピューターが使用するポート」のEthernetをチェックすればおそらく大丈夫かと思います。
DHCPから取得できないデバイスなら 10.0.2.2〜255 で
他の機器とIPがバッティングしないユニークIPを手動で設定しておいてください。
iPhoneとWiPortのOSC通信(ひとまず成功)
iPhoneからUDPを送ってるだけなのでできるとは思ったけど
WiPortのシリアル出力がどんな感じになるかイマイチわからんかったので
実際に購入してやってみた。
テストセットはブレットボードにて
WiPortは面実装コネクタじゃないとあかんので、若松にて専用基板も購入。
これも2列のピンヘッダなのでさらにゲタ履かせ、ついでに通信確認のLEDも付けてみた。

それにしてもアンテナの同軸がWiPortのケースに干渉しててとっても気持ち悪い。。。。
これってどーなのさ??
あとで加工しとかなきゃ。

でもって、WiPortの設定は、基本的な設定(自分IP,ポートなど)、無線LAN(アドホックとか)、シリアルポート(ここでUDP、相手IP、相手ポートなどの設定をする)
これくらいでよかったんだけど、なんかよくわからなかったので
winにて説明書通りに設定。
仮想COMポートで(win用ドライバ)通信できることを確認。要はWiFiがちゃんと設定できてるか確認したかった。
これができてからmacにてUDPなどの設定を。
そーすると、こんな感じでiPhoneと繋がりました。
これはiPhoneから出しているMIDI用のOSCメッセージ
なんとなくMIDIっぽいメッセージで

こちらは実際の動画
ちょっと遅いのは、WiPortのシリアルポートの設定を9600bpsにしちゃったもんで。
あとで速くしてやってみる。
とはいえ、べつにOSCじゃなくてもいいんだよね。
iPhoneの通信部分を作るの面倒だったんで実装済みのOSC送信でやったんだけど。
しかもiPhone側のOSC受信はまだ未実装なので、iPhoneからデータおくりっぱ。
やっぱ相互通信できるようにちゃんとやらないばねえ。
ひとまずWiPortと通信できるってことで、これ何を意味するかとゆーと
iPhoneはMacやWinのPCと通信するのが基本だけど、
WiPort使うことで、こんどは非PCのワンチップマイコンと通信できるようになりますわ。
いわばスタンドアローンな機器(非PC)を無線制御できるようになるとゆー。
Bluetoothやシリアルポートが(正攻法で)利用できないとなると唯一外界と繋ぐ方法は無線LANしかないし
無線LAN-シリアルブリッジのWiPortが使える意味は、iPhpneを汎用デバイスとしてつかいたい
自分にとってはなかなか大きいのでした。
まだまだ不明なとこもあるから、さらに検証しとこ。
セミナーづく日々
何気にやることが多くて自分の中で空回り気味。
まだまだマルチタスクはできない性格なんすね。いかんいかん。
でもうんうん考えてるだけなので、何もしていないように見えるかも(笑)
そんななかMOSA主催のセミナー2件行ってきましたヨ。
iPhoneモノとCocoaモノ。
どちらもなかなか参考になったなあ。
昨日はCocoaでゲームという初心者向けのセミナーだったけど
講師の方も言ってたけど、さすがにプログラミング初心者でゲームまで
というのはさすがに苦しそう。。
むしろ全く初めて、Obj-C触ったことアリと分けてやったほうが良かったかも。
でも後半は駆け足だったけどすごく良かった。
はーなるほどーと。
ようやく「たのしいCocoaプログラミング[Leopard対応版]」が発売されました
発売日に渋谷の本屋さんで見かけたけど、amazonで予約してたので泣く泣くスルー
でも数日経ってもなかなかこねーとイライラしてたら
amazonからいつ発送できるかわからん旨のメールが!テメー
昨日やっと紀伊国屋で買えました。
中身はTiger版と変わらないものの、唯一のXCode3.1対応書籍。貴重です。
IBもそうやってやるんすね。
全然違うやり方でやってた(笑)
OSX用マルチタッチフレームワーク
Cocoa Multi-Touch Framework for Mac OS X
Apple純正ではないけど、だれかが作ったマルチタッチフレームワーク
iPhoneでタッチして、mac上にてマルチタッチのデータを拾えてる
ってことは、over LAN
てことは、以前やったFTIRマルチタッチで実装したTUIO(OSC)
よく読むとやっぱしTUIO
iPhoneでタッチした座標情報、ユニークIDなどをOSCでLAN間通信するとゆー
でもフレームワークでどこまで定義してるんだろ?ピンチとかドラッグとかやっぱあるんだろな
あったら楽だなあ
MobileMeの誤植(笑)
いろいろトラブル続きのMobileMeですが
友人からこれ発見!と連絡が
たしかに再現します(笑)わはは
コンタクト/新規連絡先を作成で途中まで入力して、別の連絡先をクリックすると
このナイスなダイアログが(笑)
なんとかなりそう
ちょとやり方変えてみたらいまんとこ不具合でてないや。
きっと自分が悪いにちがいない。。
データを受信したらその都度表示していくタイプで
単にHEXならHEXだけてれれーーっと表示するならそのまま表示してきゃいいんだけど
それぞれ表示方法の違う3カラム表示なので変な変なやり方で実装しちゃった。
TextView3つとかすりゃいいんだろうけど、スクロールとかめんどくさそうで。。
なのでカラムごとのStringデータを作ってこれを結合
データくるたびにこの結合したStringを行として書き換えることにしちゃった。強引!
TextViewの行をRangeで指定してデータごと書き換えてたんだけど、例の表示とりこぼし
みたいな現象がよくわからんので、今回この方法で。
でも、延々と表示してたらいつか破綻するよな(笑)
ある程度いったら最初の行は削除していかないばね。。
こゆストリーム的な表示ってどやってるんだろう?
あとは規格外のボーレート実装できるかやってみよっと。(MIDI用の 31250bps)
NSTextView
ん〜バグなのか、やり方が悪いのか、
NSTextViewで不可解な現象。。
UARTcomでの表示で、ちょくちょく表示されなかったり、
表示されないのがまとめてだだっと表示されたり
でもでデバッグ確認でNSLogでコンソールに文字吐くと、不具合がでなくなる。
ん〜〜〜〜????
どおしよう。。
って、いまこれに集中するわけにもいかないのがもどかしい。。
UARTcom(OSX用簡易シリアルターミナル)
16進 / 10進 / ASCIIの3カラムで表示できた。
この表示方法、正直無理矢理な気がするんだけどこれでいいのかどうか。。。(笑)
あとは表示クリア実装と、メモリリーク潰し。
とおもったらやたらCPU負荷が重い。。150,180%あたりまえ。
やっぱマルチスレッドで素の無限ループはだめなんだな。そりゃそーか(笑)
とりあえず0.1秒眠らせつつ回すことに。これじゃ遅いかなあ
とりあえずこれでAVRのデバッグ楽になるかな〜〜
Cocoaで自作シリアル通信ソフト・続
受信したデータを表示する部分。
普通にだらだらと表示するだけなら素のNSTextViewで事足りそうだけど
16進、10進、テキストを3カラムで同時にスクロールとなると、ちょっと手強いぞ。
NSTextViewを3つ並べてスクロール同期(ってできるんだよねきっと)というのと
1つのNSTextView内でフォーマットして表示させるか
悩みどころ
OSX(cocoa)のシリアル通信ソフト -追記
Cocoaの勉強がてらこないだからぼちぼち作ってます。
初めてのObjective-C&Cocoa。
OSXでも使えるシリアル通信ソフトはZTermとかJermもあるけど
AVRとかのシリアル通信ではテキストのやりとりはちょっと避けたいので(printf使うと容量食うし)
デバッグ用にバイナリでのやりとりしやすいように、ほんでGUIで。
でもまーtermios使ってるだけなんですけどね〜。
とりあえず送信はいいみたいなので、
次受信。これが本番。
とはいえ、これは派生ブツで、ほんとは使いやすいUARTクラスを作りたかったんですた。
Macと外部(AVR)のやりとりする場面も増えそうなので
—-追記
受信はマルチスレッドにして、裏でじゃんじゃか受信->リングバッファへ放り込むをひたすら繰り返す
という感じにしたけど、拍子抜けするくらいアッサリできた。
ほーへー。
これをどやって表示するかだよなあ。またUIでストップ。





最近のコメント