Posts in Category: Arduino

new ArdOSC2.1

。。。9ヶ月ぶり?
おまいさんダレ?

えとえと、久しぶりに成果物アップしました
無謀にもGitHub。
git全然わかりませんが何か?
は?フォーク?Volksは好きですもちろん

https://github.com/recotana/ArdOSC

以前とは違いごそっと変えちゃいました
メッセージのオブジェクト作って
そのオブジェクトへArgumentをAddしていきます。今っぽいですね!

あと、大きいのは
OSCアドレスごとに処理先の関数を設定できるようにしました。コールバックですね
ただ、パターンマッチまではやってないので(重くなりそうなので)単に文字列のマッチングだけです。

もひとつ、String(char *)をgetする際は予めメモリ確保を・
Exmapleでは最初に文字数を取得してから、char v[文字数]でメモリ確保し、そのポインタ渡してます
スコープ内でメモリ確保して、スコープ抜けたときに勝手にfreeするので楽かな〜と。

もし、float、stringを使わないのであれば
OSCcommon/OSCcommon.h の
#define _USE_FLOAT_
#define _USE_STRING_
それぞれコメントアウトしちゃってください。
バイナリサイズ減るはず

ドキュメントは無いので、Exampleみてくださいませ。。。

Share on Facebook

ArdOSC (とArduino DHCP , Bonjour )のデモ

できたてホヤホヤのArdOSCを使ってデモってみました。

そもそも

だれでも簡単に使える (iPhone用) 通信デバイス

実はこのことが自分の中では大きなテーマでして
本来であればZigBeeやBluetoothも視野にいれなくちゃなんですけど
ZigBee自体相手があんましいない。iPhoneにゃ標準で付いてない。もっと汎用なのが好き
Bluetoothも何気に壁が多い(個人レベルで。特にiPhoneだとMfiライセンスの壁が。。)

となると Ethernet(Wi-fi)しか残らなくなっちゃう。
あくまでLAN内前提ですが、どうしても自デバイスのIP設定や、相手側のIP/Port設定がネック。というか面倒くさいなーと思っていたところ
Arduino用 DHCP、Bonjourライブラリというのが公開されてたのでこれがあれば設定すっとばせるので設定面倒な懸念がイッキにクリアになりました。
ちなみにこのライブラリの作者、あのFTIRマルチタッチ用のドライバの作者でもありました・親しみを覚えちゃう。

だがしかーし、
このライブラリはとんでもなく超高校級のコードサイズ
使うだけで、最新Arduinoのプログラム領域の半分くらい使っちゃう
正直、そこまでしてArduinoでカッツカツでやるもんじゃないとは思います。。(特にこだわりはないので)
とはいえ、サックリ使えるのは非常に魅力なので、なんとかこれに軽量なOSCライブラリを組み込んでiPhoneと通信させようと作ったのが
今回の ArdOSC でした

前置きながい

今回のデモの構成(手書きww)はこんな感じです
iPhone <-> Arduino direct OSC(ArdOSC) control

Arduino+Ethernet ShieldはWiFiルーターと有線接続
iPhoneはWifiでルーターへ接続

Arduino、iPhone共にDHCPによりIPを取得しています。(Arduinoは EthernetDHCPを使用)

iPhone側ではOSCサーバを起動、およびBonjourにより iPhone IP , OSCサーバポートをパブリッシュさせています。
実際にはCopyByEar(新ver) 内でOSCサーバ起動、Bonjour Publishを行っています。(“_osc._udp”)

Arduino側では
EthernetDHCPによりArduinoのIPを取得
EthernetBonjourによりiPhoneでBonjour publishされた
iPhone IP,OSCサーバポートを自動で取得しています。
具体的には ”_osc._udp”を探し出し、複数の場合は最初に見つけたデバイスを選択
同一LAN内であることと指定のポート10000(CopyByEar側での決め打ち)であることを条件に接続先を決定します。

ここまでできると、相手IP,ポートがわかるので
あとはOSCメッセージをほいほい送るだけです

デモでは、
電源投入(というかリセットからの復帰ですけど、、)
DHCPでのIP取得(LED 赤)
Bonjourでの相手IP.ポート取得成功(LED 黄)

橙ボタン : CopyByEarの再生/ポーズ
緑ボタン : CopyByEarのボタン1(10秒戻る)トリガ
白ボタン : CopyByEarの マークジャンプ/ループ開始 トリガ

をそれぞれデモってます。

iPhone Arduino OSC(ArdOSC) connect demo from recotana on Vimeo.

Share on Facebook

ArdOSC (Arduino simple OSC Library )

なぜにひさびさにArduinoやってたかとゆーと
CopyByEar用の外部デバイスとしてArduinoでコントローラを作ってしまおうと画策してまして
当然OSCを使うわけですが、どーも物足りなくなって、以前作ったOSCライブラリを作り直しておりました。
名前も一般的すぎて埋もれがちなのでバージョンアップを期に固有名詞もつけました

