4
9

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 で micro:bit とシリアル通信する

Posted at

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 を作成してシリアル通信するためのコードを記述します。

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 のシリアルポートを指定します。
baudRate115200 を指定します。

シリアル通信で micro:bit から送信されるデータ毎に JSON パースしてログ出力しています。

実行

以下のコマンドを実行するとシリアル通信の内容がコンソールに出力されます。

node app.js

実行結果:

sample-serial.png

4
9
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
4
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?