最近Raspberry Pi Model Aを注文したら静電シールド袋に紙箱という質素な梱包で届いたんですが、以前Model Bを注文したときはピンク色のプラスチック製の個性的なケースに入っていました。今もあるんですかね。よくわかりませんが。
このケースを加工してワイヤレス接続のカメラサーバとして設置できるようにしてみました。フレキ接続のカメラモジュールを外に引き出し、USBのWi-Fiアダプタがぶつからないよう側面に穴を開けています。ふたを閉めても電源を供給できるよう、マイクロUSBコネクタの側も開口してあります。
↓こんな感じのケースを加工します。
カメラモジュールとWi-Fiアダプタの位置を大まかに見極めて、
開口部分に油性マーカーでしるしをつけます。
ピンバイスで輪郭沿って穴を開けていき、
ニッパやカッターで穴を繋げ、切り落とします。
バリはカッターと金ヤスリでフラットに整えます。
フレキの方も同様に。
反対側には電源用のUSBケーブルが通る穴を。
ボードを合わせるとこんな感じ。ずれていたらカッターで修正します。
カメラモジュールは裏面に両面テープをつけてケースに固定。
コンパクトにまとまりました。
中身のボードも裏面に厚手の両面テープを三枚重ねにして底に軽く固定してあります。
2014年4月24日木曜日
SDカードのUbuntuルートファイルシステムパーティションを拡張
Linuxは比較的非力な環境に入れることが多いためか、Ubuntuをしばらく使っているとパッケージのインストールやカーネル、ソースコードのダウンロードが積もり積もってディスク容量が手狭になってしまうことがよくあります。PCではWindowsと別パーティションのデュアルブートで使うこともあると思いますが、一応はHDDの増設で対応できます。VM環境でもHDD上のイメージサイズを拡張してGparted等でパーティションを動かせば割りと楽に容量確保できたりします。
これがSDカードブートのARMシングルボードコンピュータなんかだと、ちょっと厄介かも知れません。昔のBeagleBoardだと、よくfdiskを使って手作業でSDカードのパーティションを切り、ブートローダとルートファイルシステムを入れるなんてことをしました。面倒ですがパーティションサイズを任意に設定できるので、大きいSDカードを使えばそれに合わせて広いルートファイルシステムのパーティションを確保できます。これが最近のRaspberry Piになると、SDカードイメージが丸ごと配布されているので、いちいちfdiskをする必要がなくてかなり楽なんですが、SDカードサイズにかかわらずイメージとして決め打ちされたパーティションサイズになってしまいます。Raspbianはインストール時のコンフィギュレーションでパーティション拡張ができますが、他のOSやボード向けのイメージで同様の機能がサポートされることはほとんどないと思います。
そこで、既にSDカードに書き込まれたパーティションを手作業で拡張することになるわけです。今回、UDOO向けUbuntuのルートファイルシステムパーティションを拡張したので、作業手順をメモっておきます。
SDカードは16GB、UDOO公式で配布のQuad向けUbuntu 12.04 LTSを焼いてあります。最初にdfしてみると、ルートファイルシステムは6GB程度のパーティションになっていました。
参考
How can I resize my / (root) partition? - Stack Exchange
これがSDカードブートのARMシングルボードコンピュータなんかだと、ちょっと厄介かも知れません。昔のBeagleBoardだと、よくfdiskを使って手作業でSDカードのパーティションを切り、ブートローダとルートファイルシステムを入れるなんてことをしました。面倒ですがパーティションサイズを任意に設定できるので、大きいSDカードを使えばそれに合わせて広いルートファイルシステムのパーティションを確保できます。これが最近のRaspberry Piになると、SDカードイメージが丸ごと配布されているので、いちいちfdiskをする必要がなくてかなり楽なんですが、SDカードサイズにかかわらずイメージとして決め打ちされたパーティションサイズになってしまいます。Raspbianはインストール時のコンフィギュレーションでパーティション拡張ができますが、他のOSやボード向けのイメージで同様の機能がサポートされることはほとんどないと思います。
そこで、既にSDカードに書き込まれたパーティションを手作業で拡張することになるわけです。今回、UDOO向けUbuntuのルートファイルシステムパーティションを拡張したので、作業手順をメモっておきます。
SDカードは16GB、UDOO公式で配布のQuad向けUbuntu 12.04 LTSを焼いてあります。最初にdfしてみると、ルートファイルシステムは6GB程度のパーティションになっていました。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 6.4G 2.4G 3.7G 40% / devtmpfs 438M 4.0K 438M 1% /dev none 88M 2.6M 85M 3% /run none 5.0M 0 5.0M 0% /run/lock none 438M 100K 438M 1% /run/shmでは、fdiskで作業開始。
$ sudo fdisk /dev/mmcblk0まずpで現在の構成を確認。Startセクタはあとで入力しなおす必要があるので、 飛ばさないように。
Command (m for help): p Disk /dev/mmcblk0: 15.7 GB, 15720251392 bytes 255 heads, 63 sectors/track, 1911 cylinders, total 30703616 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000c356e Device Boot Start End Blocks Id System /dev/mmcblk0p1 16065 13623119 6803527+ 83 Linuxつぎに現在のd→1と入力して現在のパーティションを削除。
Command (m for help): d Selected partition 1続いてnで新たにパーティションを作成。パーティションタイプはpでプライマリを選択します。パーティションナンバーはデフォルトのまま。ファーストセクタで先ほど表示させたStartの数字を入力します。ラストセクタは最大まで確保します。
Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): Using default value 1 First sector (2048-30703615, default 2048): 16065 Last sector, +sectors or +size{K,M,G} (16065-30703615, default 30703615): Using default value 30703615新たなパーティションはこんな感じ。
Command (m for help): p Disk /dev/mmcblk0: 15.7 GB, 15720251392 bytes 255 heads, 63 sectors/track, 1911 cylinders, total 30703616 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000c356e Device Boot Start End Blocks Id System /dev/mmcblk0p1 16065 30703615 15343775+ 83 Linuxでは、wで書き込みます。
Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.ここで再起動。
$ sudo reboot最後に、既存のファイルシステムを拡張されたパーティションいっぱいまで広げるため、resize2fsコマンドを実行します。
$ sudo resize2fs /dev/mmcblk0p1 resize2fs 1.42 (29-Nov-2011) Filesystem at /dev/mmcblk0p1 is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mmcblk0p1 to 3835943 (4k) blocks. The filesystem on /dev/mmcblk0p1 is now 3835943 blocks long.dfで確認してみます。15GBまで拡大されました。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 15G 2.4G 12G 18% / devtmpfs 438M 4.0K 438M 1% /dev none 88M 2.6M 85M 3% /run none 5.0M 0 5.0M 0% /run/lock none 438M 100K 438M 1% /run/shmまぁ手順としちゃHDDの場合と変わりませんやね。
参考
How can I resize my / (root) partition? - Stack Exchange
2014年4月20日日曜日
Raspberry Piのカメラモジュールを使ってみた
前にRaspberry Piにウェブカメラを繋いでFFmpegで動画撮影やuvccaptureで静止画撮影を試してみたことがありました(記事)。最近、Raspberry Pi Model Aを買い足したときに、カメラモジュールをセットに含めて発注しておいたので、今回ちょっと試してみようと思います。
箱から取り出したカメラモジュールには最初からフレキが接続されているので、反対側をボード上のコネクタS5に挿し込みます。固定具を一度緩めてフレキを挿してから固定しなおします。電極面の向きに注意が必要です。
カメラモジュールを使用するためにはOSのコンフィギュレーションが必要です。公式のRaspbianイメージをSDカードに焼いた場合は、初回の起動時にカメラを使う設定ができます。OSの使用開始後でもraspi-configコマンドでカメラ使用の設定ができました。
静止画
raspistillコマンドで撮影可能。ウェブカムでuvccaptureを使ったときよりもホワイトバランスとかが調整されてる印象。$ raspistill -o test.jpg
動画
raspividコマンドを使用。ちゃんとそこそこのFPSで撮影できてるっぽいです。 撮影時にはSSHからコマンドしてもディスプレイを繋いでいればフレームバッファにプレビューが描画され画面表示されます。$ raspivid -o test.mp4
撮影した動画はomxlayerで再生可能。こちらもデスクトップでなくても画面表示してくれます。
$ omxplayer test.mp4 Video codec omx-h264 width 1920 height 1080 profile 100 fps 25.000000 Subtitle count: 0, state: off, index: 1, delay: 0 V:PortSettingsChanged: 1920x1080@25.00 interlace:0 deinterlace:0
WinSCPでWindowsに持ってきて再生しようとしたんですが、WMPでもaviutlでも最初の1フレームくらいしか表示されませんでした。omx-h264というコーデックがまずいのかな?もしかしたらコーデック変換とかしたらいいのかも。
参考
Camera Module - Raspberry Pi Foundation
2014年4月18日金曜日
はじめてKickstarterで出資してみた
最近、クラウドソーシング発の製品やプロジェクトをたくさん見かけるようになりました。このブログでも以前買ってからよく遊んでいるUDOOボードなんかも、Kickstarterから飛び出したプロダクトの一つです。
映像、音楽、ゲーム、ファッションなど多様なジャンルのプロジェクトが公開されている中、テクノロジー製品だけでも個性的なアイディアを見つけることができ、眺めているだけでも楽しめます。そんなKickstarterで、今更ながら、初めてのBack=支援、出資をしてみました。
ターゲットは、先日このブログでも書いた、ウェアラブル開発ボードの「MetaWare」 です。
まずはプロジェクトのページへ。英語ですが、気合を入れてプロジェクト内容を読んだり、動画を見たりしてテンションあげていきます。
お気に入りゲージがいい感じに高まってきたところで、ページ右側に並んでいる出資オプションから、一つを選びます。金額に応じて得られる特典が変わるので、財布と相談しながら気に入った出資額を選びます。今回はボード本体と基本アクセサリがもらえる$30のコースにしてみました。なお緑色の「Back This Project」ボタンを押しても、出資オプションを選ぶページに進んで同様に選択ができます。
選択するとポップアップが開き、Pledge amount(出資確約額)が確認されます。このプロジェクトではUS国外への発送は+$10で対応されるため、合計金額$40が自動的に入力された状態で表示されます。OKなら「Continue to next step」ボタンを押します。
続いてログイン画面になります。既にログインしてる場合はスキップされると思います。今回はKickstarterを始めて利用するので、Log inではなく中央のNew to Kickstarter?のフォームで各欄を入力しサインアップします。また、Facebookアカウントを使った認証にも対応しているようです。
サインアップできたら、Amazonでの決済へ進むための確認画面が出るので、「Continue to Amazon」 を押します。
Amazonのログインページへ移ります。アメリカのAmazon.comなので、日本のAmazon.co.jpとは別にアカウントが必要のようです。持っていないので新たに作成しました。
アカウント登録してAmazon.comにログインしたら、クレジットカード情報を入力してContinueを押します。
次に請求先住所の入力です。Amazon.comですが日本の住所で大丈夫そうです。
Kickstarterによる決済を承認します。Continueで。
以上で決済手続きは完了です!これで出資額が確約されました。後は座してプロジェクトの進捗を待つばかりです。
映像、音楽、ゲーム、ファッションなど多様なジャンルのプロジェクトが公開されている中、テクノロジー製品だけでも個性的なアイディアを見つけることができ、眺めているだけでも楽しめます。そんなKickstarterで、今更ながら、初めてのBack=支援、出資をしてみました。
ターゲットは、先日このブログでも書いた、ウェアラブル開発ボードの「MetaWare」 です。
まずはプロジェクトのページへ。英語ですが、気合を入れてプロジェクト内容を読んだり、動画を見たりしてテンションあげていきます。
お気に入りゲージがいい感じに高まってきたところで、ページ右側に並んでいる出資オプションから、一つを選びます。金額に応じて得られる特典が変わるので、財布と相談しながら気に入った出資額を選びます。今回はボード本体と基本アクセサリがもらえる$30のコースにしてみました。なお緑色の「Back This Project」ボタンを押しても、出資オプションを選ぶページに進んで同様に選択ができます。
選択するとポップアップが開き、Pledge amount(出資確約額)が確認されます。このプロジェクトではUS国外への発送は+$10で対応されるため、合計金額$40が自動的に入力された状態で表示されます。OKなら「Continue to next step」ボタンを押します。
続いてログイン画面になります。既にログインしてる場合はスキップされると思います。今回はKickstarterを始めて利用するので、Log inではなく中央のNew to Kickstarter?のフォームで各欄を入力しサインアップします。また、Facebookアカウントを使った認証にも対応しているようです。
サインアップできたら、Amazonでの決済へ進むための確認画面が出るので、「Continue to Amazon」 を押します。
Amazonのログインページへ移ります。アメリカのAmazon.comなので、日本のAmazon.co.jpとは別にアカウントが必要のようです。持っていないので新たに作成しました。
アカウント登録してAmazon.comにログインしたら、クレジットカード情報を入力してContinueを押します。
次に請求先住所の入力です。Amazon.comですが日本の住所で大丈夫そうです。
Kickstarterによる決済を承認します。Continueで。
以上で決済手続きは完了です!これで出資額が確約されました。後は座してプロジェクトの進捗を待つばかりです。
2014年4月16日水曜日
DirectFBのサンプルをgprofでプロファイリングしてみる
i.MX6搭載のUDOOにDirectFBとExamplesをインストールしてみたんですが、df_andi(ペンギンいっぱい出るサンプル)を動かしてみると、標準のペンギン200体で20fpsしか出てない。RPiでやったときももうちょっと出てたと思うのに、上位CPUを搭載したUDOOがこんなに遅いわけがない!
ということで、GNU gprof使ってちょいとプロファイルしてみる。
df_andiのソースだけ取り出してgprof向けコンパイルできればいいんですが、依存関係とかややこしいので、CFLAGSだけいじってautotoolsで全部ビルドしちゃう。
で、実行してみる。
強制終了するとgprofの結果ファイルgmon.outが生成されないので、pkillは使わない。面倒ですが、USBキーボードを繋いでESCを押します。
gmon.outが生成されたら、gprofでプロファイル結果を表示してみる。
draw_penguinsが100%超えてますやん笑
df_andi.cの中のこの関数の実装を見てみると、確かに二重ループになってたり、DirectFBのライブラリ関数をコールしてたり、確かに重そうではある。もうちょっと詳しく見てみる必要がありそう。。
参考
Re: using gprof with autotools - Ubuntu Forums
ということで、GNU gprof使ってちょいとプロファイルしてみる。
df_andiのソースだけ取り出してgprof向けコンパイルできればいいんですが、依存関係とかややこしいので、CFLAGSだけいじってautotoolsで全部ビルドしちゃう。
$ cd build_dfbexamples $ make clean $ CFLAGS=-pg ../DirectFB-examples-1.7.0/configure $ make
で、実行してみる。
$ sudo src/df_andi &
強制終了するとgprofの結果ファイルgmon.outが生成されないので、pkillは使わない。面倒ですが、USBキーボードを繋いでESCを押します。
gmon.outが生成されたら、gprofでプロファイル結果を表示してみる。
$ gprof src/df_andi gmon.out Flat profile: Each sample counts as 0.01 seconds. % cumulative self self total time seconds seconds calls Ts/call Ts/call name 100.12 0.01 0.01 draw_penguins
draw_penguinsが100%超えてますやん笑
df_andi.cの中のこの関数の実装を見てみると、確かに二重ループになってたり、DirectFBのライブラリ関数をコールしてたり、確かに重そうではある。もうちょっと詳しく見てみる必要がありそう。。
参考
Re: using gprof with autotools - Ubuntu Forums
2014年4月15日火曜日
UDOOのUbuntuにDirectFBをインストール
以前、Raspberry PiにDirectFBをインストールして動かしてみたんですが、わけあってi.MX6でやってみたくなったのでUDOOにもインストールしてみた。
まずは公式のダウンロードページから本体とExtrasのexamplesをダウンロード。
んで本体ビルドしてみる。
が、fluxcompがない、というエラー。調べてみたら、これもDirectFBのページでソース配布してるツールだった。ダウンロードしてインストールする。
では本体のビルドに戻る。
とりあえずコンフィギュできたけど、RPiのときも出たPNGとJPEGサポートの警告。なので、
でインストールしてから、もう一度。
おや、今度はdrmkmsとやらで引っかかってる?コンフィギュで回避してみる。
これで本体のビルドとインストールはOK。あ、忘れずにldconfigしないとね。
Examplesの方も同様にビルド&インストール。
できたら、df_andiあたりを動かしてみる。
画面にペンギンがもしゃもしゃ出ればOK。HDMI接続はしつつ、コマンドはSSHから&付きで実行することで、一応コマンドラインから強制終了もできる。
以上です。
まずは公式のダウンロードページから本体とExtrasのexamplesをダウンロード。
$ wget http://directfb.org/downloads/Core/DirectFB-1.7/DirectFB-1.7.3.tar.xz $ wget http://directfb.org/downloads/Extras/DirectFB-examples-1.7.0.tar.gz
んで本体ビルドしてみる。
$ tar xf DirectFB-1.7.3.tar.xz $ mkdir build_directfb $ cd build_directfb/ $ ../DirectFB-1.7.3/configure --with-gfxdrivers=gles2 ... checking for fluxcomp... no configure: error: *** DirectFB compilation requires fluxcomp ***
が、fluxcompがない、というエラー。調べてみたら、これもDirectFBのページでソース配布してるツールだった。ダウンロードしてインストールする。
$ cd ../ $ wget http://directfb.org/downloads/Core/flux/flux-1.4.4.tar.gz $ tar xf flux-1.4.4.tar.gz $ mkdir build_flux $ cd build_flux/ $ ../flux-1.4.4/configure $ make $ sudo make instlal
では本体のビルドに戻る。
$ cd ../build_directfb/ $ ../DirectFB-1.7.3/configure --with-gfxdrivers=gles2 ... PNG support is missing - many applications won't work correctly! JPEG support is missing - many applications won't work correctly!
とりあえずコンフィギュできたけど、RPiのときも出たPNGとJPEGサポートの警告。なので、
$ sudo apt-get install libpng12-dev libjpeg62-dev libfreetype6-dev
でインストールしてから、もう一度。
$ ../DirectFB-1.7.3/configure --with-gfxdrivers=gles2 $ make make[3]: Entering directory `/home/ubuntu/work/directfb/build_directfb/systems/drmkms' CC drmkms_layer.lo In file included from ../../../DirectFB-1.7.3/systems/drmkms/drmkms_layer.c:45:0: ../../../DirectFB-1.7.3/systems/drmkms/drmkms_system.h:69:6: error: unknown type name 'drmModePlane' ... cc1: some warnings being treated as errors make[3]: *** [drmkms_layer.lo] Error 1 make[3]: Leaving directory `/home/ubuntu/work/directfb/build_directfb/systems/drmkms' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/ubuntu/work/directfb/build_directfb/systems' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/ubuntu/work/directfb/build_directfb' make: *** [all] Error 2
おや、今度はdrmkmsとやらで引っかかってる?コンフィギュで回避してみる。
$ ../DirectFB-1.7.3/configure --with-gfxdrivers=gles2 --enable-drmkms=no $ make clean $ make $ sudo make install
これで本体のビルドとインストールはOK。あ、忘れずにldconfigしないとね。
$ sudo ldconfig
Examplesの方も同様にビルド&インストール。
$ cd ../ $ tar xf DirectFB-examples-1.7.0.tar.gz $ mkdir build_dfbexamples $ cd build_dfbexamples/ $ ../DirectFB-examples-1.7.0/configure $ make $ sudo make install
できたら、df_andiあたりを動かしてみる。
$ sudo df_andi &
画面にペンギンがもしゃもしゃ出ればOK。HDMI接続はしつつ、コマンドはSSHから&付きで実行することで、一応コマンドラインから強制終了もできる。
$ sudo pkill df_andi
以上です。
Ubuntuの時刻を合わせる
久しぶりにUDOOを起動したら、時刻がUNIXエポックにタイムスリップしてた。
で、自動的にローカルタイムに合わせてくれた。
参考
Time Synchronisation with NTP - Ubuntu Documentation
$ sudo ntpdate ntp.ubuntu.com
で、自動的にローカルタイムに合わせてくれた。
参考
Time Synchronisation with NTP - Ubuntu Documentation
2014年4月14日月曜日
Raspberry PiのArch LinuxでLXDEを使う
Raspberry Piの公式で配布してるArch Linuxには標準でデスクトップ環境がインストールされていないので、pacmanで後からLXDEをインストールします。
[1] レポジトリのアップデートとローカルパッケージ更新
[2] 各種パッケージのインストール
[3] 起動
Does Arch come with a GUI preinstalled? - StackExchenge
Re: x at raspberry pi - Arch Linux ARM
[1] レポジトリのアップデートとローカルパッケージ更新
pacman -Syu pacman -Syy
[2] 各種パッケージのインストール
pacman -S openbox lxde gamin dbus pacman -S xorg-server xorg-xinit xorg-server-utils pacman -S mesa xf86-video-fbdev xf86-video-vesa
[3] 起動
xinit /usr/bin/lxsession
参考
Re: Can't login to GUI following updates - manjoroDoes Arch come with a GUI preinstalled? - StackExchenge
Re: x at raspberry pi - Arch Linux ARM
2014年4月13日日曜日
Raspberry Pi Model Aをネットワークに接続する
EthernetコネクタのないRPiのModel Aでネットワークに接続する方法。OSはArch Linuxです。
初代BeagleBoard(赤いやつ)がそうだったんですけど、USB接続のEthernetアダプタを使います。今回はウチにストックしてあったPLANEXのUE-200TX-G2を使いました。残念ながら同製品は生産終了してますが、後継機とか似たようなものがAmazonとかでもいろいろ見つかります。
では手順。
[1] まずArch Linuxの初期アカウント(Raspberry Pi公式のイメージならroot/root)でログイン。
[2] USB EthernetアダプタをUSBコネクタに接続します。Model Aには1ポートしかないので、キーボードと両立のためにUSBハブが必要です。接続すると新しいネットワークインタフェースとしてeth0という名称で登録されます。UE-200TX-G2はドライバがサポートされてます。
[3] 続いてインタフェースを有効化します。 コマンドは下記。
[4] 最後にDHCPでIPアドレスをもらってきます。あ、言わずもがなですが、LANケーブルでルータに接続されている必要があります。
これでOK。ifconfigでeth0に有効なIPアドレスが割り当てられていることを確認できると思います。これでネットワークが利用可能になります。
初代BeagleBoard(赤いやつ)がそうだったんですけど、USB接続のEthernetアダプタを使います。今回はウチにストックしてあったPLANEXのUE-200TX-G2を使いました。残念ながら同製品は生産終了してますが、後継機とか似たようなものがAmazonとかでもいろいろ見つかります。
では手順。
[1] まずArch Linuxの初期アカウント(Raspberry Pi公式のイメージならroot/root)でログイン。
[2] USB EthernetアダプタをUSBコネクタに接続します。Model Aには1ポートしかないので、キーボードと両立のためにUSBハブが必要です。接続すると新しいネットワークインタフェースとしてeth0という名称で登録されます。UE-200TX-G2はドライバがサポートされてます。
[3] 続いてインタフェースを有効化します。 コマンドは下記。
ip link set eth0 up
[4] 最後にDHCPでIPアドレスをもらってきます。あ、言わずもがなですが、LANケーブルでルータに接続されている必要があります。
dhcpcd eth0
これでOK。ifconfigでeth0に有効なIPアドレスが割り当てられていることを確認できると思います。これでネットワークが利用可能になります。
参考
Network Configuration (日本語) - ArchWiki2014年4月12日土曜日
はじめてのwxWidgets
私はPCのウィンドウプログラムを作ることがほとんどないんですが、たまーに思い立って何か作りたくなることもあるんですよね。そういうときのために何かGUIツールキットを手軽に使えるようにしておくと捗るんですが、WindowsもLinuxも使う身からすると、Windows SDKだとプラットフォームが限定されるし、なんかAPIも難しそうでちょっと二の足。OpenCVとかGLUTとかProcessingとかライブラリオリエンテッドのクロスプラットフォームGUIとかもありますが、汎用的に使いたい。そのあたりでいろいろ探していて、wxWidgetsに行き着いた、というわけです。
ということで、とりあえずwxWidgetsのSDKをダウンロードして、サンプルをビルドしてみます。OSはWindows 7でございます。
PCにVisual C++がインストールされている場合は飛ばしてOKです。ない場合は、Microsoft Download CenterからMicrosoft Visual Studio 2010 Service Pack 1 (インストーラー)をダウンロードしてインストールを行います。
現時点で最新版は2013なんですが、試してないのでwxWidgetsのSDKと適合するかわかりません。wxWidgetsのSDK内のライブラリやデモプログラムのプロジェクトも最新でもVisual C++ 2008またはVisual C++ 2005用のプロジェクト/ソリューションファイルしか用意されていませんが、2010で変換してインポートする分には問題なくビルドできました。Microsoft Visual Studio 2010をインストールする場合は、Service Pack 1を選ぶ必要があることに注意。SP1ではない無印を使うと、デモプログラムのビルド時に「LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。」というエラーに直面します。
wxWidgets公式のダウンロードページから、Windows向けのソースアーカイブをダウンロードします。Zipでもいいですが、7zの方が高圧縮で軽量です。7z対応の展開ソフトがあるなら、こちらを選ぶといいでしょう。
ダウンロードしたら、任意のフォルダで展開します。
Visual C++ Express 2010を起動し、[ファイル(F)]->[開く(O)]->[プロジェクト/ソリューション(P)...]を選びます。「プロジェクトを開く」ダイアログが開くので、展開したライブラリのbuild\msw\wx_vc10.slnを開きます。ソリューションの読み込みが完了したら、[デバッグ(D)]->[ソリューションのビルド(B)]を選び、ビルドを行います。DebugとReleaseの両方の構成でビルドしておくとよいでしょう。
同様にVisual C++ Express 2010でdemos\bombs\bombs_vc9.slnを開きます。ソリューションとプロジェクトが2010のバージョンに対して古いため「Visual Studio 変換ウィザード」が開きます。そのまま[完了(F)]でOKです。
ソリューションが読み込まれたら、[デバッグ(D)]->[デバッグ開始(S)]を選びます。しばらくビルドが走った後、マインスイーパーっぽいプログラムが起動します。
これでOK。
ということで、とりあえずwxWidgetsのSDKをダウンロードして、サンプルをビルドしてみます。OSはWindows 7でございます。
1 Visual C++ Express のインストール
PCにVisual C++がインストールされている場合は飛ばしてOKです。ない場合は、Microsoft Download CenterからMicrosoft Visual Studio 2010 Service Pack 1 (インストーラー)をダウンロードしてインストールを行います。
現時点で最新版は2013なんですが、試してないのでwxWidgetsのSDKと適合するかわかりません。wxWidgetsのSDK内のライブラリやデモプログラムのプロジェクトも最新でもVisual C++ 2008またはVisual C++ 2005用のプロジェクト/ソリューションファイルしか用意されていませんが、2010で変換してインポートする分には問題なくビルドできました。Microsoft Visual Studio 2010をインストールする場合は、Service Pack 1を選ぶ必要があることに注意。SP1ではない無印を使うと、デモプログラムのビルド時に「LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。」というエラーに直面します。
2 wxWidgets SDKのダウンロード
wxWidgets公式のダウンロードページから、Windows向けのソースアーカイブをダウンロードします。Zipでもいいですが、7zの方が高圧縮で軽量です。7z対応の展開ソフトがあるなら、こちらを選ぶといいでしょう。
ダウンロードしたら、任意のフォルダで展開します。
3 ライブラリのビルド
Visual C++ Express 2010を起動し、[ファイル(F)]->[開く(O)]->[プロジェクト/ソリューション(P)...]を選びます。「プロジェクトを開く」ダイアログが開くので、展開したライブラリのbuild\msw\wx_vc10.slnを開きます。ソリューションの読み込みが完了したら、[デバッグ(D)]->[ソリューションのビルド(B)]を選び、ビルドを行います。DebugとReleaseの両方の構成でビルドしておくとよいでしょう。
4 デモプログラムのビルド、実行
同様にVisual C++ Express 2010でdemos\bombs\bombs_vc9.slnを開きます。ソリューションとプロジェクトが2010のバージョンに対して古いため「Visual Studio 変換ウィザード」が開きます。そのまま[完了(F)]でOKです。
ソリューションが読み込まれたら、[デバッグ(D)]->[デバッグ開始(S)]を選びます。しばらくビルドが走った後、マインスイーパーっぽいプログラムが起動します。
これでOK。
参考
Microsoft Visual C++ Guide - wxWiki2014年4月10日木曜日
ウェアラブル開発に使えそうなボード3つ
毎年年始にラスベガスで開かれるCESといえば、その年のコンシューマーエレクトロニクス市場のトレンドを占う言わば「一年の計」です。今年のCESは、スマートウォッチや眼鏡型スマートデバイスの出展が牽引して「ウェアラブル元年」を印象付けるものでした。一般コンシューマー向けのエレクトロニクス製品もさることながら、やはり気になるのは開発者コミュニティーの盛り上がり。そんなわけで、コミュニティを駆動するウェアラブル向け開発ボードをチェックしてみたいと思います。
FreescaleがCESで発表したWaRPは$149で2014年2Qの出荷を予定。i.MX6を搭載しAndroidを駆動するパワフルなアプリケーションサポートに加え、KineticsマイクロコントローラとのハイブリッドCPU構成でフィジカル方面の拡張性も期待できる。ただ、Kineticパートはドーターボードで接続というような記載があるのみで、具体的にどのように連携するのかはわからないです。コネクティビティとしてはムラタのワイヤレスモジュールを搭載し無線LANとBlootoothが使えそう。あくまでリファレンスプラットデザインという扱いなので、開発ボードとしてどれだけ普及が見込まれるかわかりませんが、Freescaleをはじめ、HW設計にRevolution Robotics、SW設計にKyneticsの両社がついており、信頼性と当面の調達性はいい感じじゃないかと思います。
Kickstarterのプロジェクトとして米MbientLabが開発しているMetaWareは、Cortex-M0をコアに持つNordic SemiconductorのSoCを搭載。WaRPとは対照的にアプリケーションプロセッサを削る一方、BluetoothでAndroidやiOSと連携して使うことに的を絞った設計。FCC/CE認証済みの「プロダクションレディ」を売りに、プロトタイピングからマスプロダクションまで幅広く狙っている模様で、サイズも製品搭載まで見越した25セント硬貨相当に収めています。Githubで公開されているライブラリをダウンロードしてAndroid/iOSプロジェクトにロードすることでAPIを使用できるようになるようです。本体にはファームウェアがプリインストールされているので、アプリの開発に集中できますね。本稿執筆時点で、$30からの寄付で本体プレオーダーができるとのこと。
産業用ボードコンピュータのCoreWindからは、AtmelのSoCを50mm×30mmサイズのモジュールに収めたWiFiG25が登場。CPUコアはARM9(400MHz)で、ちょうどWaRPとMetaWareの中間帯を埋めるような存在といえます。WiFiモジュールを標準搭載するほか、2×20ピンの拡張ヘッダが特徴的。ブートローダとLinuxカーネル、DebianルートFSは一応公式で配布しています。ただ、Freescaleのような著名企業がバックアップしているわけでもなく、かといってKickstarterのようなコミュニティ発祥でもない、この手の代物は開発コミュニティがいまいち盛り上がりに欠けるのが懸念点です。価格はRAM128MBモデルが$29.9、256MBモデルが$39と、とても手ごろ。ぜひがんばって欲しいところです。
これらのほかにも、SDカードのフォームファクターでCESで注目を集めたIntel Edison、WiFi、Bluetooth、FM、NFCとワイヤレスコネクティビティてんこ盛りのIngenic Newton、アルテラFPGAを搭載したDenx MCV、なんとデュアルコアCortex-A9(1.5GHz)搭載でハイエンドスマホに匹敵するスペックを誇るDART-4460など、注目のプラットフォームが目白押し。どんなプロトタイプが出てくるか、とっても楽しみ。
1. WaRP
http://www.warpboard.org/FreescaleがCESで発表したWaRPは$149で2014年2Qの出荷を予定。i.MX6を搭載しAndroidを駆動するパワフルなアプリケーションサポートに加え、KineticsマイクロコントローラとのハイブリッドCPU構成でフィジカル方面の拡張性も期待できる。ただ、Kineticパートはドーターボードで接続というような記載があるのみで、具体的にどのように連携するのかはわからないです。コネクティビティとしてはムラタのワイヤレスモジュールを搭載し無線LANとBlootoothが使えそう。あくまでリファレンスプラットデザインという扱いなので、開発ボードとしてどれだけ普及が見込まれるかわかりませんが、Freescaleをはじめ、HW設計にRevolution Robotics、SW設計にKyneticsの両社がついており、信頼性と当面の調達性はいい感じじゃないかと思います。
image from www.warpboard.org |
2. MetaWare
http://metawear.mbientlab.com/Kickstarterのプロジェクトとして米MbientLabが開発しているMetaWareは、Cortex-M0をコアに持つNordic SemiconductorのSoCを搭載。WaRPとは対照的にアプリケーションプロセッサを削る一方、BluetoothでAndroidやiOSと連携して使うことに的を絞った設計。FCC/CE認証済みの「プロダクションレディ」を売りに、プロトタイピングからマスプロダクションまで幅広く狙っている模様で、サイズも製品搭載まで見越した25セント硬貨相当に収めています。Githubで公開されているライブラリをダウンロードしてAndroid/iOSプロジェクトにロードすることでAPIを使用できるようになるようです。本体にはファームウェアがプリインストールされているので、アプリの開発に集中できますね。本稿執筆時点で、$30からの寄付で本体プレオーダーができるとのこと。
image from www.kickstarter.com |
3. CoreWind Tech WiFiG25 Module
http://armdevs.com/WiFiG25.html産業用ボードコンピュータのCoreWindからは、AtmelのSoCを50mm×30mmサイズのモジュールに収めたWiFiG25が登場。CPUコアはARM9(400MHz)で、ちょうどWaRPとMetaWareの中間帯を埋めるような存在といえます。WiFiモジュールを標準搭載するほか、2×20ピンの拡張ヘッダが特徴的。ブートローダとLinuxカーネル、DebianルートFSは一応公式で配布しています。ただ、Freescaleのような著名企業がバックアップしているわけでもなく、かといってKickstarterのようなコミュニティ発祥でもない、この手の代物は開発コミュニティがいまいち盛り上がりに欠けるのが懸念点です。価格はRAM128MBモデルが$29.9、256MBモデルが$39と、とても手ごろ。ぜひがんばって欲しいところです。
image from armdevs.com |
これらのほかにも、SDカードのフォームファクターでCESで注目を集めたIntel Edison、WiFi、Bluetooth、FM、NFCとワイヤレスコネクティビティてんこ盛りのIngenic Newton、アルテラFPGAを搭載したDenx MCV、なんとデュアルコアCortex-A9(1.5GHz)搭載でハイエンドスマホに匹敵するスペックを誇るDART-4460など、注目のプラットフォームが目白押し。どんなプロトタイプが出てくるか、とっても楽しみ。
登録:
投稿 (Atom)