追記

日々をアレコレ

-広告-


2017年03月28日 この日を編集

STM32F429 Discoveryで.NET Microframeworkを動かす

スイッチサイエンスさんでDiscovery kit with STM32F429ZI MCUが販売されるようになった。これまでよく売られていたSTM32F407 Discoveryと違って、STMicroelectronicsが.NET MicroFrameworkに対応するファームウェア を公開しているボードで、DigiKeyとかでしか日本では変えなかったもの。送料とかの問題でそこに手を出すのは面倒だなーって思っていたところで、今回のスイッチサイエンスさんでの販売なので、早速購入して環境構築したのでメモ。

まずは、ファームの更新から。

  1. STM32F429 Discovery向けの.NET MFファーム をダウンロード。
  2. STM32 ST-LINK utility をインストール。
  3. STM32F429 Disoveryのmini USB側で接続して、ST-LINK utilityを起動して、Target > Connectを選択。
  4. さらに、Target > Program & Verifyを選択。
  5. File Pathにダウンロードしたファームのzipを解凍した中から「NETMF_Binary_Image\Tinybooter.hex」を選択して Startボタンを押す。

ひとまずはここでファームの更新を完了する。

次に、開発環境を用意する必要があるんだけど、ここで注意が必要。ここで書き込んだファームって、.NET MFのバージョンが4.3.0.0でちょっと古い。具体的に言うと、.NET MF SDK 4.3(RTM) というバージョンのSDKをインストールする必要がある。最新が .NET MF SDK v4.3 (QFE2-RTM) で、4.3.1.0になるので、すでにそちらをインストールしてる場合は、バージョンが違うのでデプロイに失敗する。さらに、この.NET MF SDK 4.3(RTM)をインストールするには、Visual Studio2012がインストールされてる必要があるので、次の2つをインストールする。

すでに新しいバージョンの.NET MF SDKをインストールしてる場合は、インストールパスを変えておくほうがよさげ。

次に、STM32F429 DiscoveryのminiUSBで接続したまま、microUSBでもPCに接続する。その上で、MFDeployを起動して次の手順を実施。

  1. Deviceのコンボボックスで「USB」を選択する。すると、よこに「STM32F429I_DISCOVERY_a7e70ea2」と表示されるのを確認。
  2. Image FileのBrowseボタンを選択して、ダウンロードしたファームウェアの次の2つのファイルを選択。

    • NETMF_Binary_Image\ER_CONFIG.hex
    • NETMF_Binary_Image\ER_FLASH.hex
  3. Deployボタンを押す。

これで、Visual Studio 2012 Expressから「.NET MicroFramwork」から開発ができるようになる。

新しい2013以降のVisual Studioで開発できるかは未確認。


2017年03月22日 この日を編集

Arduino IDE for Visual Studio

Arduinoの純正開発環境であるArduino IDEはお手軽な分だけ機能が若干弱い。IntelliSenseに慣れきったダメダメな僕としては、いちいちリファレンスを調べながら開発するのが面倒だなーとか思っていたりする。けど、最近になって、Arduino IDE for Visual Studio なんていう素敵なVisual Studioの拡張機能があることを知ったので使ってみた。インストールは簡単で、Visual Studioのメニュー「ツール > 拡張機能と更新プログラム」から、「Online」を選択してから「Arduino」などで検索すると出てくるので、インストールすればOK。ただし、標準で入ってくる対応ボードが現在のところ、Genuino101とかESP8266系のものだけなので、それ以外を使う場合はさらに設定が必要。


2017年03月07日 この日を編集

SRGSを使った音声認識の定義をする

音声コマンドでBトレインショーティーを走らせる では、SRGS文法を使って制約を作り、特定の言葉に対する非同期な音声認識するという方法で音声コマンドを実現させている。OSだったり、利用環境だったりで利用できる認識できる言語が決まっているようで、僕が使っている環境だと日本語のWindowsデスクトップやモバイルだと日本語だけが、Raspberry Pi向けのWindows IoT Coreだと英語のみが認識可能っぽい。その辺に気をつけながらまずは、SRGS文法を使った制約を定義したファイルは次のように定義するといいらしい。

