masato-ka's diary

日々思ったこととか、やったことの備忘録。

BLEモジュールRN4020のIOポートをシリアルから制御する。

この記事について

 この記事ではBLEモジュールRN4020のIOポートを制御する方法について紹介します。RN4020については前回の記事をみてください。

masato-ka.hatenablog.com

RN4020のI/Oポート

 RN4020のI/OポートはアナログI/O(AIO)とデジタルI/O(PIO)の2種類のポートがあります。それぞれシリアルインタフェースから制御するためのコマンドが用意されており、RN4020にスイッチやLED、アナログ出力のセンサを取り付けて値を読み出すことが可能です。

アナログI/Oについて

   RN4020のアナログI/0はAIO0からAIO2までの3ポートあります。入出力電圧のレンジは0Vから1.3Vと低電圧となっています。1mV単位の指定ができ値のレンジは(0x0000〜0x0514)となります。

デジタルI/Oについて

 デジタルI/OはPIO1,PIO2,PIO3,PIO7の4ポートあります。欠番になっているピンも存在しているのですが、基本的にシリアルのフロー制御など他の用途に使われているため使用しません。もちろんI/Oとしても利用することは可能だと思いますが、ユーザガイド上に方法が記載されていません。

ピンアサイ

 モジュール自体のピンアサインはユーザガイドをみてください。ここでは秋月電子通商のブレークアウトボードでのピンアサインを紹介します。以下図の通りのピンアサインになっています。紹介したPIO7についてはこちらでは出ていません。従ってデジタルI/OはPIO1からPIO3までの3ピンのみ利用可能です。またPIO1はボード上のLED制御ピンと兼用になっています。

f:id:masato-ka:20170926001343p:plain

シリアルからのI/O制御

I/Oの制御方法はアナログとシリアルでそれぞれ変わります。それぞれの制御コマンドについて説明していきます。

アナログI/Oの制御

  • アウトプットコマンド

アナログアウトプットのコマンドは@Oです。以下のように使います。

@O,2,0014

最初の引数がポート番号を指し、今回はAIO2を指定しています。さらに0014は出力値を16進数で表しています。20mVがAIO2に出力されるはずです。他のピンについても同様に指定できます。

  • インプットコマンド

アナログインプットは@Iです。以下のように使います。

@I,2
- 0000

最初の引数はアウトプットと同じくポートを表しています。結果としてAIO2のポートの電圧値(ここでは0)が結果として帰ってきます。

デジタルI/Oの制御

  • デジタルアウトプットコマンド

デジタルアウトプットのコマンドは|Oです。以下のように使います。

|O,07,05

最初の引数はピン番号の制御ですが、16進数で指定しています。ここではPIO1,PIO2,PIO3を指定しています。2つ目の引数は出力指定です。こちらも16進数指定でPIO1,PIO3をHighに指定し、PIO2をLowに指定しています。ブレークアウトボードの場合、ボード上のLEDが消灯するはずです。(Highで消灯、Lowで点灯)各PINとレジスタの関係は以下の表のようになっています。複数指定する場合は足し算してください。

ピン番号 レジスタ
PIO1 0x01
PIO2 0x02
PIO3 0x04
PIO7 0x08
  • デジタルインプット

デジタルインプットは同様に上記のレジスタの表に従って以下のように指定します。

|I,01,
-01

これはPIO0の値を読み取り結果が同じくレジスタの形式で帰ってきます。(-はRN4020からの応答を表す)PIO1の値が1になっています。(LEDからの入力電圧があるため)

まとめ

 以上のようにRN4020はシリアルからI/Oを制御することが可能です。しかし単純なI/O制御だけならばシリアル接続側のマイコンで行っても良いと思います。RN4020のスクリプト機能を使うとアナログI/O,デジタルI/Oともに変数に代入したり、キャラクタリスティックのハンドラにバインドすることができます。こちらについてもまとめ次第記事にしたいと思います。