Node-RED フローを準備する
[USBゲームパッド]→[PCブラウザ]→ ネットワーク →[Node-RED]
新しいフローを開き、[websocket]と[debug]の2つのノードを配置します。

[websocket]のパラメータ
PCからの通信を待ち受けするURL(APIのパス)を定義します。[追加] → [完了]ボタンを押して設定完了。コードは不要です。http://razpi**.local:8765/gamepad でデータを受信したらデバッグノードに表示します。

フローを反映させるにはデプロイを忘れずに。

PCとラズパイの[websocket]が接続できた場合、Connectedと表示されます。

ゲームパッドのボタンを押すとデバッグ画面に、ゲームパッドの状態が表示されます。

Node-REDでプログラミング
ノードを2個追加する[json][function]
[json]ノードはデフォルト設定のまま、[function]ノードにコードを記述する

[function]ノードのコード。ゲームパッドのaxes配列は
[0: X軸(左スティック)]
[1: Y軸(左スティック)]
[2: X軸(右スティック)]
[3: Y軸(右スティック)]
let x = msg.payload.axes[0];
let y = msg.payload.axes[1];
let direction = "";
if (y < -0.5) direction = "UP";
else if (y > 0.5) direction = "DOWN";
else if (x < -0.5) direction = "LEFT";
else if (x > 0.5) direction = "RIGHT";
else direction = "その他";
msg.payload = direction;
return msg;
成功したら次の改造に進む
functionノードの出力を 4 個にする

let x = msg.payload.axes[0];
let y = msg.payload.axes[1];
let direction = "";
if (y < -0.5) direction = "UP";
else if (y > 0.5) direction = "DOWN";
else if (x < -0.5) direction = "LEFT";
else if (x > 0.5) direction = "RIGHT";
else direction = "その他";
msg.payload = direction;
if (direction=="UP") {
return [
{ payload: 1, topic: "GPIO27" },
{ payload: 1, topic: "GPIO21" },
{ payload: 0, topic: "GPIO17" },
{ payload: 0, topic: "GPIO20" }
];
}
return msg;
結果
ここにモータードライバへの入力を追加していく。たぶん。

続きはまた今度。