Node-REDのノードを開発してみる その4(dualshock4ノード)

はじめに

 今回はNode-REDと、PS4のコントローラであるDUALSHOCK 4で通信できる、dualshock4ノードを開発してみました。

 2年ほど前からESP32とDUALSHOCK 4で通信して、ロボットを操作していました。Node-REDとも通信できるようにすると、さらにできることが増えるのではないかと思っています。

▼今回開発したノードは、Node-REDのフローライブラリに公開しています。

https://flows.nodered.org/node/@background404/node-red-contrib-python-dualshock4

▼以前の記事はこちら

ESP32を使って、PS4コントローラとBluetooth接続する

はじめに  今回はESP32を使って、PS4のコントローラとのBluetooth接続をしました。ロボコンで使っているところを見たことがあります。最近はSwitchのコントローラで操作…

Node-RED MCU用のノードを作成してみる その3(Serialノード)

はじめに  今回はNode-RED MCU用のSerialノードを作成してみました。デバッガツールとは元々シリアル通信を行っているのですが、他のポートでのシリアル通信を行うことが…

実装の方針

 以前の記事にて、Pythonのpygameを利用してDUALSHOCK 4と通信していました。今回もpygameを利用します。

▼PythonによるDUALSHOCK 4との通信については、以下の記事をご覧ください。

PythonでDUALSHOCK 4と通信する(Node-RED)

はじめに  今回はPythonでPS4のコントローラであるDUALSHOCK 4と通信してみました。  私が開発したpython-venvノードを利用すると、Node-REDでPythonのコードを実行でき…

 python-venvノードと同様に、ノードのインストール時にPythonの仮想環境を作成します。このときに、pygameもpipでインストールします。

▼python-venvノードについては、開発の変遷とともにノードの仕組みをQiitaに書きました。

https://qiita.com/background/items/d2e05e8d85427761a609

 venvノードを利用して通信していたときは、各入力のプロパティ毎に値を引き出していました。

▼ノードが大量に必要です。

 必要なノードを減らすために、コントローラの入力ごとに出力が分かれるようにします。どのピンがどの入力に対応しているのか分かりやすいように、マウスをホバーすると出力ピンの説明が表示されるラベルも使用します。

▼例えばexecノードでは、stdoutやstderrと表示されます。

 実際に実装していると、必要な入力だけ出力ピンとして出せるようにしたかったのですが、ラベルは動的に割り当てられないようでした。

▼ノードの開発に関するページでは、ラベルが動的に生成されないという記述がありました。

https://nodered.jp/docs/creating-nodes/appearance

 複数の出力ピンを持ったノードと、出力が一つだけのノードに分けて実装することにしました。

ノードを開発する

 ChatGPTに相談しながら開発していたのですが、Node-REDのノードの開発についてはあまり詳しくないような雰囲気があります。情報が少ないのでしょうね。

▼以下のノードの開発に関するドキュメントを参照して開発しています。

https://nodered.jp/docs/creating-nodes

▼コードはGitHubのリポジトリをご覧ください。

https://github.com/404background/node-red-contrib-python-dualshock4

 出力が一つだけのノードを開発しました。

▼以下のように使えます。

▼受信したデータを見ると、コントローラの入力ごとにプロパティが分かれています。

▼例えばL3とR3だけ選んだ状態だと、その値だけ出力されます。

 出力ピンごとに入力が分かれているノードも開発しました。

▼以下のようにダッシュボード関連のノードを直接接続できます。

▼マウスをホバーさせると、ボタンの名前が表示されます。

▼こちらは取得周期だけ設定できます。

動作を確認してみる

 実際にダッシュボード画面を見ながら動作を確認してみました。

▼反応も速そうでいい感じです。

▼通信できました。

最後に

 DUALSHOCK 4と通信できるノードが意外と無かったのですが、python-venvノードでの経験を活かして開発することができました。

 作っている途中に気づいたのですが、Node.jsでもDUALSHOCK 4と通信できるようです。こちらだとPythonの手順を省いて使えそうですね。

▼npmでdualshockと調べたら、パッケージがありました。

https://www.npmjs.com/package/dualshock-controller

▼Node-REDのfunctionノードで通信するフローのサンプルもありました。これも試してみたいところです。

https://flows.nodered.org/flow/8d8e3e3e20bf2e70dee0bcf1b2a2b31a

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です