Mac OSXでARM開発環境 (1)
ちょっとAVRじゃきつい案件2コきてるので
以前からARMも気になっていたのでまずは開発環境の構築にとりかかってます。
まったく初めてなので、まずは確実に動くように(半)完成品で揃えてみました。
まずはARMボードの STBee
これめっちゃ安い!恐ろしく丁寧なドキュメント(win)もあるのでまずはこれを使ってみました。
JTAGには Olimex ARM-USB-OCD
FT232で自作もできるとのことですが、まずは完成品で確実に稼働できてからですね。
またFT232系だとMacでもドライバまわりが安心かなーということで。
またUSB経由で書込をおこなうDFUなどは使わず、最初からJTAGで書込しようと思ってます。
まずは
GCCのツールチェイン devkitARM
こちらの「SnowLeopardにSTM32(Cortex-M3)の開発環境を構築」を参考にして
devkitARMをおなじく /usr/local/ 以下へインストール(コピー)
こちらの SnowLeopardにSTM32(Cortex-M3)の開発環境を構築 を参考にさせていただきました。
解凍してできた devkitARM フォルダは
/usr/local/フォルダ内へ入れておきます。
パスは /usr/local/devkitARM へ通しておきます。
IDEは
Eclipse CDT
とりあえず32bit版をダウンロード
プラグイン関係は
日本語プラグイン
http://sourceforge.jp/projects/blancofw/wiki/nlpack.eclipse
こちらからNLpackja-eclipse-SDK-3.6M4-blancofw20091223.zipをダウンロード
eclipse/dropins/ 以下にnlpackフォルダを作り、その中に解凍されたeclipseフォルダを入れときました。
Zylin Embedded CDT
http://opensource.zylin.com/zylincdt
DSDPの
Target Managemant Terminal
作業対象からHeliosを選び
Mobile and Device Developmentにある Target Management Terminalをインストール
rxtx
作業対象に http://rxtx.qbang.org/eclipse/ を追加
最新版入れてもコネクションエラーとなってしまう。(現在も使えず 原因不明)
Hex Editor Plugin for Eclipse 2.3.x and 3.3.x
http://ehep.sourceforge.net/update
このへんは
ARM development on Macintosh (Japanese)
や
マイコン徹底入門 導入編
を参考にさせていただきました。
次はJTAG関係
Olimex ARM-USB-OCD
FTDIのサイトから VCPドライバ(現時点でver2.2.14)をダウンロード&インストール
これほぼデファクトなFTDIチップのドライバなので、Macでシリアルポート使ってたり、
Arduino使ってる場合はそもそもインストール済みのことがおおいです。
とりあえず最新版をインストールで。
ただ、こちらの openocd FTDI注意点
ARM development on Macintosh (Japanese)
にもあるように
JTAGのFT232はFTDI標準のドライバではなくlibftdiを使うので、FTDIドライバに先取りされない処置を施さないといけないようです。
こちらも参考にして
STM32 and the Olimex ARM-USB-OCD on a Mac
デスクトップなどへコピーして該当を削除、もとへ上書きすると、アクセス権のオーナーが自分になってしまうため
sudo vim /System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plist
などとして、直接書き換えたほうがいいです。
失敗するとロードできない旨のダイアログがでるので、ドライバを再インストールするといいと思います。
ターミナルで ls /dev すると
cu.usbserial-00004006B
みたいなに尻にBのだけがでてると思います。 (A側のは無効になってる)
次に
libftdi
http://www.intra2net.com/en/developer/libftdi/download.php
こちらより libftdi-0.18.tar.gz をダウンロード
cd /ibftdi-0.18/
./configure
make
sudo make install
デフォルトのインストール先は /usr/local/libです
つぎに
libusb
http://sourceforge.net/projects/libusb/files/libusb-1.0/
こちらより libusb-1.0.8.tar.bz2 (現時点の最新)をダウンロードし
cd libusb-1.0.8
./configure
make
sudo make install
libusb-compat
http://sourceforge.net/projects/libusb/files/libusb-compat-0.1/
libusb-compat-0.1.3.tar.bz2
cd libusb-compat-0.1.3
./configure LIBUSB_1_0_CFLAGS=-I/usr/local/include/libusb-1.0 LIBUSB_1_0_LIBS=”-L/usr/local/lib -lusb-1.0″ –prefix=/usr/local
make
sudo make install
ですが
/usr/local/include/libusb-1.0/libusb.hがコピーされずエラーになってしまいました。。
よくわからんので
cd /usr/local/include
sudo cp libusb-1.0/libusb.h libusb.h
とlibusb.hを一階層上にコピーしておきます。
次に
OpenOCD
これはリポジトリから最新版を落とします。
オモテでは0.4ですがgitから落とすと0.5でした。
http://sourceforge.net/projects/openocd/develop
にある
git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
でおとしてください。
cd openocd
./bootstrap
./configure –enable-maintainer-mode –prefix=/usr/local –enable-ft2232_libftdi
make
sudo make install
これでエラー無しだとOK
は〜〜〜。。
openocdはMacPortsからインストールしたもの(0.4)はどうやっても動きませんでした、
なのでリポジトリから落とした最新版でかつlibftdiを使う形でやっとこ動作。
openocdをビルドする際もlibusb,libftdiのライブラリや、ヘッダなどが必要なので
どうせならこれも最新のをビルドし直してやってみました。
つづく
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を手動で設定しておいてください。
iPadでGoogleカレンダー同期(複数の)
最近はGoogleカレンダー無しではいられないほど依存してるのです。
なぜかというと忘れっぽい!依頼仕事速攻で忘れるので
なにかあったら、なにか作業したらその場で即Googleカレンダーへ記録するとゆーのを
習慣づけてます。ほんとに忘れっぽいんですよねえ。。。
ちょと前まではGoogle Sync側でiPadのデバイス設定が無かったのでできなかったけど
ちょとまえから出来るようになったみたい。
やっとiPadでもカレンダー同期できるうれすい。
ちょとやりかた記録しときます。
設定のメール/連絡先/カレンダーにて「アカウントを追加…」
Exchangeを選びます
Gmailアドレスと、Googleアカウント&パス、説明は適当に
証明書云々のダイアログがでたら「了解」を
そうすると サーバ 項目がでるので「m.google.com」を入力
Googleと同期するものを選んでおきます。
これで、iPad側の設定は完了
メール/カレンダーが同期するようになってますよ。
Googleカレンダーが1つの場合はこれでいいのですが
複数もってたり共有しているものがあればGoogleSync側で設定を行います。
iPadのSafariで「m.google.com/sync」を入力してgoogle syncを開きます
English(US)をタップして英語を選択
デバイスでiPadをタップ
ここで、同期したいカレンダーを選択します。
My Calendersは自分で作ったカレンダー
Shared Calendersは他の人が作成し、自分が共有しているカレンダー
チェックし終わったら「Save」を押します。
この画面で設定完了です。
iPadのカレンダーを見てみましょう。
これはリスト表示
月表示もいいですが、スケジュールだけを見渡せて、かつ詳細も見られる。
GoogleAppsのカレンダーよりも見やすい!これすごく気に入りました〜〜

