処理付きシリアル通信

処理付きシリアル通信

処理付きシリアル通信

シリアルクラス

シリアル通信を使用するための操作 処理 クラスで定義されている Serialプログラムでそれらを使用するために実行する最初の操作 (スケッチ)それをコードに組み込むことになります import processing.serial.*;.

目次

    クラス Serial 指定されたパラメーターに応じて XNUMX つの異なるコンストラクターがあります。 唯一の必須パラメータは親オブジェクト () これは通常、クラスのメイン プログラム (プログラム ウィンドウなど) に対応します。 PApplet。 通常どおり、親は作成中のプログラムになります ( スケッチ 現在)、この最初の必須パラメータの値は次のようになります。 this.

    コンストラクターに渡すことができる他の XNUMX つのパラメーターは、①速度、②シリアル ポートの名前、③ パリティ プロトコルで使用される、④データビットと⑤ストップビットです。 必須の親オブジェクトに加えて、最も頻繁に渡されるパラメータは、ポート名と速度です。

    La シリアル通信速度 は整数です (int)は デフォルト値は 9600 です このパラメータがコンストラクタに渡されない場合。

    シリアルポートが利用可能。 リスト方式

    El ポート名 このようにして、システムによって決定された形式になります。たとえば、 Linuxディストリビューション それは次のようなものになります / dev / ttyS4 / dev / ttyACM3 o / dev / ttyUSB1 (ポートの種類に応じて)、Windows では次のようになります。 COM12。 ポートがデバイスに物理的に関連付けられていない限り、プログラムは通常、どのポートを使用すればよいかを認識できません。 ポートを選択する一般的な方法は、使用可能なポートのリストを取得し、それをユーザーに表示して、使用するポートを選択できるようにすることです。 方法 Serial.list() テキスト文字列のベクトルを返します (String) は、システムで使用可能なポートの名前に置き換えられます。

    ライブラリによってデフォルトで使用されるポート Serial メソッドによって返されるものの最初のものです list (きっと COM1 Windowsまたは / dev / ttyS0 en GNU / Linuxの)。 動作するハードウェアが厳密にわかっている非常に限られた状況 (キオスク モードのシステムなど) を除いて、通常は省略されず、宛先ポートが明示的に示されます。

    シリアル処理 Linux シリアル リスト ポート ttyACM ttyS ttyUSB

    上のスクリーンショットはシステムの出力を示しています GNU / Linuxの シリアルポートがXNUMXつある RS-232 (ttyS0 a ttyS3) と XNUMX 種類のアダプター XNUMX 個 (ttyACM0 a ttyACM1 y ttyUSB0 a ttyUSB2).

    Linux シリアル デバイスのアクセス許可 ttyACM ttyS ttyUSB

    シリアル ポートにアクセスするには、ユーザーはシステムが割り当てたグループに属している必要があります。通常、 TTY o ダイヤルアウト。 上の画像のスクリーンショットでは、シリアル ポートが ls /dev/tty[ASU]* -la pertenecen al グルポ ダイヤルアウト これには読み取りおよび書き込みアクセス許可が与えられます。

    シリアルプロトコルパラメータ

    La パリティ シリアル通信の で表現されます 処理 キャラクターとして(char) 値を取ることができます: ① N (なし) を検出しないようにするには、 パリティ、② E (さらに) であることを示します。 パリティビット 偶数、③ O (奇数) であることを示します。 パリティビット 奇数です、④ M (マーク) 常に パリティビット そして⑤ S (スペース) 常に XNUMX つを作成します パリティビット。 コンストラクターにパラメーターとして渡されない場合のデフォルト値は、 N (それなし パリティ).

    データビットデフォルトでは XNUMX ですが、フレームの各基本単位で送信される正味データ ペイロード (文字または単語と呼ばれる) を構成するビット数を示します。 データのビット数を示すパラメータは整数で表現されます(int).

    最後に、XNUMX 番目の可能なパラメータは、次のように表現される最終マークの長さを示します。 ストップビット (ストップビット)で表される数値で示されます。 浮動小数点 (float) 値を受け取ることができます 1.0 (パラメーターがコンストラクターに渡されない場合のデフォルト値)、 1.5、または 2.0.

    Serial クラスのコンストラクター

    次のリストは、クラス コンストラクターに渡すことができるパラメーターのさまざまな組み合わせを示しています。 Serial:

    • Serial(padre)
    • Serial(padre,puerto)
    • Serial(padre,velocidad)
    • Serial(padre,puerto,velocidad)
    • Serial(padre,puerto,velocidad,paridad,bits_datos,bits_parada)
    シリアル通信を終了します。 停止方法。

    インスタンス化時に割り当てられたシリアルポートを解放するには Serial、他のシステムアプリケーションがそれを使用できるようにするため、通信はメソッドで終了します stop、パラメータを受け取りません。

    シリアルポート経由でデータを送信します。 write.メソッド

    データを送信するには、クラス Serial de 処理 メソッドを組み込んでいる write ①文字列(String)、②バイト、または③バイトベクトル(byte[])。 それを思い出すと面白いです byte en 処理 (中 Java) は -128 ~ 127 の整数を表し、デフォルトでは文字列はエンコーディングを使用します。 UTF-16.

    シリアルポートからデータを読み取る

    シリアル ポート経由でデータを受信して​​いる間にプログラムが他のタスクを実行できるように、通常はデータを バッファ 受信したデータを必要に応じて読み取ります。 通常はあまり効率的ではありませんが、アプリケーションを停止して、利用可能なデータをすべてロードすることができます。 ただし、最も一般的なのは、各反復のいずれかで、情報が到着したときに情報を読み取ることです。 draw、特定の数量が利用可能であるか、特別なコードを受信した場合。

    バッファー内で使用可能なデータの量。 利用可能な方法

    データが到着したかどうかを確認するには バッファ シリーズ、メソッド available このファイルにすでに格納されているバイト数を返します。 バッファ。 どちらの場合も、読み取り操作は特別な値 (次のような値) を返すことができます。 -1 o null) データをロードしようとするとき バッファ 空の場合はシリーズ。

    一度に XNUMX バイトずつロードします。 読み取り方法

    クラスの主なメソッド Serial シリアルポートによって受信された情報を読み取るために機能するものは、「タイプ」のものです。 read» これらの違いは、主に、受信した情報を配信するデータの種類によって異なります。

    read シリアル ポートで受信したバイトを 0 ~ 255 の値として配信するために使用されます。データ型として byte de 処理 は、128 ~ 127 の範囲ではなく、-0 ~ 255 の範囲を表します。 int によって返される範囲を表すために read。 で読み取ろうとすると read Y·エル バッファ 文字列が空です、値を返します -1

    シリアルポートから文字を読み取ります。 readChar メソッド

    方法 readChar に似ています read ただし、形式で値を返します char の代わりに int。 内部的には、 char en 処理 (中 Java) は XNUMX バイトで保存され、読み取り時に返される値が選択されます。 readChar A バッファ 空のシリーズは 0xFFFF o -1.

    テキスト文字列を読み込みます。 readString メソッドと readStringUntil メソッド。

    方法 readString オブジェクトを返します String で入手可能なすべてのデータから形成されます。 バッファ ご相談時のシリーズです。

    方法 readString シリアルポートで受信したバイトが次の形式であると仮定してテキスト文字列を作成します ASCII したがって、この読み取り方法は他のエンコーディングには使用できません。

    読書に関することであれば、 バッファ とのシリーズ readString 空の場合、戻り値は次のとおりです。 null.

    方法 readStringUntil に追加 readString にロードされた情報を返す機能 バッファ シリーズは、パラメータとして渡される特殊文字 (コード) によって分割されます。 この方法で受信した情報を読み取ることで、受信した情報の解釈に役立つセパレータとターミネータの両方を区別できるようになります。

    方法 readStringUntil 持ち帰る null にいるとき バッファ series は、渡された引数で指定されたコード (XNUMX バイト) を見つけません。

    次のコードでは、 Arduinoの シリアル ポート経由で XNUMX つのメッセージを送信します。 最初の XNUMX つはタブで終わるため、コンソールに表示されます。 処理、一方、XNUMX 番目はシリアル ポート経由で送信されますが、 readStringUntil(9) タブで終わっていないので(コード付き) ASCII 9)。

    シリアル文字列を読み取るまで Serial.readStringUntil を処理しています

    データブロックを読み取ります。 readBytes メソッドと readBytesUntil メソッド。

    上記のメソッドは、特定の形式でデータを読み取る場合、生データのブロックを読み取る場合、またはで提供されていない形式でデータを読み取る場合に使用されます。 処理 メソッドが使用されます readBytes y readBytesUntil

    方法 readBytes で利用可能なデータを読み取ってみます。 バッファ シリーズ。 メソッドにパラメータが渡されない場合 readBytes 利用可能なすべてのデータが読み取られ、ベクトルで返されます (byte[])。 整数がパラメータとして渡された場合、この数値で示される最大バイト数が読み取られ、それらもベクトルとして返されます。

    第三の使い方もある readBytes、より効率的で、引数としてバイトベクトルを受け取ります。 バッファ シリーズ。 このような使い方 readBytes 整数を返します (int) 読み取られたバイト数を表します。

    方法 readBytesUntil は同様の方法で動作しますが、バイトの値を表す最初のパラメータが含まれています。 バッファ, は読み上げの終了を示します。 このメソッドでは、読み取られる最大バイト数を決定するパラメータは意味がありません。その量は特別なコードによって決定されるためです。

    メソッドの動作をテストするには readBytes 次のコードがあるとします。 Arduinoの シリアルポート経由でテキストを送信します。

    次のプログラム例は、 処理 シリアルポートからテキストを 32 バイトブロックで読み取ります (TOTAL_BYTES)。 動作することを確認するために、コンソールに文字として表示し、受信したバイトのタイプを強制的に次のようにします。 char.

    次のスクリーンショットでは、コンソールにどのように表示されるかを確認できます。 処理 (最大) 32 バイトのブロックでロードされたデータ (TOTAL_BYTES) 毎回。 しかし、すでに話題になっている問題があります。 Arduinoの の詩を送ってきました フェデリコ·ガルシア·ロルカ 形式のテキストとしてエンコードされた例 UTF-8、使用されているものではありません 処理 (Java)、 あなたは何を好むか UTF-16 ですので、ランクに該当しない方は、 ASCII printable は正しく解釈されません。

    Serial.readBytes UTF-16 を処理しています

    この問題を解決するには、文字セットをロードすることができます (文字セット) そして新しいオブジェクトを定義します String エンコーディングで強制的に表現する UTF-8 次のコード例に示すように。

    Serial.readBytes UTF-8 を処理しています

    受信した最新のデータを読み取ります。 last メソッドと lastChar メソッド。

    一方、残りの読み取りメソッド (「タイプ」) read») の情報をロードします。 バッファ シリーズを入荷順に並べます(FIFO)、これら XNUMX つの方法では、到達した最後のバイトが バッファ シリーズ。 方法 last 最後のバイトの値を int y lastChar 値を次のように返します char.

    シリアルバッファ管理

    これまでに確認した方法は完全に機能しますが、シリアル ポートへのアクセスを悪用する最良の方法を常に表しているわけではありません。 データをロードするには、定期的にステータスをチェックする必要があります。 バッファ 一連のデータを読み取って、コードの繰り返し部分にあるデータを読み取ります。 一般に、より効率的な方法は、データが利用可能であることがわかっている場合にのみデータを読み取ることです。

    データ受信時にシリアルポートを読み取ります。 シリアルイベント。

    にアクセスするには、 バッファ データを受信したときにシリアル イベントをメソッド定義で管理することで、シリアル イベントを悪用できます。 serialEvent。 このメソッドは、起動するシリアル ポートを引数として使用します。

    シリアルバッファのサイズを設定します。 バッファメソッド。

    有用なデータのブロックを構成するバイト数がわかっている場合は、このデータ読み取りスタイルをさらに最適化できます。 バッファ シリーズを通して serialEvent。 メソッド buffer に保存されるバイト数を設定できます。 バッファ シリアルイベントを開始する前に。 このメソッドはパラメータとしてバイト数を表す整数を期待します。

    値を受信するまでバッファを埋めます。 bufferUntilメソッド。

    メソッド呼び出しを設定する代わりに serialEvent のデータ量に対して、 バッファ、この方法で bufferUntil 特別な値が到着するまでデータを保存し、その後 Serial イベントを発生させるように構成できます。 このメソッドに渡されるパラメータは、 int これは、への呼び出しによって生成された値を表します。 serialEvent.

    バッファに格納されているデータを削除します。 明確な方法。

    メソッドで clear 現在保存されているデータを削除できます。 バッファ。 このメソッドは、たとえば、以前のデータ受信セッションから残っているデータを無視して新しいデータ受信セッションを開始する場合に使用できます。

    シリアルポート経由でデータを読み取るための一般的な処理アプリケーション

    最後に、オブジェクトの操作を要約すると便利です。 Serial de 処理 より一般的に使用されるもので、シリアル ポートを介したデータ受信の典型的な例を経て、グラフを描画します (この場合は積み上げ領域)。

    シリアルライブラリをインポートする

    データ プロトコル (区切り文字) の決定

    Serial クラスのオブジェクトを決定する

    使用するシリアル ポートを設定して Serial クラス オブジェクトをインスタンス化します。

    シリアルポートバッファを設定する

    Serial イベントのハンドラーを実装する

    シリアルバッファの読み取り

    受信したデータを調整する

    シリアル通信を終了する

    以下のコード例は、シリアル ポート経由で受信した値を含む面グラフを生成する機能的な (非常に単純ですが) アプリケーションでこの概要を示しています。次のアニメーションに似たものです。

    シリアルポート経由で受信したデータを使用したグラフィック処理

    プログラムの残りの部分で迷子にならないように、シリアル通信に集中することができます。 処理では、前の操作に対応するコード行が強調表示されます。

    コメントを投稿

    見逃したかもしれません