#概要
node.jsである機材にシリアル通信を送る。
ただし、制御文字を使用して一定の信号位置を開始位置として送り、一定の信号位置を終了位置としてバイトデータを機材に送る。
制御文字はディスプレイには表示されない。
#用語の意味
STX
start text
ETX
end text
RS-232C
シリアル通信の規格
他の規格としてRS-422A・RS-485がある。
RS-232Cは一般に普及した規格でパソコンに標準に搭載されているとのこと。
RS-232Cとは? | 福福電子工房Webサイト
シリアル通信
データを1ビットずつ連続的に送受信する通信方式
#全コード
下記に意味を記載
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を使用する。
パッケージの読み込みとインスタンス化
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
技術レポート「シリアル通信とは?」
#データを送信する
// 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ではないと文字がない。
#まとめ
数字だけ送るなら上記で大丈夫だと思います。
文字を送るなら文字列をバイトに変換して送った方がいい。
(UTF8で色々やろうと思うと大変そうな気がする)
node.jsでSTXとETXを送る記事がなかったと思うので、誰かの参考になれば幸いです。
また、間違えてる箇所がありましたらコメントください。