A certain engineer "COMPLEX"

Bluetooth Low Energyの自作ビーコンを作る その2

Introduction


前回は、mbedのアカウント作成、ソースのコンパイルを行いました。
今回は実際にBEL Nanoにバイナリを書き込んで、動かしてみます。

Instructions


接続

BLE Nano v2をPCに接続します。
購入時は、ボードとライターが接続されていましたが、もし外したのなら、向きに注意して接続します。

ボードとライターを接続したら、PCのUSB端子に接続します。
続いて、エクスプローラーを開きます。
Macとかだと、Finderに接続したBLE Nanoがドライブとして現れるようですが...
私のWindows7はUSBハブ経由だからなのか、見つかりませんでした。

見つからない場合はmbed Windows serial port driverをインストールします。
情報はJellyWare様より。ありがとうございます。

JellyWare株式会社
人が技術を作る。技術が人の暮らしをつくる。だから、人をつなげ、何かを作り、それをまた誰かに伝えたい。JellyWareはそんな人と技術が集まるプラットフォームです。

とりあえず、Windows10はドライバ無しでも認識しました、

書き込み

いざ書き込みです。
といっても想像の通り、ドラッグアンドドロップで、前回ダウンロードしたバイナリを書き込むだけの親切設計。

実行

前回買ってきたブレッドボードに接続してみます。

そして、iPhoneあたりにBLEビーコンを検出できるアプリがあるので、それを使って検知してみます。
今回はこれを使ってみました。

Locate Beaconを App Store で
「Locate Beacon」のレビューをチェック、カスタマー評価を比較、スクリーンショットを確認、詳細情報を入手。Locate Beaconをダウンロードして iPhone、iPad、iPod tou...

UUIDは前回のmain.cppに書かれていますので、それを入力します。
そして、検知結果がこちら。

無事に動作しました。
電子工作、なかなか面白いですね。

Bluetooth Low Energyの自作ビーコンを作る その1

Introduction


IoT熱が高まってついに電子工作を始めました。

スイッチサイエンス、お世話になります。

で、何がしたいかというと、BLEビーコンを作ってみたいんですよ。
いやネット上でBLE Nanoキットを使ってサンプルは転がっているんですが、電子工作スキルなるものを習得できれば、と思います。
子供の頃はプラモデル作るのは好きでした。大丈夫でしょう。

Instructions


基本的には、JellyWare様の下記のページをなぞるだけです。

JellyWare株式会社
人が技術を作る。技術が人の暮らしをつくる。だから、人をつなげ、何かを作り、それをまた誰かに伝えたい。JellyWareはそんな人と技術が集まるプラットフォームです。

違うのは、ボリュームがない点です。
つまり、電池、コイン電池ホルダ、ジャンパワイヤ、BLE Nano v2、ブレッドボードだけを使います。
ひたすらパケットを送信するだけのビーコンです。

で、軽く記事を読むと、

  • mbed
    • ARM社のプロトタイピング用ワンボードマイコン用のプログラミング環境

が必要とのこと。Visual Studioで出来ないの?と温いことを思いますが、郷に入っては郷に従うの精神で行きます。

mbedのアカウント取得

無料出来る模様。どうやってマネタイズしているのか。
アカウント作成はここから。


Log In/Sign upを選択


Sign upを選択


メールアドレス、ユーザ名、パスワード、名前、名字、国名を入力

以上で完了です。
完了後、メールが届いて最終確認後、Sing Inできます。


Compilerを押して作業開始!!

BLE Nanoを動かす下準備

mbedはブラウザ上で作業が完結する模様。
なので、ブラウザ上でソース編集、デバイスに書き込みという往復作業になります。

まず、先の画面でCompilerをクリックすると、下記のような画面に遷移します。

ここで、右上のデバイス未選択をクリック。


表示されるダイアログの左下のAdd Platformをクリック

別ウィンドウで開発ボードの一覧がリストアップされます。


RedBearLab BLE Nanoを選択

