Node.js で シリアル通信をするライブラリ serialport を利用して micro:bit とシリアル通信をします。
開発環境
macOS High Sierra 10.13.3
Node.js v9.8.0
serialport 6.1.1
注意点
serialport のドキュメントによると Node.js v9.x 系はサポート対象外とのことです。ビルド自体は提供しているとのことなので今回は v9.8.0 のまま進めてますが環境によっては問題が起こる可能性があります。
micro:bit
https://makecode.microbit.org にアクセスして以下のコードを入力します。
micro:bit の傾き情報をJSON形式の文字列としてシリアル通信で出力するだけの内容です。
let pitch = 0
let roll = 0
basic.forever(() => {
pitch = input.rotation(Rotation.Pitch)
roll = input.rotation(Rotation.Roll)
serial.writeLine(`{"pitch":${pitch},"roll":${roll}}`)
})
入力後、ダウンロードボタンを押し、ダウンロードされた hexファイルを Finder から micro:bit にドラッグ&ドロップしてインストールします。
シリアルポートの確認
USB接続した micro:bit のシリアルポートを確認するためにターミナルを起動して以下のコマンドを入力します。
ls /dev/cu.*
実行すると以下のような内容が出力されます。(usbmodem以下の数値は環境によって変わります。)
/dev/cu.Bluetooth-Incoming-Port /dev/cu.usbmodem1442
ターミナルで実行
試しにMacのターミナルから実行する場合は以下のコマンドを入力します。
screen /dev/cu.usbmodem1442 115200
シリアル通信を終了する場合はターミナル上で Ctrl+A
を入力し、次に K
を入力します。
入力後に表示される質問 Really kill this window [y/n]
に y
と答えるとシリアル通信が終了します。
Node.js
プロジェクトの作成
ターミナルからプロジェクトを作成したいディレクトリを作成します。
本記事では sample-serial-app
としてますが好きなものに変更してください。
ディレクトリを作成したら移動しておきます。
mkdir sample-serial-app
cd sample-serial-app
続いてnpm の初期化をして、 必要なライブラリをインストールします。
npm init
npm i serialport -s
app.js の作成
次に app.js を作成してシリアル通信するためのコードを記述します。
const SerialPort = require('serialport');
const Readline = SerialPort.parsers.Readline;
const portName = '/dev/cu.usbmodem1442';
const port = new SerialPort(portName, { baudRate: 115200 })
.pipe(new Readline())
.on('data', data => {
try {
let jsonData = JSON.parse(data);
console.log(`ピッチ:${jsonData.pitch},ロール:${jsonData.roll}`);
} catch (error) {
// 開始時などデータが受信できないことがある
return;
}
});
protName
に先ほど調べた micro:bit のシリアルポートを指定します。
baudRate
は 115200
を指定します。
シリアル通信で micro:bit から送信されるデータ毎に JSON パースしてログ出力しています。
実行
以下のコマンドを実行するとシリアル通信の内容がコンソールに出力されます。
node app.js
実行結果: