Arduino用のジョイスティックのブレークアウト基板とか、ジョイスティックシールドもいいけど、今回はハードオフで見つけたジャンクのWiiヌンチャクを使ってみた。
ヌンチャクはWiiリモコンの拡張コントローラなんだけど、Wiiリモコンとの通信はI2Cを使っているっぽい。電源電圧も3.3VらしいのでESP32と直結できそう。
ESP32のADCはちょっと使いにくそうだったので(直線性が悪いとか)、I2Cのようにデジタルで入力できるのはありがたい。それにGPIOを2本しか消費しないし。
とりあえずハードオフで200円で売られていたヌンチャクを購入してみた。スティックが少しべとついてる。
ジョイスティックがベタベタしているのはパーツクリーナーとかで拭いた後にシリコンスプレーを塗ってゴシゴシすると結構サラサラできれいになったりする。
そういえばヌンチャク、コピー品があるっぽいので注意かもしれない。見分けられそうなポイントはネジと端子のロゴかも。純正はネジがY字ネジ。コピー品はプラスネジだった。あとはコネクタ部にNintendoのロゴが入っていなかったり。
純正品はi2cのクロック400kHzでも動作するけどどうやらコピー品は100kHzでしか動作しなかったりするらしい。I2Cバスを他のデバイスと共有するときとかも考えると純正がいいかも。
ESP32との接続は変換用コネクタも売られていたりするし、延長ケーブルをカットして使ってもいいかもしれない。
今回はコネクタにジャンパワイヤーがそのまま刺さるところがあったので、とりあえずそこにブレッドボード用のジャンパワイヤーをそのままさして使ってみた。すごくいい感じの隙間だ…。
コネクタは6極(うち1つはピンなしなので実質5極)なんだけどI2Cで実際必要なのは外側の4Pinで、上の画像だとオレンジが3.3V、緑がGND、黄色がSCL、青がSDAに刺さっている状態。
そんでもってヌンチャク自体はI2Cなんだけど、通信内容は暗号化されているようで、復号化も自動でやってくれるライブラリがあったのでライブラリを使わせてもらった。
Nintendo Extension Controller Library
このライブラリを使えば簡単にヌンチャクを使うことができる。
ESP32でデフォルト以外のピンをI2Cで使う場合はI2Cの初期化をnchuk.begin();の前にすれば良い。
例えばSDAを21、SCKを25にする場合はWire.begin(21,25);をnchuk.begin();の前の行に挿入するだけ。
ためしにNunchuk_DebugPrint.inoに上記の変更を加えてシリアルコンソールで見てみるとちゃんとアナログデータが取れている。
そんでもってこのヌンチャクコントローラ、3軸加速度センサーがついているのでそのデータも見れたりする。アナログスティックとデジタルボタン2つと加速度センサー3軸がお手軽に取れてしまう。
純正品はi2cのクロック400kHzでも動作するけどどうやらコピー品は100kHzでしか動作しなかったりするらしい。I2Cバスを他のデバイスと共有するときとかも考えると純正がいいかも。
ESP32との接続は変換用コネクタも売られていたりするし、延長ケーブルをカットして使ってもいいかもしれない。
今回はコネクタにジャンパワイヤーがそのまま刺さるところがあったので、とりあえずそこにブレッドボード用のジャンパワイヤーをそのままさして使ってみた。すごくいい感じの隙間だ…。
コネクタは6極(うち1つはピンなしなので実質5極)なんだけどI2Cで実際必要なのは外側の4Pinで、上の画像だとオレンジが3.3V、緑がGND、黄色がSCL、青がSDAに刺さっている状態。
そんでもってヌンチャク自体はI2Cなんだけど、通信内容は暗号化されているようで、復号化も自動でやってくれるライブラリがあったのでライブラリを使わせてもらった。
Nintendo Extension Controller Library
このライブラリを使えば簡単にヌンチャクを使うことができる。
ESP32でデフォルト以外のピンをI2Cで使う場合はI2Cの初期化をnchuk.begin();の前にすれば良い。
例えばSDAを21、SCKを25にする場合はWire.begin(21,25);をnchuk.begin();の前の行に挿入するだけ。
ためしにNunchuk_DebugPrint.inoに上記の変更を加えてシリアルコンソールで見てみるとちゃんとアナログデータが取れている。
そんでもってこのヌンチャクコントローラ、3軸加速度センサーがついているのでそのデータも見れたりする。アナログスティックとデジタルボタン2つと加速度センサー3軸がお手軽に取れてしまう。
I2Cなので複数のヌンチャクを使いたい場合はLTC4316とかを使ってアドレスを変更してやれば使えそうな気がする。もしくはTCA9548Aでバスを切り替えるか…。ESP32の場合はI2Cバスが2つ付いてるから別なピンにつなげちゃってもいいかもしれないけど。
これでラジコンとか作りたいなと思っていたんだけど、WiFiでUDP通信使えばレスポンスも問題ないかな?ESP32を2セット用意してもプロポ買うより断然お安く作れそうだし。テレメトリも行けそうだし。
0 件のコメント:
コメントを投稿