すらりん一覧

DFPlayer Mini を使ってみる

マイコンで音声ファイルを再生するのに、 SDカード等にいれたデータをストリーミングして再生かなと考えていたのですが、 mp3 のファイルを直接再生するモジュールボードを発見しました。
amazon で眺めていたら発見したのが以下のものです。これを書いている現在で2つで 800 円ほどとなっており、ネットの情報からすると少し高くなっているのかもしれません。

このモジュールボードのチュートリアルとしては以下の Wiki に記載がありました。

https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Tutorial

実ボードでは “MP3-TF-16P” と刻印がありますが、まあなんとか動いている感じです(※)。
また、より詳細な仕様書的なものとしては、以下の pdf を参照して試してみています。

http://www.flyrontech.com/uploadfile/download/2016441645109830.pdf

※ もしかすると別に本家があるコピー品なのかもしれません。
続きを読む


ATTINY13A

ATTINY13A という個人的に面白いマイコンを知りました。
これは、 RAM 64byte, ROM 1Kbyte、そいて8ピンのマイコンです。小さいけれどスペックも小さいというシロモノです。
これでいて普通に Arduino IDE でスケッチを書いてプログラムを動かすことが出来ます。
しかしこれだけの制限された状態では一体これで何が出来るんだ?という状況ですが、これで十分な場面もあるのではないでしょうか。

あと、このマイコンは安いです。 Arduino UNO に載っている ATMega328 は 230 円なのに対して、 ATTINY13A は 50 円でした。

Arduino IDE 環境の更新

ATTINY13A に向けたスケッチを書くためには、 Arduino IDE に設定をしなくてはなりません。

まず、 ArduinoIDE を起動して環境設定を開きます。
そこで「追加のボードマネージャのURL」に、次の URL を追加します。

  • https://kimio-kosaka.github.io/bitDuino13/package_bitDuino13_index.json

その後、メニューの「ツール / ボード / ボードマネージャ」 と選びます。
各ボードのリストが出ているのですが、この中に ”bitDuino13” というものがあるとおもうので、これをインストールします。

インストールが完了すれば、ひとまずこのチップに向けたバイナリが生成できるようになっていると思います。

書込のための準備

スケッチを書くことが出来ても、プログラムを ATTINY13A に書き込むことが出来なくては意味がありません。
ライターが必要になりますが、ここで以前準備しておいた Arduino UNO を利用したいと思います。

以下の手順で、Arduino を ISP として書込の装置と化させます。

  1. ArduinoIDE を起動
  2. メニューの ファイル / スケッチ例 / 11.ArduinoISP / ArduinoISP を選択します。
  3. マイコンボードに書き込むを実行

書込み

Arduino IDE に以下のようなスケッチを書いてみます。

そして、「ツール / ボード / ATtiny13」を選択します。また、「ツール / 書込装置 ”Arduino ISP”」を選択します。

ArduinoISP と ATtiny13 を接続します。接続については以下のような感じになります。

接続したら、マイコンボードに書き込む、をメニューから選択すると先ほどのスケッチが書き込まれます。

Lチカ確認

先のスケッチでは3番ピンを ON/OFF していたので、ここに LED を繋いで点滅するかを確認します。
Arduino で書き込んだ場合では、書込完了後既にマイコンが動き出すようでした。そのため先に全て配線してしまってから、スケッチを書き込むと、書込完了後から点滅が始まると思います。

その他

生成された HEX ファイルを確認してみたいと思って、 preferences.txt の中に、”build.path=(出力先パス)” を記述してみました。そうしたところ、スケッチのコンパイルの終段でエラーが発生するようになってしまいました。
どうも相対パスによって出力先を変更するような感じなので、書込先ドライブを変更してみました。この結果うまく出力が出来るようになりました。
非 Windows の環境ではルートフォルダから任意の場所に行ける仕組みだからこれで問題ないのかもしれません。

同じように悩んでいる人の助けになったら幸いです。自分はこれに気付くのにしばらくかかりました。


7セグ4桁の表示モジュールを買ってみた

Amazon をぶらぶらを見ていたら、デジタル LED チューブモジュールというものを見つけました。
7セグ LED を持っておらずちょっと憧れがあって、このモジュールは4桁かつ3個セットでこのお値段ということもあって、つい買ってしまいました。

通常の一般的な 7セグ LED とは使い勝手が全く違うものだったりするので、やっぱり通常の7セグは欲しいなと思う気持ちは変わりませんでした。
このモジュールでは、信号線が2つで4桁を表示できるようになるのでその点が魅力のものといえるようです。

使い方

Arduino との接続は以下のようにしました。

そして動かすためのスケッチですが、公開されているライブラリを使用しました。
このライブラリは、 https://github.com/reeedstudio/libraries の中にある、 DigitalTube です。

