ArduinoのSerial Monitorを使っても良いのですが、個人的にはさささっとNode.jsを書いて、ターミナル上で確認することが多いです。
受信
ソースコード
package.json
{ "name": "serial-develop", "version": "1.0.0", "main": "index.mjs", "dependencies": { "serialport": "^12.0.0" } }
index.mjs
import { SerialPort, ReadlineParser } from 'serialport'; (async () => { let path = ''; const baudRate = 9600; // Arduino側のbaudRateに合わせる const manufacturer = 'Arduino'; await SerialPort.list().then((list) => { list.forEach((item) => { if ( item.manufacturer && (new RegExp(manufacturer)).test(item.manufacturer) ) { path = item.path; } }); }); if (path) { const port = new SerialPort({ path, baudRate }); const parser = new ReadlineParser(); parser.on('data', (data) => { console.log(data); // 受信した文字列を表示 }); port.pipe(parser); } })();
実行
node index.mjs
これで、シリアル通信をターミナル上で確認できます。
送信
ソースコード
※ package.jsonは受信と同じです
index.mjs
import { SerialPort, ReadlineParser } from 'serialport'; (async () => { let path = ''; const baudRate = 9600; // Arduino側のbaudRateに合わせる const manufacturer = 'Arduino'; await SerialPort.list().then((list) => { list.forEach((item) => { if ( item.manufacturer && (new RegExp(manufacturer)).test(item.manufacturer) ) { path = item.path; } }); }); if (path) { const port = new SerialPort({ path, baudRate }); port.on('open', () => { port.write(`${ process.argv[2] }\n`, (err) => { if (err) { console.error(err); } }); }); } })();
実行
実行
node index.mjs Ya-Ha-!
これで、Arduinoに Ya-Ha-!\n という文字列を送信できます。
送受信
まとめると、下記のコードで送信と受信が確認できます!
import { SerialPort, ReadlineParser } from 'serialport'; (async () => { let path = ''; const baudRate = 9600; // Arduino側のbaudRateに合わせる const manufacturer = 'Arduino'; await SerialPort.list().then((list) => { list.forEach((item) => { if ( item.manufacturer && (new RegExp(manufacturer)).test(item.manufacturer) ) { path = item.path; } }); }); if (path) { const port = new SerialPort({ path, baudRate }); parser.on('data', (data) => { console.log(data); // 受信した文字列を表示 }); port.pipe(parser); port.on('open', () => { port.write(`${ process.argv[2] }\n`, (err) => { if (err) { console.error(err); } }); }); } })();