続いて、BLE Nanoの詳細に移動しますので、画面右側中央のAdd to your Mbed Compilerをクリック


成功しました。

サンプルのインポート

次にサンプルソースをインポートします。
BLE_iBeaconというサンプルがありますので、これを自分の環境にインポートします。

画面左上のインポートをクリックします。


Source URLに先ほどのBLE_iBeaconのurlを入力し、Importを実行


成功するとプロジェクト一式が画面に表示されます

おもむろに、main.cppを見てみます。

すごくシンプルです。
main関数内で、おまじないした後は、全ての処理がbleInitComplete関数内に書いてあります。
サンプルは1秒毎にアドバタイジングパケットを送信する模様。
とりあえず、これをコンパイルします。


画面左上のコンパイルをクリック


コンパイルが始まります

が、エラーと警告。

  • Warning: #warning directive: toolchain.h has been replaced by mbed_toolchain.h, please update to mbed_toolchain.h [since mbed-os-5.3] in "extras/mbed_e7ca05fa8600/platform/toolchain.h", Line: 23, Col: 3
  • Error: Cannot open source input file "core_cmInstr.h": No such file or directory in "BLE_API/ble/services/iBeacon.h", Line: 19, Col: 27

とりあえず警告は無視して、エラーを直します。エラー行右のFix it!をクリック。

なんとライブラリを探してきて、候補を提示してくれます。
ただ、どれを選べば良いのか見当もつきません。

ということで調べてみると、

BLE Nano を mbed で iBeacon 化する - Tech Blog by Akanuma Hiroaki
前回 BLE Nano で Lチカまでやったので、今回は BLE Nano を iBeacon 化して、iOS アプリから検知してみたいと思います。 また、開発環境としては前回の記事で、 Vagran...

という記事が。
記事によれば、

ですがこのビルドを指定すると下記のようなエラーになってしまったので、 4eea097334d6 で実行しています。

とのこと。どうもインポート時に最新ビルドを持ってくるようにしたのが不味かった模様。
なので、プロジェクトを削除してもう一度インポートします。


Update all libraries to the latest revisionのチェックを外します。

警告は出ますが、コンパイルに成功し、バイナリをダウンロードできるようになりました。

まずはコンパイルとバイナリ生成が完了。

Windows 10 IoT Core での新規プロジェクト作成

Introduction


Visual Studio上で、しかもC#を使って、IoTデバイス上で動作できるアプリが簡単に作れる!!っていうのが、Microsoftのエコシステムの強みなんですけど、Visual Studioのどこから作成できるのかがわかりにくいのでメモ。

Instructions


Application Types

まず前提として、IoTデバイス上で動作するアプリは

  • GUIあり (UWP)
    • Foreground Apps
  • GUIなし(UWP)
    • Background Apps
  • 非UWP (C++のみ)
    • Non-UWP Apps

の3種になります。
パフォーマンスとか考えると、C++の非UWPって気もしますが、そもそもパフォーマンス云々ならWindows IoTなんか選択しません。

Windows IoTを選ぶのは、開発効率の高さ、既存資産の流用、多数の言語サポートなのですから。

Foreground Apps

で、前述の通り、GUIなら選択肢はForeground Appsしかないといっています。
Developing foreground applicationsによれば、

All of the standard UWP languages and project templates are fully supported on IoT Core.

訳: 全ての基本的なUWPの言語及びプロジェクトテンプレートはIoTコア上で完全にサポートされます。

とあるので、普通にUWPアプリを作ればそれで動くはずです。

Background Apps

問題は、GUIを使わないタイプ。
Background Appとよばれる、このタイプはコンソールアプリなのですが、従来のMainメソッドから構成されるものとは異なり、どちらかといえばサービスアプリケーションに近い印象を受けます。そもそもコンソール画面は表示されないので、コンソールアプリとも言えませんが。

Background Appsを作成するには、Windows.ApplicationModel.Background.IBackgroundTask インターフェイスを継承したクラスを作成するだけです。
そのクラスはタスクとして扱われ、バックグラウンドで実行されるという仕組みです。

