13. UART
UARTオブジェクトは、UART通信機能を提供する組み込みオブジェクトです。
Abstracts
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
new UART() | UARTインスタンスを生成します。 | 01.00.00+ |
{UART} Instance
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
.open() | 通信を開始します。 | 01.00.00+ | |
.close() | 通信を終了します。 | 01.00.00+ | |
.send() | データを送信します。 | 01.00.00+ | |
.receive() | データを受信します。 | 01.00.00+ | |
.setRecvEvent() | データ受信コールバック処理を登録します。 | 01.00.00+ | |
.setBufRecvEvent() | バッファリング型データ受信コールバック処理を登録します。 | 01.00.00+ | |
.releaseRecvEvent() | .setRecvEvent()又は.setBufRecvEvent()で登録したデータ受信コールバック処理を解除します。 | 01.00.00+ | |
.checkSendComp() | データの送信完了を確認します。 | 01.00.00+ | |
.waitSendComp() | データの送信が完了するまでウェイト(ブロック)します。 | 01.01.00+ | |
.checkRecvData() | 受信可能なデータが存在しているか確認します。 | 01.00.00+ | |
.checkRecvError() | 受信エラーを確認します。 | 01.01.00+ |
Details
new UART(nodeNo)
UARTインスタンスを生成します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
nodeNo | number | mandatory | 使用するUARTインタフェースのノード番号を指定します。 Pinoutを参照してください。 | |
return | {UART} | - | {UART} : 生成された{UART} |
.open(baudrate,flow,parity[,dataBit[,stopBit]])
通信を開始します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
baudrate | number | mandatory | 通信速度 通信ボーレート[bps]を指定します。 設定値: 2400、4800、9600、19200、38400、57600、115200、230400、460800、921600 | |
flow | boolean | mandatory | ハードウェアフロー true: 有効 false: 無効 | |
parity | number | mandatory | パリティビット 0: 無し 1: 偶数 2: 奇数 | |
dataBit | number | optional | データビット 0: 8ビット 1: 7ビット デフォルト値は0となります。 | Version 01.01.00+ |
stopBit | number | optional | ストップビット 0: 1ビット 1: 2ビット デフォルト値は0となります。 | Version 01.01.00+ |
return | boolean | - | true: 成功 false: 失敗 |
.close()
通信を終了します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | true: 成功 false: 失敗 |
.send(data,block)
データを送信します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
data | ArrayBuffer, string | mandatory | 送信データ ArrayBuffer : ArrayBufferサイズ分、送信されます。 string : 指定された文字列が送信されます。 | 一度に送信可能な最大サイズは512バイトです。 |
block | boolean | mandatory | 送信のブロッキング処理を指定します。 true: ブロッキング有効 false: ブロッキング無効 | 無効が指定された場合、一度の処理で指定された全てのデータが送信されない場合があります。送信されたデータのサイズを確認し、必要であれば続きのデータから再度送信してください。 |
return | number | - | 送信されたデータサイズ | 送信が失敗した場合は-1を返します。 |
.receive(isBin,recvLen)
データを受信します。
ノンブロック処理で実行されますので、受信待ちは行われません。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
isBin | boolean | mandatory | 受信データの形式を指定します。 true: バイナリデータ形式で受信 false: 文字列形式で受信 | |
recvLen | number | optional | 最大受信サイズ[byte]を指定します。 設定範囲: 1~512 デフォルト値は512バイトです。 | |
return | ArrayBuffer, string | - | 受信データ 戻り値の型はisBinで決定されます。 trueを指定した場合はArrayBuffer型、falseを指定した場合は、string型となります。 | データ長はrecvLenで指定したサイズ以下となります。 受信データがない場合はサイズが0となります。 |
.setRecvEvent(callback,isBin,recvLen)
データ受信コールバック処理を登録します。
データを受信した際にコールバック処理を実行します。
受信データがない場合、コールバックは発生しません。
尚、データ受信コールバック処理の中で、コールバック処理を再登録することはできません。
.setBufRecvEvent()と同時使用はできませんが、排他的であれば使用可能です。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
callback(data) | function | mandatory | データ受信時にコールバック処理を実行します。 data : {ArrayBuffer|string} 受信データ 引数の型はisBinで決定されます。 trueを指定した場合はArrayBuffer型、falseを指定した場合は、string型となります。 | データ長はrecvLenで指定したサイズ以下となります。 |
isBin | boolean | mandatory | 受信データの形式を指定します。 true: バイナリデータ形式で受信 false: 文字列形式で受信 | |
recvLen | number | optional | 最大受信サイズ[byte]を指定します。 設定範囲: 1~512 デフォルト値は512バイトです。 | |
return | boolean | - | true: 成功 false: 失敗 |
.setBufRecvEvent(callback,buff)
バッファリング型データ受信コールバック処理を登録します。
受信データが指定されたバッファサイズ分、蓄積した時にコールバック処理を実行します。
コールバック後、データ受信コールバック処理は解除されます。継続してデータ受信待ちを行う場合は、コールバック処理を登録し直してください。
尚、データ受信コールバック処理の中で、コールバック処理を再登録することはできません。
受信データは指定されたバッファに直接書き込まれます。効率的ですが、書き込みと読み出しが競合することになりますので、受信データ長が固定的かつ受信タイミングが保証されている同期式制御である場合に活用できます。
.setRecvEvent()と同時使用はできませんが、排他的であれば使用可能です。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
callback(dataLen) | function | mandatory | 受信データが指定されたバッファサイズ分、蓄積した時にコールバック処理を実行します。 dataLen : {number} 受信データ長 | dataLenは必ず指定されたバッファサイズとなります。 |
buff | ArrayBuffer | mandatory | 受信データを書き込むためのバッファを指定します。 | 受信データは指定されたバッファに直接書き込まれます。 |
return | boolean | - | true: 成功 false: 失敗 |
.releaseRecvEvent()
.setRecvEvent()又は.setBufRecvEvent()で登録したデータ受信コールバック処理を解除します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | true: 成功 false: 失敗 |
.checkSendComp()
データの送信完了を確認します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | 送信状態 true: 送信完了 false: 送信中 | UART送信バッファが空かつハードウェアが送信完了状態となった場合、送信完了と判断します。 Version 01.00.00の場合: number型が返却されます。 1: 送信完了 / 0: 送信中 UART送信バッファが空の場合、送信完了と判断します。 |
.waitSendComp()
データの送信が完了するまでウェイト(ブロック)します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - | UART送信バッファが空かつハードウェアが送信完了状態となった場合、送信完了と判断します。 |
.checkRecvData()
受信可能なデータが存在しているか確認します。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | boolean | - | true: 受信データあり false: 受信データなし |
.checkRecvError()
受信エラーを確認します。
エラー要因はビットフラグで表されます。
受信エラーを検出した時点で対象のビットフラグが1となります。
尚、本メソッドコール後、全てのビットフラグが一度0クリアされます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | number | - | エラー要因 bit 0: パリティエラー bit 1: フレーミングエラー bit 2: ノイズ検出フラグ bit 3: オーバーランエラー | 受信エラーが発生していない場合は 常に0となります。 |
オブジェクトの使用例
Sample 1
文字列データを送受信するサンプルです。
.setRecvEvent()メソッドを使用して、受信データを表示します。
var NODE_NO = 1;
var BAUDRATE = 115200;
var uart = new UART(NODE_NO);
uart.open(BAUDRATE, false, 0);
uart.setRecvEvent(function(data) {
print('recv: ' + data);
}, false, 128);
while(1) {
uart.send('Hello World!\r\n', true);
setTimeout(1000).wait();
}
uart.releaseRecvEvent();
uart.close();
Sample 2
バイナリデータを送受信するサンプルです。
.setRecvEvent()メソッドを使用して、受信データを表示します。
var NODE_NO = 1;
var BAUDRATE = 115200;
var uart = new UART(NODE_NO);
uart.open(BAUDRATE, false, 0);
var sendCnt = 0;
var sendBuff = new ArrayBuffer(1);
var sendArr = new Uint8Array(sendBuff);
uart.setRecvEvent(function(buff) {
var arr = new Uint8Array(buff);
var dump = '';
for(var i=0; i<arr.length; i++) {
dump += ('00' + arr[i].toString(16).toUpperCase()).substr(-2) + ' ';
}
print('recv(' + arr.length + '): ' + dump);
}, true, 128);
while(1) {
sendArr[0] = sendCnt;
uart.send(sendBuff, true);
setTimeout(1000).wait();
sendCnt++;
sendCnt &= 255;
}
uart.releaseRecvEvent();
uart.close();
Sample 3
データを送受信するサンプルです。
.setBufRecvEvent()メソッドを使用して、受信バッファへのデータ受信が完了するまで待ちます。
var NODE_NO = 1;
var BAUDRATE = 115200;
var uart = new UART(NODE_NO);
uart.open(BAUDRATE, false, 0);
var received = false;
var recvBuff = new ArrayBuffer(8);
uart.setBufRecvEvent(function(dataLen) { //one-shot
var arr = new Uint8Array(recvBuff);
var dump = '';
for(var i=0; i<arr.length; i++) {
dump += ('00' + arr[i].toString(16).toUpperCase()).substr(-2) + ' ';
}
print('recv(' + dataLen + '): ' + dump);
received = true
}, recvBuff);
while(!received) {
uart.send('Waiting for ' + recvBuff.byteLength + ' bytes of data to be received.\r\n', true);
setTimeout(1000).wait();
}
print('finished');
uart.close();