ホストがCAN open経由でSmart Displayと通信する方法について (物理ボタンと仮想ボタンを通じてLEDとインジケーターを制御する)
序文
ご存知通りにスマートディスプレイ(Smart Display)を制御するにはシステムインターフェイスと通信プロトコルが必要です。この記事ではクライアント制御の観点からArduinoを使用して Smart Displayを制御する方法をシミュレートします。ホスト(HOST)がコマンドを送信してSmart Displayのインジケータライトの色を変更する方法を勉強します。例として、デモのシナリオを作成してみます。UIデザインにタッチボタンを配置して、物理ボタンを接続します。 物理ボタンまたはタッチボタンを押すと、画面上のインジケーターライトの色が変わって外部のLEDライトもオンまたはオフになります。
序章
この度3.5 インチのSmart Display標準製品で説明します。物理ボタン、タッチボタン、画面上のインジケーター、基板ボード上のLEDを制御するためのプログラムの作成方法及びホストからのコマンドの受信方法についても説明します。その制御ホストはCANbusインターフェイスを備えた Arduino mega 2560 開発ボードです。また、アプリケーションシステムのブロック図は次の通りです。
システムのブロック図
このアプリケーションには以下のコンポーネントが必要です。
- スマートディスプレイ。
- ARDUINO Mega 2560
- ARDUINO Mega 2560用CANバスシールド
- CANバスドングル
- 物理ボタンセンサー。
- LED
- ソフトウェア GUI ビルダー v0.4.2(以上)
また、デモは 3 つの部分に分かれています。
- GUIビルダーでデモプロジェクトを設計します。
- プロジェクトを作成してアップロードします。
- Arduinoホストをプログラムします。
GUIビルダーでプロジェクトを設計する
まず、新しいプロジェクトを作成します。プロジェクト名を入力してデバイスカテゴリを選択します (今回は3.5インチのデバイス)。 通信プロトコルをCANopenにして、表示方向を横長モード(landscape)と設定します。 次に、図に示すようにUIテンプレートでブランクを選択して、最後に [作成(Create)] ボタンをクリックします。
上記設定が完了すると、次のような空白のページは表示されます。
このアプリケーション例では、ワークスペースにタッチボタンとインジケーター ライトのオブジェクトを追加する必要はあります。左側のオブジェクトを選んでドラッグアンドドロップするだけで実行できます。
プロジェクトを作成してアップロードする
これまでの手順をすべて完了したら、プロジェクトを作成します。以下の手順に従ってご展開ください。
GUIビルダーツールバーの「デバイス(Device)」ボタンをクリックして、「デバイスプロパティ(Device Property)」を選択します。そして、「デバイスのプロパティ」ダイアログボックスで、必要なボーレートを選択します。ただし、Arduino コードと GUI ビルダーの両方でボーレートを同じ値に設定することをお勧めします。最後に、「アップロード(Upload)」ボタンをクリックして、以下に示すようにこのプロジェクトをアップロードします。
プロジェクトのアップロードが完了すると、「プロジェクトのアップロードが完了しました」と表示されますので、「OK」ボタンをクリックしてウィンドウを閉じます。 (以下のように示す)
アップロードが完了すると、以下のような開始画面が表示されます。
画面が起動ページから操作ページにジャンプすれば、プロジェクトのアップロードが成功したことを意味します。
Arduinoホストをプログラムする
ArduinoのコーディングにはArduino統合開発環境のバージョン「IDE v2.0.4」を使用します。 CAN バス通信プロトコルを実現するために、プログラムでは mcp2515_can.h 関数ライブラリとその他の補助ライブラリが使用されます。 詳細については、「Arduino コード」をご参照ください。その中、ホストと SmartDisplay を接続するアドレスにご注意ください。CANバスを介してホストとSmartDisplaの間で通信する方法について、「GUI ビルダーの通信」コラムをご参照ください。 Arduino IDEプログラムでは、次の図に示すように、必要なレジスタアドレスがすべて定義されています。
CAN Open 構造では、ボタンのインデックスは0 (0x2000) に対応して、インジケーター ライトのインデックスは1 (0x2001) に対応します。オブジェクトのインデックスに注意することが重要です。オブジェクトのインデックスが判れば、Arduinoホストのプログラムでオブジェクトの状態を変更できます。また、対応するオブジェクトインデックスは、下図のコマンドフィールドで確認できます。
ここでオブジェクトの データ型 を定義します。 ユーザーが項目を追加したい場合は、ここで項目のデータ型を定義する必要はあります。
以下の図は、各オブジェクトの受信値を「ObjectFunCallback」で処理する方法を示しています。 ユーザーは、このコードの下の項目を変更または追加できます。
Arduinoホストが物理ボタンから値の変更を受け取ると、CAN 信号を通じて特定の値を SmartDisplayに送信します。「command structure ids and sub-indexes」を理解するには、次のプログラムをご参照ください。このコードの目的は、物理ボタンから変更された値に基づいてインジケーター ライト (オブジェクトインデックス 2) の値を更新することです。
Arduino IDEプログラムでは、オブジェクトのレジスタアドレス、ピンモード、物理ボタンやLEDピンの入出力などの外部アクセサリの設定を定義してボーレートを設定する必要があります。
最後に、ループ内で決定のシナリオを実行するタスクを定義します。物理ボタンまたはタッチボタンを押すと、画面上のインジケーターライトの色が変わって外部 LED がオンまたはオフになります。
付録:プロジェクトのセットアップ
Arduino IDEを介してこのプログラムを検証してアップロードした後、物理ボタンまたはタッチボタンを押すとLEDが点灯してインジケーターの色が緑色に変化します。また、インジケーターが赤色でLEDが消灯している場合は、物理ボタンもタッチボタンも押されていないことを意味します。以下の図のように示します。
GitHub https://bit.ly/3oT0o5M のこのリンクを参照して上記のプログラムをダウンロードできます。このデモプロジェクトに関する詳細資料は確認できます。また、実際のハードウェア配置は以下写真のようです。
物理ボタンまたはタッチボタンを押して画面インジケーターとLEDステータスを変更できます。ここで、SmartDisplay の例は完了しました。
結論
この記事の目的はGUIビルダーの操作と応用を促進することです。ユーザーはさまざまな通信プロトコルを通じて独自のホスト側コントローラーを設計するだけではなくて、ホストを介したコマンドを送受信してスマートディスプレイ(SmartDisplay)の制御方法を理解していただければ幸いです。
追記:この技術文書の原文は中国語で、和訳の内容に疑問がある場合は、原文をご参考願います。