WebSocketサーバ リファレンス

1. 起動方法

rbbitコマンドで WebSocketサーバの機能を起動します。

起動時のコマンド書式は下記のとおりです。
rbbit [-r] [-s ws_port] [-h] [-v] MB_PORT

引数

MB_PORT micro:bitが接続されているシリアルポート(デバイス)
   引数 MB_PORTの指定が省略された場合、
   環境変数「MB_PORT」の設定値が代わりに参照されます。

オプション

-r micro:bitをリセット
-s ws_port ポート番号を指定して WebSocketサーバを起動
   -sオプションが指定されない場合、
   デフォルトとして「50215」番のポートが使用されます。
-h ヘルプを表示
-v バージョンを表示

起動例

rbbitコマンドは簡易対話モードと WebSocketサーバ機能との兼用になっており、
簡易対話モードと WebSocketサーバ機能の両方がつねに同時に起動します。

rbbit                       環境変数「MB_PORT」の設定値が micro:bitの接続先ポート(デバイス)とみなして
                            簡易対話モードと WebSocketサーバを起動
rbbit COM5                  COM5として接続された micro:bitに対して
                            簡易対話モードと WebSocketサーバを起動
rbbit -r COM5               COM5として接続された micro:bitをリセット
                            (簡易対話モードも WebSocketサーバは起動しない)
rbbit -s 50222 COM5         COM5として接続された micro:bitに対して
                            簡易対話モードと WebSocketサーバ(ポート番号 50222を使用)を起動

2. 送信データのフォーマット

micro:bitから取得したセンサー値やボタン押下状態などのデータを
JSON形式で WebSocketクライアントに送信します。
(平均的に 20回/秒ほどの送信頻度になります)

送信データに含まれる値は下記のとおりです。
キー データ型
1 x 加速度 x 数値
2 y 加速度 y 数値
3 z 加速度 z 数値
4 p 傾き(前後) 数値
5 r 傾き(左右) 数値
6 l 明るさ 数値
7 t 温度 数値
8 a_down [A]ボタンが押されている true / false
9 a_press [A]ボタンが押された true / false
10 a_release [A]ボタンが離された true / false
11 b_down [B]ボタンが押されている true / false
12 b_press [B]ボタンが押された true / false
13 b_release [B]ボタンが離された true / false

送信データ例
{
  "x":64,
  "y":-32,
  "z":-1008,
  "p":-1,
  "r":3,
  "l":40,
  "t":29,
  "a_down":true,
  "a_press":false,
  "a_release":false,
  "b_down":false,
  "b_press":false,
  "b_release":false
}

3. 受信データのフォーマット

WebSocketクライアントからのコマンドを JSON形式で受信し、
micro:bitの制御をおこないます。

すべてのコマンドは下記の形式に基づいていますが、
コマンド識別子ごとに引数の定義などが異なりますので
詳細は各コマンド識別子の記載を参照してください。
キー データ型
1 command コマンド識別子
   "on"
   "off"
   "turn"
   "puts"
   "show"
   "play"
   "rest"
   "volume"
   "tempo"
文字列
2 arg1 引数1 コマンド識別子に依存
3 arg2 引数2 コマンド識別子に依存

(1)コマンド識別子一覧

項番 分類 コマンド識別子 概要
1 LED on LEDの点灯
2 LED off LEDの消灯
3 LED turn LEDの点灯状態反転
4 LED puts 文字列の表示
5 LED show パターンの表示
6 サウンド play 音の出力
7 サウンド rest 休符
8 サウンド volume 音量の設定
9 サウンド tempo 音の長さの設定

(2)コマンド識別子ごと詳細仕様

on

概要
micro:bitの LEDを点灯させます。
引数
名前 内容 備考
arg1 LEDの x位置("0"~"4")
arg1, arg2を省略した場合は
すべての LEDを点灯させます。
arg2 LEDの y位置("0"~"4")
arg1, arg2を省略した場合は
すべての LEDを点灯させます。
データ例
いちばん右下にある LEDを点灯させます
{
  "command": "on",
  "arg1": "0",
  "arg2": "0"
}
すべての LEDを点灯させます
{
  "command": "on"
}

off

概要
micro:bitの LEDを消灯させます。
引数
名前 内容 備考
arg1 LEDの x位置("0"~"4")
arg1, arg2を省略した場合は
すべての LEDを消灯させます。
arg2 LEDの y位置("0"~"4")
arg1, arg2を省略した場合は
すべての LEDを消灯させます。
データ例
いちばん右下にある LEDを消灯させます
{
  "command": "off",
  "arg1": "0",
  "arg2": "0"
}
すべての LEDを消灯させます
{
  "command": "off"
}

turn

概要
micro:bitの LEDを点灯状態を反転させます。(点灯→消灯 / 消灯→点灯)
引数
名前 内容 備考
arg1 LEDの x位置("0"~"4")
arg2 LEDの y位置("0"~"4")
データ例
中心にある LEDを点灯または消灯させます
{
  "command": "turn",
  "arg1": "2",
  "arg2": "2"
}

