PlayStationコントローラ「DUALSHOCK2」をWindowsパソコンに接続して、node.jsを用いて、PlayStationコントローラ「DUALSHOCK2」(「Hid入力データダンプソフト」で使用)で入力したデータをobniz Board 1Yに表示します。

obniz Board 1Y

obniz Board 1YはESP32をメインプロセッサとし、obniz Cloudによりプログラムの書き換えやデバイスの管理ができます。

  • 12個あるIOは、プログラムを用いてインタフェース機能(I2C,PWM等)が設定でき、モーターやセンサーを直に接続できます。
  • JavaScript/Node.jsでプログラミングができます。
  • USB Cケーブルで電源を取り、Arduino IDEによる単独での開発はできない。

ライブラリのインストール

ゲームパッドを制御するライブラリを次のコマンドでインストールします。詳細については「carldanley/node-gamepad」を参照してください。

npm install node-gamepad

obnizを次のコマンドでインストールします。詳細については「Node.jsで動かすには」を参照してください。

npm install obniz 

Hidデータ表示アプリの作成

Hidデータ表示アプリ「gamepad」は次のように作成します。アプリの開発はVisual Studio codeを使用しました。

  • 2行目でPlayStationコントローラ「DUALSHOCK2」の入力定義を呼び出します。
  • 3行目と4行目でPlayStationコントローラ「DUALSHOCK2」のベンダーIDとプロダクトIDを設定します。
  • Buttonsは12-66行目に示すイベントにより受け取り、Joysticksは67-76行目に示すイベントにより受け取ります。
  • 6行目でインストールしたobniz.jsを取り込み、9行目でobniz Board 1Yに接続します。
  • 13行目でobniz Board 1Yの液晶画面をクリアし、14行目でボタン名称を書き込みます。

gamepad

var GamePad = require('node-gamepad');
var controller = new GamePad('ps3/dualshock3', {
    vendorID: 0x054C,
    productID: 0x0268
});
var Obniz = require("obniz");

var obniz = new Obniz("1234-5678");

controller.connect();

controller.on('L1:press', function () {
    obniz.display.clear();
    obniz.display.print("L1");
    console.log('L1');
});
controller.on('L2:press', function () {
    obniz.display.clear();
    obniz.display.print("L2");
    console.log('L2');
});
controller.on('R2:press', function () {
    obniz.display.clear();
    obniz.display.print("R2");
    console.log('R2');
});
controller.on('R1:press', function () {
    obniz.display.clear();
    obniz.display.print("R1");
    console.log('R1');
});
controller.on('triangle:press', function () {
    obniz.display.clear();
    obniz.display.print("triangle");
    console.log('triangle');
});
controller.on('square:press', function () {
    obniz.display.clear();
    obniz.display.print("square");
    console.log('square');
});
controller.on('circle:press', function () {
    obniz.display.clear();
    obniz.display.print("circle");
    console.log('circle');
});
controller.on('cross:press', function () {
    obniz.display.clear();
    obniz.display.print("cross");
    console.log('cross');
});
controller.on('select:press', function () {
    obniz.display.clear();
    obniz.display.print("select");
    console.log('select');
});
controller.on('analog:press', function () {
    obniz.display.clear();
    obniz.display.print("analog");
    console.log('analog');
});
controller.on('start:press', function () {
    obniz.display.clear();
    obniz.display.print("start");
    console.log('start');
});
controller.on('left:move', function (stick) {
    obniz.display.clear();
    obniz.display.print("left\n" + stick.x + " " + stick.y);
    console.log('left', stick);
});
controller.on('right:move', function (stick) {
    obniz.display.clear();
    obniz.display.print("right\n" + stick.x + " " + stick.y);
    console.log('right', stick);
});
obniz.onconnect = async function () {

}

json形式で定義されたPlayStationコントローラ「DUALSHOCK2」の入力定義を次に示します。

  • Joysticksは4-23行目で定義し、Buttonsは25-81行目で定義します。

ps3/dualshock3

{
    "vendorID": 1356,
    "productID": 616,
    "joysticks": [
        {
            "name": "left",
            "x": {
                "pin": 6
            },
            "y": {
                "pin": 7
            }
        },
        {
            "name": "right",
            "x": {
                "pin": 8
            },
            "y": {
                "pin": 9
            }
        }
    ],

    "buttons": [
        {
            "name": "L1",
            "pin": 2,
            "value": 16
        },
        {
            "name": "L2",
            "pin": 2,
            "value": 64
        },
        {
            "name": "R2",
            "pin": 2,
            "value": 128
        },
        {
            "name": "R1",
            "pin": 2,
            "value": 32
        },
        {
            "name": "triangle",
            "pin": 2,
            "value": 1
        },
        {
            "name": "square",
            "pin": 2,
            "value": 8
        },
        {
            "name": "circle",
            "pin": 2,
            "value": 2
        },
        {
            "name": "cross",
            "pin": 2,
            "value": 4
        },
        {
            "name": "select",
            "pin": 3,
            "value": 1
        },
        {
            "name": "analog",
            "pin": 3,
            "value": 16
        },
        {
            "name": "start",
            "pin": 3,
            "value": 2
        }
    ],
    "status": [
        {
            "name": "charging",
            "pin": 29,
            "states": [
                {
                    "value": 0,
                    "state": "charging"
                },
                {
                    "value": 2,
                    "state": "charging"
                },
                {
                    "value": 3,
                    "state": "not charging"
                }
            ]
        },
        {
            "name": "battery",
            "pin": 30,
            "states": [
                {
                    "value": 238,
                    "state": "Charging"
                },
                {
                    "value": 0,
                    "state": "No charge"
                },
                {
                    "value": 1,
                    "state": "20%"
                },
                {
                    "value": 2,
                    "state": "40%"
                },
                {
                    "value": 3,
                    "state": "60%"
                },
                {
                    "value": 4,
                    "state": "80%"
                },
                {
                    "value": 5,
                    "state": "100%"
                }
            ]
        },
        {
            "name": "connection",
            "pin": 31,
            "states": [
                {
                    "value": 18,
                    "state": "usb"
                },
                {
                    "value": 22,
                    "state": "bluetooth"
                },
                {
                    "value": 20,
                    "state": "rumbling"
                }
            ]
        }
    ]
}

Hidデータ表示アプリの実行

Hidデータ表示アプリ「gamepad」を実行すると、PlayStationコントローラ「DUALSHOCK2」の対応するボタン名称が、Visual Studio codeの実行画面に次のように表示されます。

PlayStationコントローラ「DUALSHOCK2」の対応するボタン名称が、obniz Board 1Yの液晶画面に次のように表示されます。

PlayStationコントローラ「DUALSHOCK2」の定義したボタン名称を次に示します。