これを追加した上で、以下のようなスケッチを作成しました。

動作させると、カウンタが進みつつ、中央のコロンが点滅するといった動きが確認できるようになっています。


FlashAir を Raspberry Pi の起動メディアにする

FlashAir を Raspberry Pi の起動ディスクにしてみました。
ここでの Raspberry Pi は Raspberry Pi 2 や、 Raspberry Pi Zero あたりをターゲットとしています。

必要なもの

どちらの環境にしても FlashAir は通常サイズの SD カードなので、変換をして Raspberry Pi2/Zero に接続します。
今回は以下のような変換するものを用いてみました。

続きを読む


Arduino Uno を買ってみた

Raspberry Pi が手元にあるのですが、衝動買い的に Arduino Uno を購入してみました。
たまに RPI では信号レベル変換が必要な電子パーツの動作確認にも使えそうだなと思っています。

そんな Arduino ですが、 Arduino IDE を使ってスケッチと呼ばれるプログラムを作成し、ROMに書き込んで実行します。
このあたりが、 Raspberry Pi とはちょっと違いますね。

1つ自分が Arduino を初めて触ってみて、手間取った点をここでは詳解したいと思います。

手間取った点

Arduino IDE でスケッチを作成して、Arduino に書込をしようとすると失敗になっていた点です。
コンパイルは通るのと、機材には電源も投入されて LED が光っている状態なのに、です。

こうなってしまったのは自分の環境が問題でした。
既に USB シリアル変換ケーブルを使用していて、 Arduino は2番目の認識となっていた点が原因です。これを切り替えるのには、 Arduino IDE のメニューから “ツール/シリアルポート” で Arduino が接続されている COM ポートを適切に選択することが必要でした。

本当の意味で初めて、こういったボードを触る場合にはこの点に引っかかることはないでしょう。

これからもう少し Arduino を触ってみたいと思いますが、先にエディタ部分をなんとかしたいと感じでした。Arduino IDE もコンパクトで悪くない印象ですが、エディタ部分が自分が使い慣れているエディタとか、他のエディタを使いたいなぁという気持ちがありますね。
かるく検索すると VSCode を開発環境に使うことが出来そうなので、それを試してみたいと思います。

その他

ボード本体だけを買ったらまさかの USB タイプ B のケーブルが必要だったので、それは驚きました。今の時代ずいぶんとこのケーブルを見かけなくなりました。
これから始める人は、必要な USB ケーブルについても手持ちがあるのかを調べておいた方がよさそうです。

あるいは最初から色々とセットになったものを買うというのも安全ですね。


Caliburn.Micro に入門してみる その3

前回は簡単にバインディングができることを確認しました。実はあれは省略形に近いものだったので、フルに設定するとどのようになるかを今回確認します。
基本的に前回のプロジェクトの使い回しで説明します。

メソッド呼び出し

ボタンの Name を削除して、 Interaction.Triggers を指定してメソッドを呼び出してみます。

ShellView.xaml は以下のように変更します。

EventTrigger の Click までは問題ないとして、 Livet では CallMethodAction を呼び出していたような箇所で、 ActionMessage によってメソッドを呼び出します。
この ActionMessage も引数情報を設定することが可能です。パラメータを指定するには以下のようにします。

これを受け取るための IncrementCount メソッドでは引数を取れるように変更する必要があります。忘れると例外(No target found for method IncrementCount.)が飛びます。

メソッド呼び出し その2

ここまでの設定方法が Long Syntax と呼ばれるものになっているようです。次に Short Syntax と呼ばれるものについて確認してみます。

ShellView.xaml を編集してボタンを追加してみます。

見て分かるように、 cal:Message.Attach という添付プロパティでイベントとアクション(メソッド呼び出し)を設定しています。
注目なのはイベント名の記述と、メソッドの呼び出し&引数記述がこのように書ける、という点です。わかりやすいですね。

引数については即値で書いていますが、ここを他のコントロールの値にすることも可能です。

さらに Caliburn では、メソッド引数名から、引数を推測してバインディングしてくれる機能もあります。
以下のように ShellView.xaml を編集して、スライダとボタンを用意してみます。

スライダの名前を IncrementCount の引数名である delta としたことで、 Caliburn が情報をうまく解釈して結合してくれます。

まとめ

自分でバインディング設定を記述しないでもバインディングしてくれることで、プログラマの作業を省力化してくれる感がすごくあります。
ただし、ルールを知らないと動きを追いかけるのも厳しいという印象です。

これらのバインディングについては、 All About Actions を参照して読んでおくのもよさそうです。
パラメータとして、 $source, $view, $dataContext といったものも設定可能であったりするので、なかなか深いです。


Caliburn.Micro に入門してみる その2