サンプルを見る限りは非常に簡単ですが、ここはテンプレートを利用しましょう。
というか、MSDNにもそう書いてあります。
でも、Visual Studioをインストールしてもテンプレートは存在せず、Visual Studio Marketplaceから入手せよとのこと。えぇ...

入手したインストーラを実行し、新しいプロジェクトを開くと、Windows IoT Coreが追加されます。


ターゲットのWindows 10のビルドを選択します。

作成されたプロジェクトは、StartupTask.csというソースが一つ(+他の細々したもの)というシンプルなものです。

これを元に作成していけば、アイデアを形に出来るでしょう。きっと。

Windows 10 IoT Coreのセットアップ

Introduction


新しいプロジェクト、と言いますかPoCのために、検証を休みの日とかに考えています。
その一環でRaspberry Pi3を使おうと思い、どうせならWindowsでやってみるか、ということで最新のWindows 10 IoT Coreを試してみることに。

Instructions


Download Windows 10 IoT Core Dashboard

まずは、Windows 10 IoT Core Dashboardをダウンロードします。
これは、Windows 10にインストールする、IoTデバイスのダッシュボードアプリケーションです。
DashboardからOSのインストール、各種設定の変更が可能です。

Windows 10 IoT Core Dashboardからダウンロードします。

Install Windows 10 IoT Core Dashboard

次はインストールです。ダウンロードしたSetup.exeをダブルクリックするだけです。
ClickOnceなのか、インストールはすぐ終わります。

Launch Dashboard

インストールが完了するとDashboardが立ち上がりますが、スタートメニューから起動も出来ます。

Dashboardが立ち上がるとファイアウォールの許可を求めるダイアログが出るので、適当に許可を与えます。
許可しないと、OSイメージのダウンロードが出来ないと思われますので、必須でしょう。

Setup New Device

いよいよOSのインストールです。
インストールは、画面左の新しいデバイスのセットアップから実行します。
デバイスの種類Rasoberry Pi 2 & 3OS ビルドは、Windows !0 IoT Core (16299)を選択します。
ドライブは、SDカードが挿入されたドライブを選択します。

デバイス名は後から変更できますので、気にしなくても良いです。
管理者パスワードは、今後必要になるので忘れないでください。

ソフトウェア ライセンス条項に同意するをチェックし、ダウンロードとインストールをクリックしてOSイメージの作成を開始します。


暫くすると、コンソール画面が表示されますが、もう暫く待機します。


セットアップが完了しましたので、SDカードを抜いて、お手持ちのIoTデバイスに差し込みます。

IoTデバイスをLANに接続後、画面右側の自分のデバイスに移動します。


自分のデバイスが表示されます。


項目をダブルクリックすると遷移する先でデバイス名を変更できます。

Go to Device Portal

Dashboardから出来るのは、OSのインストールとデバイス名の設定ぐらいで、各種詳細設定の変更、リモート接続などは、Device Portalから実行します。
デバイス一覧から、対象のデバイスを右クリックすると表示されるコンテキストメニューからDevice Poratl で開くを選択します。

次に認証ダイアログが表示されます。


先ほど入力した管理者パスワードを利用してログインします。なおユーザ名はAdministratorです。


起動しました。

セットアップは以上です。
Raspbianのインストールに比べると非常に簡単です。
このあたりは流石Microsoftといったところでしょう。

WPF メモ その4 CustomControlに対してStyleが効かない

What does it mean?


タイトル通り。
CustomControlを作成し、定義したStyleを適用しても反映されない問題が発生。
小一時間悩みました。

What's wrong?


CustomControlのコンストラクタが悪かったようです。
普通は、

みたいな感じでデフォルト値は、FrameworkPropertyMetadataの第一引数で指定します。

が、コンストラクタにおいて、

と余計なものを書いたのが運の尽き。

カスタムコントロールのStyleでOrientationのPropertyを定義しても適用されませんでした。

なので、コンストラクタ内での値の設定をコメントアウトしたら解決しました。