Microchip社のRN487xBluetoothモジュールを使用したセンサーとコントロール
BluetoothモジュールのRN487xファミリと、低電力周辺機器プロジェクト用にそれらを構成する方法について説明します。
小型で低電力の周辺機器を開発している場合は、Bluetoothを通信層として検討している可能性が高くなります。
標準が進化するにつれて、Bluetooth接続デバイスが急増しました。ほとんどすべての周辺機器設計に完全なSoC(システムオンチップ)を提供するハードウェアモジュールが導入されました。北欧のnrf52840が良い例です。システムコアは、32ビットプロセッサとマルチプロトコルBluetooth無線です。このコアは、必要になる可能性のあるすべてのインターフェイスに囲まれています。 GPIO、PWM、USB、SPI、I 2 S、その他多数。
この強力なSoCやその他の欠点は、複雑さです。これらのSoCに必要な組み込みソフトウェアを作成および統合するには、かなりの学習曲線と開発時間が必要です。
ただし、最も一般的なタイプの周辺機器のいくつかについては、より単純な代替手段があります。周辺機器が主にリモートセンサーまたはリモートコントロールであり、チャネル数(アナログおよびデジタル)が限られている場合は、Microchip社製のRN487xモジュールで目標を達成できる可能性があります。
この2つのBluetoothモジュールのファミリは、複数の同時双方向デジタルおよびアナログチャネルを提供します。モジュールは、モジュールNVRAMにわずかな構成を保存するだけで、特定の設計に合わせて調整されます。シンプルでありながら、モジュールはBLE(Bluetooth Low Energy)規格に準拠しているため、最新のスマートフォンなどの最新のBluetoothクライアントと互換性があります。
このシリーズでは、RN487xモジュールの使用方法を示します。 4つのタスクのそれぞれについて、機能するBluetooth接続周辺機器を作成します。デジタルセンサー、デジタルコントロール、アナログセンサー、およびアナログコントロール。各例には、公称回路とRN487xに必要な構成が含まれています。周辺機器を実行するための簡単なアプリケーションスクリプトも提供されています。アプリケーションスクリプトのインターフェイスポイントは十分に文書化されています。これらの周辺機器をより大きな設計のサブシステムとして組み込む可能性を最大化します。
設計の概要
「アナログセンサー」の例のグラフの内訳を見てみましょう。主要なインターフェースは赤で表示されています。
ペリフェラルと通信するLinuxシステムの表現
作成するシステム要素は3つあります。周辺機器については、センサー信号を提供するハードウェアを作成する必要があります。この例のトランスデューサー。変化するアナログ電圧を生成します。ユーザーのために、データを表示するアプリケーションを作成します。この例のPythonスクリプト。
スクリプトは、GATT APIを使用して、周辺機器との間で情報を転送する必要があります。また、RN487xモジュールでいくつかの構成を作成する必要があります。この構成は、アプリケーションとハードウェア間のデータの流れを制御します。
コンポーネントの選択
RN487xファミリには2つのモジュールがあります。 RN4870とRN4871。 I / O用に用意されているピンの数と種類が異なります。これらの制約はデータシートとユーザーガイドにありますが、多少散在しています。以下は、2つのチップのピンバジェットの再編成です。この配置により、周辺機器に必要なチップを簡単に確認できるようになります。
cモジュールで使用できるI / Oピンタイプは3つあります。
タイプ | 説明 |
ADC | アナログ入力:入力信号レベルは数値範囲に変換されます。 |
PWM | アナログ出力:数値のペアは方形波に変換されます。数値は、方形波の周波数とデューティサイクルを制御します。 |
DIO | デジタル入力または出力:デジタル入力の場合、高信号レベルまたは低信号レベルはそれぞれ1または0を表します。デジタル出力の場合はその逆です。 |
そして、2つのモジュールのピンバジェットは次のとおりです。
RN4870
RN487xデータシートの画像
ピン名/機能 | P1_0 | P1_1 | P1_2 | P1_3 | P2_2 | P2_3 | P2_4 | P2_5 |
ADC | x | x | x | x | ||||
PWM | x | x | ||||||
DIO | x | x | x | x | x |
RN4871
RN487xデータシートの画像
ピン名/機能 | P1_2 | P1_3 |
ADC | x | |
PWM | ||
DIO | x | x |
これらの表は、PWMが不要で、1つまたは2つの信号のみを管理する必要がある場合は、4871を使用することを明確にする必要があります。これにより、リソースを節約できます。 PWMが必要な場合、または3つ以上の信号を管理する場合は、4870が必要です。アナログセンサーの場合、アナログ入力は1つしかないため、4871で十分です。信号をモジュールのP1_2ピンに接続します。
BLEプロトコルスタックのGATT(汎用属性)プロファイルレイヤー
いくつかの実際の例を実装する準備がほぼ整いました。ただし、ユーザーアプリケーションを作成するには、ペリフェラルと通信するときに使用するAPIをより正確に理解する必要があります。
すべてのBluetoothLow Energyデバイスは、構造化データの交換にGeneric Attribute(GATT)プロファイルを使用します。このモデルでは、周辺機器は単純なデータベースを保持するサーバーとして編成されています。次に、データベースは、有用なデータを表すいくつかの変数を保持します。 Pythonスクリプトなどのアプリケーションは、GATTAPIを使用してデータベースに名前ベースのクエリを実行するクライアントとして編成されています。 APIを使用して、データベースから値を読み取り、データベースに値を書き込むことができます。
プレビューとして、Pythonでの2つの便利なGATTAPIメソッド呼び出しを次に示します。
gatt_rq.connect()gatt_rq.write_by_handle(vh_light、 str(bytearray([8]))
1つ目は、周辺機器への接続を確立するために使用されます。 2つ目は、データベースにいくつかの値を書き込みます。これらの値は、周辺機器のデジタル出力としてすぐに表されます。 「write」メソッドの最初の引数は、制御する1つまたは複数のデジタル出力に固有のハンドルです。機能的に完全な例に必要な行はあと数行です。
このAPIは、iOS、Android、Windows、およびLinuxのBluetoothサービスの一部として公開されています。この記事の例はPythonで書かれており、多くの一般的なLinuxディストリビューションで実行されます。
モジュール構成
上記のスクリプトメソッドの「vh_handle」パラメータは、このデザインパターンの最後の要素につながります。このパラメータは、周辺機器の特定の物理レベル信号のソフトウェアでの参照です。しかし、このデータパスはどのように完成しますか?これを行うRN487xのNVRAMには2つの構成があります。特性の定義とピンバインディング。
- 特徴的な定義: データベース内の値にスペースを割り当て、各値にクライアントアプリケーションで参照するための一意の識別子を与えるコマンド。
- ピンバインディング: 物理信号をデータベース値に、またはその逆に変換するスクリプト。
RN487x構成は、カスタムコマンド言語を使用してモジュールにロードされます。モジュールへのコンソール接続の確立、および構成コマンドの発行に関する一般的なガイドについては、付録を参照してください。
これらのコマンドを発行すると、RN487x内の不揮発性構成は次のようになります。
すべてのデータ値は、「サービス」と「特性」の2つのレベルの階層内に存在することに注意してください。この組織は私たちが必要とする以上のものですが、論理的に別々のサービス内に複数のセンサーと制御が存在する複雑なシステムに役立ちます。
これで、RN487xモジュールに関する3部構成のシリーズのパート1は終了です。パート2とパート3は、同じデザインパターンを使用して、デジタル入力、デジタルコントロール、アナログセンサー、およびアナログコントロールを作成します。
パート4には、すべての例に適用される、さらに研究するためのいくつかのトピックも含まれています。
以下に、他の記事で続く各プロジェクトの説明の前に、モジュールを構成して使用するための情報の付録を示します。
コンソール接続を使用したRN487xの構成
RN487xを構成するには、最初にモジュールに電源を供給し、モジュールとワークステーションの間にシリアル接続を確立します。各デモンストレーション回路には、必要なRX、TX、およびGND信号を公開する3ピンの「prog」ジャンパーがあります。ワークステーションへのこの接続方法がわからない場合は、優れたガイドをここで入手できます。
ワークステーションでターミナルエミュレータを起動します。特に適していて広く利用できるエミュレータの1つは、ほとんどのPython環境に含まれている「ミニターム」ユーティリティです。ワークステーションシェルでは、次のように開始できます。
python -m serial.tools.miniterm --eol LF / dev / ttyUSB0 115200
この例は、Linuxシステムに適したポート名(/ dev / ttyUSB0)を示しています。ポート名の形式は、他のオペレーティングシステムでは異なります。モジュールのデフォルトのボーレートは115200であり、変更する理由はほとんどありません。
RN487xモジュールはデフォルトでDATAモードになっています。コマンドモードが必要です。このモードは、ターミナルエミュレータアプリケーションで3つのドル記号(「$$$」)を入力することでアクティブになります。ターミナルウィンドウには文字は表示されませんが、結果としてRN4871から返されるコマンドプロンプトが表示されます。
CMD>
「d」キーを押してから「Enter」キーを押してみてください。結果として次のようなものが表示されるはずです:
CMD> BTA =D88039F80080 名前=RN_BLE 接続済み=いいえ Authen =2 機能=0000 サービス=00 CMD>
これは、モジュールの状態の最小限の説明です。コマンドインタプリタが入力した文字(「d」)を表示しなかったことに注意してください。これを修正するには、「echo」をオンにする必要があります。これを行うには、「+」キーを押してから「Enter」キーを押します。デバイスは次のように応答する必要があります:
CMD> ECHO ON CMD>
これで、このプロジェクトの残りの部分で説明するさまざまな構成タスクを完了できるようになりました。たとえば、サービスの作成は、完全な「PS」コマンドを1行に入力し、その後に「Enter」キーを押すだけで実行できます。例:
CMD> PS、59c88760536411e7b114b2f933d5fe66 AOK
各プロジェクト構成では、複数行のスクリプトをモジュールNVRAMにコミットする必要もあります。このタイプの複数行コマンドには、もう少し説明が必要です。スクリプト入力は「WW」コマンドで開始し、その後に「enter」を続けます。次に、各スクリプト行を入力します。最後の行を含む各スクリプト行も、「Enter」キーで終了します。
最後に、「esc」キーを押してスクリプトをコミットします。例:
CMD> ww @CONN | O、08,72 いいよ CMD>
モジュールの一般的な初期化
このプロジェクトの例の1つにRN487xモジュールを使用した場合、またはモジュールをまったく異なる目的で使用し、別の例のためにモジュールを構成しようとしている場合、モジュールに何らかの構成がある可能性があります次の使用目的と競合します。
このプロジェクトのすべての例の前に、次の手順を実行する必要があります:
- 既存のスクリプトをすべて消去します。
- スクリプト処理を有効にします。
- 既存のサービス/特性定義をすべて消去します。
- 使用するピン(P1_2、インデックス0A)から特別な機能を削除します。
- モジュールを再起動します。
前の付録セクションを使用して、モジュールコマンドシェルにアクセスします。次に、次のコマンドシーケンスを使用して、必要な初期化を実行します。
CMD> WC いいよ CMD> SR、0040 いいよ CMD> PZ いいよ CMD> SW、0A、00 いいよ CMD> R、1 再起動
サンプルPythonスクリプトの実行に必要なLinuxセットアップ
ハードウェア
もちろん、これらのスクリプトを実行するシステムには、Bluetooth Low Energy(BLE)をサポートするハードウェアが必要です。 BLEはバージョン4で導入されたため、Bluetoothハードウェアがこれより下のバージョンを指定している場合、これらの例ではおそらく機能しません。
これらの例を試すためにワークステーション用のUSBアダプターを購入する場合は、QualcommCSR8510を採用しているアダプターをお勧めします。ここで1つのインスタンスを購入できます。
ソフトウェア
この設定はDebian10で検証済みです。UbuntuのようなDebianベースのディストリビューションに適用できるはずです。これらの例から直接アクセスされる2つのコンポーネントがあり、Debian10にはデフォルトでインストールされていません。
- BluetoothスタックにアクセスするためのPythonモジュール。このコンポーネントはパッケージ管理システムから利用でき、「python-bluez」という名前です。
- BluetoothGATT呼び出し専用のPythonモジュール。 「gattlib」。このコンポーネントは、Pythonの公式パッケージインデックスから(「pip」ユーティリティを介して)入手できます。
「gattlib」の「pip」インストールは、ELFライブラリを構築します。このプロセスには、いくつかのツールとライブラリも必要です。
これらすべてをまとめると、パッケージのリストがシステムパッケージマネージャーから要求され、その後に「pip」への単一のモジュール要求が続く必要があります。これらのアクションを完了するためのスクリプトがここに提供されています。スクリプトを実行することを選択した場合は、ダウンロード後に「実行」権限をスクリプトに与える必要があります。
参考資料
- RN487xデータセット
- RN487xユーザーガイド
- WindowsのGATTAPI
- iOSのGATTAPI
- PythonのGATTAPI
このプロジェクトシリーズの次のパートをもう一度確認してください。ここでは、完全な例を作成します。
プロジェクト1と2にジャンプします。デジタル入力とデジタル制御を構築します。
モノのインターネットテクノロジー
- セルラーIoTとBluetoothLEの相乗効果
- Bluetoothメッシュを使用した設計:チップまたはモジュール?
- Contrinex:Bluetoothインターフェースを備えたクラウド対応のスマートセンサーとセーフティライトカーテン
- ADLINK:EdgeAISolutionsとNVIDIAEGXプラットフォームを使用してAIをエッジからクラウドにデプロイする
- RaspberryPiにアナログ入力のないアナログセンサー
- RaspberryPiとZabbixスーパーバイザーで読み取るアナログセンサー
- データをどうすればいいですか?!
- IoTデータをエッジからクラウドに、そしてその逆に活用する
- デジタル化と食品および飲料業界
- エッジとIoT:IoT World2019からの洞察
- デジタルマニュファクチャリングとIIoT–単一のプラットフォームでの成功