6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

node.jsのシリアル通信で制御文字(STX,ETX)を送信する

Last updated at Posted at 2018-08-08

#概要
node.jsである機材にシリアル通信を送る。
ただし、制御文字を使用して一定の信号位置を開始位置として送り、一定の信号位置を終了位置としてバイトデータを機材に送る。
制御文字はディスプレイには表示されない。

#用語の意味
STX
start text

ETX
end text

RS-232C
シリアル通信の規格
他の規格としてRS-422A・RS-485がある。
RS-232Cは一般に普及した規格でパソコンに標準に搭載されているとのこと。
RS-232Cとは? | 福福電子工房Webサイト

シリアル通信
データを1ビットずつ連続的に送受信する通信方式

#全コード
下記に意味を記載

send-serialport.js
const SerialPort = require('serialport');

const port = new SerialPort('/dev/tty.usbmodem14621', {
  baudRate: 9600,
  dataBits: 8,
  parity: 'none',
  stopBits: 1
});

// 2バイト(0と1を送る)
let inByte = [0x30, 0x31];

// 4バイト(合計,STXとETXを追加して送る)
let bufferArray = [0x02, ...inByte, 0x03];
let sendBuff = Buffer.from(bufferArray, 'ascii');
// console.log(Buffer.from(bufferArray, 'ascii').toString());
// 01
// console.log(Buffer.from(bufferArray, 'ascii').length);
// 4

// シリアル送信
port.write(sendBuff);

#node.jsでシリアル通信を使用
まずはnpmから必要なパッケージをインストールする。
今回はserialportを使用する。

パッケージの読み込みとインスタンス化

send-serialport.js
const SerialPort = require('serialport');

const port = new SerialPort('/dev/tty.usbmodem14621', {
  baudRate: 9600,
  dataBits: 8,
  parity: 'none',
  stopBits: 1
});

各オプション
baudRate(バーレート) -> 1秒に送るbps(bit Per Second)、bps/s
dataBits -> データの長さ(今回は8ビット)
parity -> データの誤りの検出に使用、EVEN(偶数)、ODD(奇数)、NONE(無し)
バイト中(ビット)の1の数を偶数または奇数に揃えてデータの誤りを判別する(通常のビットにパリティビットが追加される)
stopBits -> ストップビットに何ビット使用するか(1, 1.5, 2の設定がある)
ビットを送る前と送り終わった後にビットを送っている。ただしスタートビットは1で固定であるため、オプションに設定項目はない。

以下、参考記事
シリアル通信の基礎知識 | コンテック - Contec
技術レポート「シリアル通信とは?」

#データを送信する

send-serial.js
// 2バイト(0と1を送る)
let inByte = [0x30, 0x31];

// 4バイト(合計,STXとETXを追加して送る)
let bufferArray = [0x02, ...inByte, 0x03];
let sendBuff = Buffer.from(bufferArray, 'ascii');
// console.log(Buffer.from(bufferArray, 'ascii').toString());
// 01
// console.log(Buffer.from(bufferArray, 'ascii').length);
// 4

// シリアル送信
port.write(sendBuff);

今回はASCIIコードでSTX + 01 + ETXを4バイトで送信。
node.jsのBuffer.fromはデフォルトでutf8なのでasciiの引数を設定。
0と1だけを送るのでasciiに指定しました。文字を送る時はutf8ではないと文字がない。

以下、コード表
ASCIIコード表
UTF8コード表

#まとめ
数字だけ送るなら上記で大丈夫だと思います。
文字を送るなら文字列をバイトに変換して送った方がいい。
(UTF8で色々やろうと思うと大変そうな気がする)

node.jsでSTXとETXを送る記事がなかったと思うので、誰かの参考になれば幸いです。
また、間違えてる箇所がありましたらコメントください。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?