<?xml version="1.0" encoding="utf-8" ?>
<grammar
  xmlns="http://www.w3.org/2001/06/grammar"
  version="1.0"
  xml:lang="ja-JP"
  root="commands"
  tag-format="semantics/1.0">
  <rule id="commands">
    <one-of>
      <item>
        <one-of>
          <item>進め</item>
          <item>行け</item>
        </one-of>
        <tag> out.cmd="Forward"; </tag>
      </item>
      <item>
        戻れ <tag> out.cmd="Backward"; </tag>
      </item>
      <item>
        止まれ <tag> out.cmd="Stop"; </tag>
      </item>
    </one-of>
  </rule>
</grammar>
  1. <grammar> タグの中の lang属性は利用する言語に応じて変えること。今回の場合は日本語なので「ja-JP」を指定。
  2. <grammar> タグの中の root属性は認識を開始する制約について指定する。今回は単純なコマンドに使うので、一つだけしか定義してないけど、「玄関/廊下/洗面所/台所」「の」「ライト/換気扇」「を」「点ける/消す」みたいな感じで、複雑なパターンを定義することもできるらしい。 。
  3. <rule> タグを使ってコマンドを定義。

    1. 上の例では、前進、後退、停止の3パターンのコマンドを発行するために、それぞれが該当する要素を<item>タグを3つ定義し、<one-of> タグでまとめることで、いずれかを認識させている。
    2. それぞれの <item> には <tag> で認識した場合に発生するイベントで受け取るためのデータを定義している。今回の場合、cmd要素に、ForwardBackwordStopがデータして渡される。
    3. さらに、前進の要素については、さらに <one-of> タグを使って、「進め」と「行け」を両方同じコマンドとして認識するように定義。

この定義ファイルを \Grammar\Command.xml に保存した場合、音声認識を開始するには次のようなコードを実行すればよい。

var recognizer = new SpeechRecognizer();
recoginizer.ContinuousRecognitionSession.ResultGenerated += (session, args) =>
{
    // 制約を満たした認識をすると、args.Result.SemanticInterpretation.Propertiesは"cmd"をキーとして持つ
    if (!args.Result.SemanticInterpretation.Properties.ContainsKey("cmd")) return;

    // 最初に認識したコマンドを取得
    var command = args.Result.SemanticInterpretation.Properties["cmd"][0];

   // commandに応じた処理を書いていく
};

var grammerFile = await Package.Current.InstalledLocation.GetFileAsync("Grammar\Command.xml");

var grammarConstraint = new SpeechRecognitionGrammarFileConstraint(grammerFile);

recognizer.Constraints.Add(grammarConstraint);

var result = await recognizer.CompileConstraintsAsync();

var isStarted= result.Status == SpeechRecognitionResultStatus.Success;

if (isStarted)
{
    // 非同期な音声認識を開始
    await _recognizer.ContinuousRecognitionSession.StartAsync();
}

本当はもう少しエラー処理やらなんやら書いておく必要があるけど、そのへんはまた別途。


2017年03月06日 この日を編集

デモ用PCにCANPCを買ってみた

BトレインをBLE経由で操作するWindowsアプリのデモ用に CANPCを買ってみた。スティックPCを使うこととかいろいろと考えたのだけれど、カメラやスピーカーだけでなく、バッテリーもついているので展示で使うには便利っぽい上に、とりあえず店舗に見に行くかーとドスパラに言ってみたら26800円(税別)のところを店舗限定割引で21000円(税別)だったので思い切って買ってみた。

けど、買った当日にセットアップ中にシャットダウンしてから一切起動しなくなる自体に。使い始める前に初期不良のために修理に出したものが今日返ってきたので早速セットアップ。特に余計なものがインストールされているわけではないので動作が軽い。開発環境とかがっつりと動かすわけじゃないので、メモリ4GBでも快適。ただ、ストレージがすでに半分以上使っているので、そのへんだけ気をつけながら使っていく必要はあるかも。

デモ用に別に買っておいた モバイルモニター もバッテリーがあるので短い時間であれば、電源なしでもデモできるのはいいかもしれない。

一方でドスパラでは、新生活応援セール2017 とやらが始まっていて、今月中は18500円(税別)とさらにお安くなっているという運の悪さ。買ってから約10日間ある程度使っていたのなら、まだ諦めがつくのだけれど、使わないまま修理に出してる間に値下げってなんという魔の悪さ。こういう運の悪さは昔から。なので、この日記経由で買うことで僕を慰めて欲しい(笑)。

Diginnos DG-CANPC (ボトル型パソコン Windows 10)