前回はとりあえずプロジェクトを作成し、 Caliburn.Micro のお作法に従った Hello,world のようなものをやってみました。
今回はこのプロジェクトを使って、データバインディングを確認をしてみます。

今回も先人の記録を辿りつつ進めていきたいと思います。

ちなみに Caliburn.Micro の Documents の中では Basic Configuration 項にこの部分が書いてありますが、ほんの少しでした。

データバインディング

ShellViewModel に Count プロパティを追加します。

ShellView.xaml を以下のように編集してみます。

これを実行すると以下のようになります。明示的に「Text=”{Binding Count}”」 と書いていないですが、 Caliburn がこのバインド処理を行ってくれます。今回の場合、TextBlock の Name と対応するプロパティを見つけて、バインドを行う処理となっています。

コマンドバインディング

続いて以下のように ShellViewModel クラスにメソッドとプロパティを追加してみます。

そして、 ShellView.xaml も以下のように編集します。

これを実行して、 Increment ボタンを押すと、カウンタがインクリメントされ、 80 カウントになるとボタンが無効となります。

先ほどと同様にバインディングを記述していませんが、各コントロールの Name プロパティと一致するものを見つけて、バインドする処理が Caliburn によって行われるため不要となっています。Command の Can 系についても、同様に接頭辞 Can が付いたものを見つけて判定処理としてくれています。

余談

もちろん、Name を設定せずに Text=”{Binding Count}” などと記述することも可能です。 ValueConverter が必要なときには、こちらのような書き方をする必要が出てきそうです。


Caliburn.Micro に入門してみる

今まで MVVM のインフラストラクチャのライブラリとして Livet を使用していましたが、新バージョンも出ないし新しい環境用のプロジェクトテンプレートも提供が無いようだったので、比較的最近のものでよさそうなものは無いかと探してみたところ、Caliburn.Micro が良さそうだったのでこれを触ってみることにしました。

ここでは、 Nuget から簡単にインストールができる Caliburn.Micro バージョン 3.2.0 を対象にしています。また Visual Studio は 2017 (v15.6.1) を使用しています。

Caliburn.Micro について

Caliburn.Micro は出たばかりというわけでなく、5年以上経過しているというのに、日本語での記事がほぼないです。これから MVVM アーキテクチャでソフト開発を始めようと思っている人には、 Livet のほうをオススメできるのではないかと思います。 Livet のほうが日本語での検索性は良いです。

Caliburn のほうが良い点としては、対応プラットフォームが Livet よりも多いこと、現在も開発が続いていることが挙げられると思います。また、現時点においては開発者の方は Microsoft にいるらしいです。近いうちに、バージョンが 4.0 が出そうです。自分は Livet の良かった点に、プロジェクトテンプレートやらスニペットの準備やら、始めるのに楽だった点があります。 Caliburn.Micro ではそのような点は標準ではなさそうですが、普段のコード書きを楽にしてくれそうなバインディングの仕組みを提供してくれています。そして、 MEF を用いた拡張しやすそうな構成も1つの魅力に感じました。
続きを読む


Vulkan で Texture, Sampler の独立設定

Vulkan のコードにおいて、テクスチャを使用する際に、サンプラとテクスチャとをまとめている VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER を設定する箇所がありました。
よく見かけるサンプルでは、 OpenGL でテクスチャを使用するのと同じ感覚で、 サンプラとテクスチャを1体にして使っていたりします。
ここで、他の設定種別をみてみると VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE とあるので Image と Sampler は別に設定することもできるのではないか?と思いました。

続きを読む


NVIDIA Nsight Graphics を試す

NVIDIA Nsight といえば、 Visual Studio に統合されて、グラフィックス API 使用時のデバッグのお供として定番のものでした。これのスタンドアロン版、 Visual Studio に統合されないで単体で使用できるアプリケーションとして、「NVIDIA Nsight Graphics」が公開になりました。

今のところ、専用のドライバが必要になるみたいですが、ちょっと動作を確認してみたいと思います。

※ 少し前に Windows10 のドライバをダウンロードすると正常なものが取得できませんでしたが、現在は正常になっているようです

入手・セットアップ

現時点において NVIDIA の以下のページから入手が可能です。

このページからダウンロードページへのリンクがあります。ダウンロードには NVIDIA Developer のアカウントが必要になるようなので、持っていない場合には作成することが必要になります。そして、 Nshight Graphics 本体と、各自の環境に合わせたドライバをダウンロードします。

今のところ、 NVIDIA Geforce 600 番以降であれば対応しているようです。また 64 ビット Windows 7 or 10 の環境のみサポートしているようです。Windows 8系や 32 ビットあたりを打ち切っている辺り潔いです。デバッグ時にこれらの環境を使っていることは割と少ないと思いますが、ドライバのダウンロードの箇所には Win8 の文字があって対応していそうにも見えますが、注意が必要です。
続きを読む