Skip to main content

キーボード

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Wio TerminalでUSBキーボードを使用する

このリポジトリでは、Wio TerminalでUSBキーボードを使用する方法を紹介します。この例を実装することで、キーボードからWio Terminalにデータを入力することができます!

必要なもの

この例を実行するには、USB OTGアダプタUSB to Serialモジュールが必要です。OTGアダプタはキーボードを接続するために使用し、USB to SerialモジュールはWio Terminalからの出力を読み取るために使用します。

手順

  1. Arduino IDEを使用してコードをWio Terminalにアップロードします。

  2. コードをアップロードするために使用したUSB Type-CケーブルをWio Terminalから取り外します。

  3. キーボードOTGアダプタに接続し、それをWio TerminalのUSB-Cポートに接続します。

    • キーボード -> OTGアダプタ -> Wio Terminal(Type-Cポート)
  4. USB to Serialモジュールを以下のようにWio Terminalに接続します:

    • TXD(USB to Serialモジュール) -> RXD(Wio Terminalのピン10)
    • RXD(USB to Serialモジュール) -> TXD(Wio Terminalのピン8)
    • 3.3V(USB to Serialモジュール) -> 3.3V(Wio Terminalのピン1)
    • GND(USB to Serialモジュール) -> GND(Wio Terminalのピン6)
  5. USB to Serialモジュールをコンピュータに接続します。使用するUSB to Serialモジュールに応じて、コンピュータが認識できるようにUSBドライバをダウンロードしてください。

  6. Windowsユーザーの場合、デバイスマネージャを開いて認識されているか確認します。新しいCOMポートが表示されるはずです。

    • Macユーザーの場合、ターミナルでls /dev/cu.*を使用してモジュールの利用可能性を確認します。
  7. シリアルデータを表示するには:

    • Windows: PuTTYをダウンロードしてインストールします。Serialを選択し、シリアルラインのCOMをデバイスマネージャに表示されたCOMに変更し、速度を115200に設定して「Open」を押します。ターミナルが表示されます。接続されたキーボードで入力を開始すると、シリアル出力が表示されるはずです!

    • Mac: ターミナルを開き、brew install screenを使用してscreenをインストールします。インストール後、screen /dev/cu.usbserial 115200コマンドを使用します。/dev/cu.usbserialは上記で確認したものに一致させてください。Wio Terminalからのシリアル出力が表示されるはずです!

重要な注意点: Wio TerminalのUSBポートがUSB用に使用されているため、別のプログラムをWio Terminalにアップロードするには、電源ボタンを2回押してブートローダーモードに入る必要があります(LEDが暗くなります)。その後、再びポートが表示されるはずです。

USBホストの設定

Wio TerminalでUSBホストを有効にするには、2つのピンを設定する必要があります。PIN_USB_HOST_ENABLELOWに、OUTPUT_CTR_5VHIGHに設定します。

これを簡単に行うには、以下のコードをvoid setup()に追加します:

digitalWrite(PIN_USB_HOST_ENABLE, LOW);
digitalWrite(OUTPUT_CTR_5V, HIGH);

完全なコード

#include <KeyboardController.h>
#define SerialDebug Serial1


// USBコントローラを初期化
USBHost usb;

// USBにキーボードコントローラを接続
KeyboardController keyboard(usb);

void printKey();

// この関数はキー押下を検出します
void keyPressed() {
SerialDebug.print("押下: ");
printKey();
}

// この関数はキーリリースを検出します
void keyReleased() {
SerialDebug.print("リリース: ");
printKey();
}

void printKey() {
// getOemKey()はキーに関連付けられたOEMコードを返します
SerialDebug.print(" キー:");
SerialDebug.print(keyboard.getOemKey());

// getModifiers()は修飾キーのビットフィールドを返します
int mod = keyboard.getModifiers();
SerialDebug.print(" 修飾:");
SerialDebug.print(mod);

SerialDebug.print(" => ");

if (mod & LeftCtrl)
SerialDebug.print("左Ctrl ");
if (mod & LeftShift)
SerialDebug.print("左Shift ");
if (mod & Alt)
SerialDebug.print("Alt ");
if (mod & LeftCmd)
SerialDebug.print("左Cmd ");
if (mod & RightCtrl)
SerialDebug.print("右Ctrl ");
if (mod & RightShift)
SerialDebug.print("右Shift ");
if (mod & AltGr)
SerialDebug.print("AltGr ");
if (mod & RightCmd)
SerialDebug.print("右Cmd ");

// getKey()はOEMキーと修飾キーを組み合わせたASCII変換を返します
SerialDebug.write(keyboard.getKey());
SerialDebug.println();
}

uint32_t lastUSBstate = 0;

void setup()
{
SerialDebug.begin( 115200 );
SerialDebug.println("キーボードコントローラプログラム開始");

if (usb.Init())
SerialDebug.println("USBホストが開始されませんでした。");

delay( 20 );

// USBホストを有効にするためのピンを設定
digitalWrite(PIN_USB_HOST_ENABLE, LOW);
digitalWrite(OUTPUT_CTR_5V, HIGH);

}

void loop()
{
// USBタスクを処理
usb.Task();

uint32_t currentUSBstate = usb.getUsbTaskState();
if (lastUSBstate != currentUSBstate) {
SerialDebug.print("USB状態が変更されました: 0x");
SerialDebug.print(lastUSBstate, HEX);
SerialDebug.print(" -> 0x");
SerialDebug.println(currentUSBstate, HEX);
switch (currentUSBstate) {
case USB_ATTACHED_SUBSTATE_SETTLE: SerialDebug.println("デバイスが接続されました"); break;
case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: SerialDebug.println("切断され、デバイスを待機中"); break;
case USB_ATTACHED_SUBSTATE_RESET_DEVICE: SerialDebug.println("デバイスをリセット中"); break;
case USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE: SerialDebug.println("リセット完了"); break;
case USB_STATE_CONFIGURING: SerialDebug.println("USB設定中"); break;
case USB_STATE_RUNNING: SerialDebug.println("USB実行中"); break;
}
lastUSBstate = currentUSBstate;
}
}
Loading Comments...