サードウェーブデジノス
¥ 22,140

Diginnos DG-NP09D 8.9インチ WUXGA(1920x1200) バッテリー内蔵 モバイルモニター

サードウェーブデジノス
¥ 19,980

Tags: pc

CANPCをリモートデバッグできるように設定

デモに使うアプリを開発用PCからデバッグできるようにするためにした設定。

  1. 開発者モードに変更

    デバイスを開発用に有効にする - UWP app developer | Microsoft Docs を参考にWindowsのモードを開発者モードに変更。

    1. 設定アプリを開く
    2. 「更新とセキュリティ」を選択
    3. 「開発者向け」を選択
    4. 「開発者モード」を選択
  2. Remote tools for Visual Studio 2015のインストール

    開発用PCのVisual Studioからリモートデバッグをするためにアプリをインストールする。実は、インストーラの取得に時間がかかったり。いろんな説明ページやMSDN内のページからのリンクをたどるとリンク切れだったりすることが多かった。リモート コンピューターでの Windows ストア アプリの実行 このページ中ほどにある「リモートツールのインストール」にある「Visual Studio 2015」の「x64」向けのインストーラを今回はダウンロード。対象の環境に合わせてインストールすればOKで、32bitなものならx86を選択すること。また、間違えてVisual Studio 2013向けのものをインストールした場合、「リモートデバッガの構成」設定が初回起動時には発生しないので注意。その場合は、アンイストール後に一度再起動する必要があるっぽい。

    一通り設定が終わると、開発用PCのVisual Studioでターゲットデバイスを「リモートコンピュータ」に設定すると、リモートマシンの選択画面が出てきて自動検索でターゲットのPC名を選択すればOK。実際に配置する際にはターゲットコンピュータで利用するユーザーアカウントとパスワードの入力が求められるので、入力すればあとは普通にVisual Studioのデバッグが可能。


2017年01月05日 この日を編集

シリアルコントロールモータードライバを使ってみた

乾電池6本という比較的大きめの電圧でモーターをmbedのBLE経由で駆動させたいということで、シリアル通信でモーター駆動できるモータードライバを探していたら、 SparkFunのシリアルコントロールモータードライバ を発見。これまでよく使っていた、DRV8830を使ったI2Cモータードライバモジュール と比べると性能、機能として以下の部分が優れてる感じ。

  • 動作電圧が11V(最大定格は12V)まで。
  • モーター接続が2チャンネルあって、1チャンネルあたり瞬間最大1.5A(定常1.2A)まで対応の上、ブリッジすることで1台なら2倍の電流に対応可。
  • 通信方法はTTLなUART(9600/57600/115200)、I2C、SPIが選択可。
  • I2Cのアドレスは10パターン選択可。
  • 1台をマスターとして上位のCPUと通信し、最大16台をスレーブとして接続することで最大34台まで同時に制御可能。
  • 入力電源から3.3Vを出力できるので、マイコンの電源も場合によっては供給可能。

実際に使ってみると、少し面倒な感じになってたのでメモ。詳細はSerial Controlled Motor Driver Hookup Guide - learn.sparkfun.com を参考のこと。

  1. Hardware Overview にある通り、通信の設定は基板裏のジャンパで設定する。デフォルトは9600bpsのUARTになっている。商品ページにある「2Cアドレスには、デフォルトでUARTのbaudsが利用可能」という一文がよくわからないなーと思ったら、アドレス設定というよりは、通信方法の設定のデフォルトがUARTで9600bpsになってるということらしい。
  2. I2Cで使う場合、プルアップ抵抗を自分で実装、あるいは、裏面のジャンパをUser向けのジャンパを閉じる必要がある。
  3. I2C(多分、SPIでも)で使う場合、初期化処理が時間かかる場合がある。利用する流れは次の通り。

    1. IDを読み込んで、正しい値(0xA9)が返ってくるのを待つ。
    2. コマンド受付可になるまで待つ。
    3. ブリッジや回転方向などの設定をする。
    4. モーターの各チャンネルを有効にする。

    どうも、2のところで時間がかかる場合があるっぽい。その辺、は仕方ないのかなーと思ってとりあえず深くは調べてない。

面倒なところがあるとはいっても、一度操作になれると結構便利に使えそうな感じではあるので、ネタによっては使っていきたいものではある。


-広告-

追記