Nintendo64コントローラをESP32で読み取るのためのパッケージ
N64は250kHzボーレートで通信使、1は1µs LOW, 3µs HIGH、0は3µs LOW, 1µs HIGHで表現されます。
そのままの通信プロトコルが存在しないので1250kHzのUARTを利用して通信を行う
N64 2ビット分をUART 8ビットで下記表に合わせて表現する
| N64 | UART |
|---|---|
| 0b00 | 0x08 |
| 0b01 | 0xe8 |
| 0b10 | 0x0f |
| 0b11 | 0xEF |
N64コントローラは1線式半二重シリアルプロトコルを使用しています。
それに対応するため、画像のようにTXにダイオードを挟んでRXと合わせて接続する
ESP32-DevkitにはUARTで使用できるシリアルが3つ存在するが、SerialはUSBシリアルと共用しているため、USBを使用する場合は使用することができない
| RX | TX | |
|---|---|---|
| Serial | 3 | 1 |
| Serial1 | 9 | 10 |
| Serial2 | 16 | 17 |
## 使い方
n64_protocol.cpp上の#define N64Serialに使用するシリアルアダプタを設定する
// デフォルト
#define N64Serial Serial2
// 変更例
// シリアル0を使用する場合
#define N64Serial Serial
// シリアル1を使用する場合
#define N64Serial Serial1
// シリアル2を使用する場合
#define N64Serial Serial2- *** ステータス(0x00) ***
/**
* @brief ステータスコマンド送信
*
* @param data レスポンスデータ格納バッファ(必要3バイト)
* @return size_t
*/
size_t N64_readStatus(uint8_t* data);- *** ポール(0x01) ***
/**
* @brief ポーリングコマンド送信
*
* @param data レスポンスデータ格納バッファ(必要3バイト)
* @return size_t
*/
size_t N64_readPoll(uint8_t* data);-
*** 読み取り(x02) ***
-
*** 書き込み(0x03) ***
-
*** リセット(0xFF) ***