Gmailもプッシュで同期したので、メールが来るとiPhone(同じ設定してる)、iPadもメール受信音がピコンピコンしてしまう
?non
なんと!じつに4ヶ月くらいぶりの更新?
放置にも程がある!
週末ちょいと用事足しに札幌へ行ってきたんですが
その用事の一つ、先日オープンした友人のお店へおじゃましてまいりました。
靴の修理やさんで「?non(アノン)」さん。
札幌のおしゃれフリーク御用達スポット裏参道のなんと路面店!
(ちなみに当時から健在なのはLAND USA)

改装はなんと小樽のuguisさんでやってもらったそうな。
うちも以前の仕事は修理とか多くて部品探しに奔走したり
そーなるとなかなか儲けの出るもんでもなくなっちゃうんだけど
やっぱ愛着あるものを直してそれで喜ばれるってーのは
この上ない喜びだよねえ。
意外に靴ってどこ持って行ったらいいのかわからんけど
郵送でも受け付けてくれるので
興味のあるかたいましたら是非ご一報を・
いろいろ相談にのってくれると思いますよ!
?non(アノン)
札幌市中央区南2条西25丁目1−37内田ビル2F
TEL/FAX 011-644-8030
AM11:00-PM20:00
定休日 日曜 祝日
shoerepairanon@gmail.com
ちなみに?nonの中で話ししてたら、2Fのカフェの方がコーヒーの出前してくれました。
すごいいい人
つか、あのvaasa直系のカフェでした。ビックリ!
店内もフィンランド雑貨が!
and coffee
アノンの 2F左
新しいOSCライブラリ(Obj-C)を作っている
こりゃー使い物になるかどうかは甚だ不明ですが
いまObjective-C版のOSCライブラリをスクラッチから書いています。
常々思うところが(後述)あっんですが、
赤松さんのBlogにて OSCライブラリの比較 という記事が後押ししたというか
いままで”OSC送受できる”というのはあれど、どのくらいのパフォーマンスなのか?というのが
ほとんど論じられてこなかったのでとても新鮮で興味深い記事でした。
最近ではArduino版を作ってきたのでちょっとかぶりつきで。
思うところといいますと、iPhone絡みで開発している以上、ライセンスの縛りも大きく
使いたいライブラリはLGPLばかりでBSDなどがいまいち少ない
しかもiPhoneではサードパーティー製のライブラリは静的リンクしかできないため、
LGPLでは有料アプリにはどうしてもそぐわなくなってしまう。
BSDのoscpackは赤松氏が書いてるようにC++との連携が必要になりどうしてもいびつな実装になってしまう。
このへんのジレンマもありなんとかせにゃな〜と常々おもってはいたんですが、
かつてAVR版、こないだはArduino版も作ってるし
コアの部分を流用して思い切ってObj-C版も作っています。
仕様としては
1 型は int32 , Float , String , Blob の4つ
2 *,?,[],{}などメッセージ受信におけるワイルドカードなどのパターンマッチは行わない。
(このメッセージがきても破棄しちゃう)
3 Bundle形式は非対応
4 Bonjour対応
1はOSC1.0の仕様で、基本的な型のみ実装
2 この手の文字列検索の処理コストってなんか勿体ないなーと。
もしコストがかかるようであれば音楽用途だと致命的になりそうな。。
3 これはTimetagによる時間指定イベントを可能にするらしいのですが、ぶっちゃけ実装方法がわからない(笑)
4 Bonjourはこれからの通信機器に必須ということで。。
2,3 twitterでも聴いてみましたがあまり使ってる人はいなさそうということでずばっと省略。
ある程度できあがってはいるんですが
中身的には、エンコード/デコードなどは主にCで書いて、コンテナでObj-Cとやりとりする部分のみObj-Cでやってます。
NSArrayとかNSStringとか極力使わないようにしたかった。なんとなく重そうで。。
先日はOSC1.0仕様のの日本語訳を見つけたけど
これみてもBlobのデータ構造がいまいちわからんかった。。
しかたないので、ProcessingからBlogを送って、その受信バイナリを解析してました。。
こういうのはArduinoと違ってデバッガ完備でめちゃいいですね〜XCode
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 でした
前置きながい
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.
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ライブラリも作りたいところ。
久々に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_定義されてなかったらこの部分はビルドしません
直接デバッグとは関係ないけど
ライブラリにはちょっと入れておきたかったもんで
新年のご挨拶 と CopyByEarアップデート
どーもみなさま明けましておめでとうございます。
つーかいまごろか!
クリスマスになんとあのAppbankさんがCopyByEarをレビューしていただいてびっくりこいちゃいました
しかもナイスすぎるほど詳しいレビューでめちゃよかったー。
CopyByEar: 「少しだけ戻る」音楽再生アプリ。これ使える!Podcastにもご対応を!2085
その中でPodcast対応していれば・・というご指摘が
そーいえばなんでか音楽専用(iTunes上での区別)だった。なんでこれにしてたんだろう??
さくっと変更できるので即効podcast/audiobook対応でビルドし直して申請しましたよ12月30日。
ところがどっこい、大晦日に「説明文がイくない。説明文直すだけでいいのでバイナリの再アップは必要ないっすよ。」とAppleからメール。
即効直したので、こりゃー元日Ready for Saleくるかー?来年は幸先いいんでないのー?
とニヤケてたら、さっぱしRFSこない。。
1月7日になってやっと「変更確認したぜ。なんかあったときはまた連絡するわ。」とAppleからメール
おおー。やっとかよ。変更も1ヶ所だけだから即いけるよな?最近は超速審査だしな?
とおもいきや、2日経ってもまだRFSメールこない・・・
iTunesConnect見て確認してみると、なんとリジェクトされてるし!
しかもあのメールしてきた1月7日にリジェクト!
Appleはハシゴ外しの名人ですね!あほー
リジェクト理由のメールも来てないし
リジェクト理由が分からんぞボケ!と再度返事して、即効バイナリだけアップ
何事もなかったように本日Ready for Sale来てました。。。
ちなみに
In Reviewが今日の2:49
Ready for Saleが今日の7:26
約4時間ちょいで審査完了か。やっぱ速いんすね。。
とゆーわけで CopyByEar 無事更新しました。
Podcast、Audiobook に対応となりました。
ご愛顧のほどよろしくお願いします!
↓クリックするとiTunesへ飛びますよ・
iPhoneネタアプリ “CDJ PANIC” リリース!
ちょっとしょーもないもん作っちゃいました。
ぱっと思い浮かんでざっと作って一気にリリース。
初期衝動のモチベーションが消えないうちにやるってのは独り開発では結構重要かも。
CDJでDJをしたことある人ならかならず一度は失敗する様を再現するアプリ。めちゃ無意味。
プレイ中に操作失敗してホール内にジャカジャカ音を響かせた時の焦燥感はいやーなもんですよね。
平静を装ったり、痛々しくもアゲアゲなポーズを無理にしてみたり。
そんな感じを思い出しつつ、慰め(皮肉)のメッセージを噛みしめて終了してくださいませ。
ちなみに終了しない限り止まりません・(ジョークなので怒らないでね。。)
いまみたらミュージック無料のランキングで50位台につけてた。おほ〜。
リリース直後だからだろうけどちょっとうれすい。






















最近のコメント