ArdOSC (Arduino simple Open Sound Control Protocol Library )

ArduinoOSCの略ですけど、Twitterを考慮して省略。なことなーない

前回の作っておいてなんですけど、結構ばっさり変えちゃいました。
もっとさっぱりコード少なめで書き直して、かつもうちょい使いやすくしてみてます。(かな?)

前回のは、OSCアドレス設定は2コにわけてたけど、めんどいので廃止。1つでザっと設定してしまいます。
OSCアドレスは255文字まで
Serverでの ? や * などのパターンマッチは実装しておりません。
素のOSCアドレスの取得はできるので(当然)各自で実装をお願いします。

Argumentの種類は
int32
float
string
の3種類。
timetagはRTCもないのでいれませんでした。

int32はArduinoでは “int” (16bit)ではなく “long int”(32bit)なので注意してください!

argument数は全部で16コまで入るようにしました(ほんとはもっと入るけど)

バンドル形式は実装していません。
また、標準のEthernet Shield専用です。
現在のArduino firmware0018で動作確認しております。

まだできたてホヤホヤなのでバグありそうだなー
もしへんなとこあったら優しく指摘してくださいませ。。。

exampleにはProcessingのサンプルも置いてあります。loop backテストができます
ただしProcessingはoscP5必須です。

とりあえずこんなところかなー

ArdOSCのコア(エンコード/デコード)部はほぼ普通のCなので移植も簡単かも?
OSCメッセージをバイナリ変換/逆変換できるので、シリアル系とかでもいけそ
そうそうiPhone用のOSCライブラリも作りたいところ。

Share on Facebook

久々にArduino

何ヶ月ぶりだ???
CopyByEarの開発も落ち着いたので(あとは公開準備を整える状態)
ずっと懸案だったCopyByEar用の 外部デバイス?外部コントローラ?を作るべくひっさびさにArduino
Twitter上でAdruino用 DHCP/Boonjourライブラリの存在を知ったことでちょっと自分内で作りたい病が加速とります。
このライブラリがあるとArduino側で自分のIP設定や、接続先IP設定をすっとばすことができる!
ブロードキャストでやればという話しもあるけど、、

ただ、Bonjourライブラリは超高校級のコードサイズだので
同時に動かす自前OSCライブラリを同居させるには微妙になってきました。
実際MEGA168版のArduinoだとそもそも入りきらないし!

急きょ容量2倍2倍の新しめのArduino注文して、いまは自前OSCライブラリの見直し(軽量化)しております、

Arduinoのライブラリ作るにあたってはデバッグ方法がprintデバッグしかできないので
iPhoneに慣れた体ではなかなかツライ

そんななかでiPhoneで使ってた便利マクロをArduinoへ移植

//#define _DEBUG_

#ifdef _DEBUG_

#define DBG_LOGLN(...) Serial.println(__VA_ARGS__)
#define DBG_LOG(...) Serial.print(__VA_ARGS__)

#else
#define DBG_LOGLN
#define DBG_LOG
#endif

コード中に
DBG_LOGLN(“abc”);
DBG_LOGLN(val,DEC);
みたいにいれておいて
_DEBUG_定義されてなかったらこの部分はビルドしません

直接デバッグとは関係ないけど
ライブラリにはちょっと入れておきたかったもんで

Share on Facebook

Copy By Ear もうバージョンアップの予定

といってもまだ実装途中なのですが。。
iOSCを公開しているし、ここはOSC(Open Sound Control)を実装すべきでないの?なんて思いがフツフツと
そしていまBonjour(Zeroconf)のこともいろいろ調べていて
なかなか便利な機能だし、ネットを使う上でこれも必須の機能じゃないだろかと思えてきました。
そんなわけでOSC,Bonjour同時に対応しようと思ってます。

それにしても地味なバージョンアップだなあ
いったいだれが使うんだろう(笑)
そんなこと考えてたらなんもできないので粛々と実装してみたのがこんなかんじ

iOSCにて無線LAN経由でリモートコントロールしています。
普通にOSC制御のiPodだけど、、
OSC制御のmp3プレーヤーって世界初?だれもつくらんか。

まー、Arduino用のOSCライブラリも作ってるし、
Arduinoでフットスイッチなんか付けたら、より耳コピ&テープ起こししやすくなるんじゃないだろうか
なんて後付で思いついちゃったりなんかしてー
あとLemurなんかでコンロールしてくれたら意外にいいかもね!
いや、むしろされてやってもいいよ!
iPhone/touch 100台くらい並べてアンサンブルとか!
ザイリーカの同時再生会をiPhoneで!これなら4台で済むし!
なんてねえ。あー懐かしい。。

あーでも当のiOSCはまだBonjourに対応してないし
非Bonjour用にIPアドレス&ポート表示をどっかのViewに埋め込まないといけないのがおっくうだ・・

そのへんができ次第バージョンアップしようとおもてますー。

Share on Facebook