puts

概要
micro:bitの LEDに文字列を表示させます。
引数
名前 内容 備考
arg1 表示させる文字列 半角英数記号のみ指定可能です。
データ例
"Hello"という文字列を表示させます
{
  "command": "puts",
  "arg1": "Hello"
}
"123@"という文字列を表示させます
{
  "command": "puts",
  "arg1": "123@"
}

show

概要
micro:bitの LEDを指定したパターンで点灯させます。
引数
名前 内容 備考
arg1 点灯させるパターン 5×5の二元配列に
1(点灯) / 0(消灯)をセットして指定します。
データ例
"□"のようなパターンで LEDを点灯させます
{
  "command": "show",
   "arg1": [
             [1, 1, 1, 1, 1],
             [1, 0, 0, 0, 1],
             [1, 0, 0, 0, 1],
             [1, 0, 0, 0, 1],
             [1, 1, 1, 1, 1]
           ]
}

play

概要
指定した周波数の音を指定した長さで鳴らします。(要スピーカー装着)
引数
名前 内容 備考
arg1 周波数を表す文字列 指定できる文字列の一覧

"C3" ... 低い「ド」
"Cs3" ... 低い「ド#」
"D3" ... 低い「レ」
"Ds3" ... 低い「レ#」
"E3" ... 低い「ミ」
"F3" ... 低い「ファ」
"Fs3" ... 低い「ファ#」
"G3" ... 低い「ソ」
"Gs3" ... 低い「ソ#」
"A3" ... 低い「ラ」
"As3" ... 低い「ラ#」
"B3" ... 低い「シ」

"C4" ...「ド」
"Cs4" ...「ド#」
"D4" ...「レ」
"Ds4" ...「レ#」
"E4" ...「ミ」
"F4" ...「ファ」
"Fs4" ...「ファ#」
"G4" ...「ソ」
"Gs4" ...「ソ#」
"A4" ...「ラ」
"As4" ...「ラ#」
"B4" ...「シ」

"C5" ... 高い「ド」
"Cs5" ... 高い「ド#」
"D5" ... 高い「レ」
"Ds5" ... 高い「レ#」
"E5" ... 高い「ミ」
"F5" ... 高い「ファ」
"Fs5" ... 高い「ファ#」
"G5" ... 高い「ソ」
"Gs5" ... 高い「ソ#」
"A5" ... 高い「ラ」
"As5" ... 高い「ラ#」
"B5" ... 高い「シ」
"C6" ... さらに高い「ド」
arg2 音の長さ
"4.0" ... 4拍分の長さ
"2.0" ... 2拍分の長さ
"1.0" ... 1拍分の長さ
"0.5" ... 1/2拍分の長さ
"0.25" ... 1/4拍分の長さ
"0.125" ... 1/8拍分の長さ
上記未満 ... 1/16拍分の長さ

記載されている値以外を指定した場合は、
時間の短い方の区分として扱われます。

なお、1拍分の長さは
「tempo」コマンド識別子で指定することができます。
データ例
「ド」の音を1拍分鳴らします
{
  "command": "play",
  "arg1": "C4",
  "arg2": "1.0"
}
「ラ」の音を1/2拍分鳴らします
{
  "command": "play",
  "arg1": "A4",
  "arg2": "0.5"
}

rest

概要
指定した長さの休符を入れます。
引数
名前 内容 備考
arg1 音の長さ
"4.0" ... 4拍分の長さ
"2.0" ... 2拍分の長さ
"1.0" ... 1拍分の長さ
"0.5" ... 1/2拍分の長さ
"0.25" ... 1/4拍分の長さ
"0.125" ... 1/8拍分の長さ
上記未満 ... 1/16拍分の長さ

記載されている値以外を指定した場合は、
時間の短い方の区分として扱われます。

なお、1拍分の長さは
「tempo」コマンド識別子で指定することができます。
データ例
1拍分の休符を入れます
{
  "command": "rest",
  "arg1": "1.0",
}
1/2拍分の休符を入れます
{
  "command": "rest",
  "arg1": "0.5",
}

volume

概要
音量を設定します。
引数
名前 内容 備考
argv 音量("0"~"255")
データ例
音量を 64に設定します
{
  "command": "volume",
  "arg1": "64"
}
音量を 255に設定します
{
  "command": "volume",
  "arg1": "255"
}

tempo

概要
1拍分の音の長さを設定します。
引数
名前 内容 備考
arg1 1泊分の音の長さ("4"~"400") 「1分間に何回拍子を打つか」という値のため
値が大きいほど1拍分の音の長さは短くなります。
データ例
1拍分の音の長さを 60に設定します(1分間に 60回の拍子を打つテンポ)
{
  "command": "tempo",
  "arg1": "60"
}
1拍分の音の長さを 200に設定します(1分間に 200回の拍子を打つテンポ)
{
  "command": "tempo",
  "arg1": "200"
}

Link to GitHub