Pro MicroをHIDデバイス(キーボード)としてパソコンに接続します。ATmega32U4マイコンを使用したProMicroは、HIDデバイスが作成できます。

プログラムの作成

Arduino IDEを用いて、次に示すプログラムを作成します。ヘッダファイルに”Keyboard.h”を選択し、このクラス「Keyboard」に対して、文字列を記述していきます。10秒ごとにキーボードから文字列が入力されます。

#include "Keyboard.h"

void setup() {
    Keyboard.begin();
}

void loop() {
    Keyboard.print("TomoSoft ProMicro ");
    Keyboard.write(','); 
    Keyboard.print(millis());
    Keyboard.write('\n');

    delay(10000);
}

Arduino IDEのツールメニューで 次の設定を行い、作成したプログラムを「マイコンボードに書き込む」を選択してPro Microに書き込みます。

注:ボードの名称が「Arduino Leonardo」となっているのは、「「Unknown Device」になったPro Microのブートローダの再書き込み」でArduino Leonardoブートローダを再書き込みしたためです。

プログラムの実行

プログラムのPro Microを書き込みを終了して、メモ帳を開くと、Pro Microをキーボードとして、次のように10秒ごとに「TomoSoft ProMicro, xxx」(xxx:時刻)が表示されます。

デバイスマネージャーを開くと次のようにHIDキーボードデバイスが追加されています。

usbview」を使用して、Pro MicroのHIDキーボードデバイスのデータを確認します。

Device Descriptor:
bcdUSB:             0x0200
bDeviceClass:         0xEF
bDeviceSubClass:      0x02
bDeviceProtocol:      0x01
bMaxPacketSize0:      0x40 (64)
idVendor:           0x2341
idProduct:          0x8036
bcdDevice:          0x0100
iManufacturer:        0x01
0x0409: "Arduino LLC"
iProduct:             0x02
0x0409: "Arduino Leonardo"
iSerialNumber:        0x03
0x0409: "HIDPC"
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:     Full
Device Address:       0x03
Open Pipes:              4

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0010 (16)
bInterval:            0x40

Endpoint Descriptor:
bEndpointAddress:     0x84  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0040 (64)
bInterval:            0x01

Endpoint Descriptor:
bEndpointAddress:     0x02  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x83  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Configuration Descriptor:
wTotalLength:       0x0064
bNumInterfaces:       0x03
bConfigurationValue:  0x01
iConfiguration:       0x00
bmAttributes:         0xA0 (Bus Powered Remote Wakeup)
MaxPower:             0xFA (500 Ma)

Unknown Descriptor:
bDescriptorType:      0x0B
bLength:              0x08
08 0B 00 02 02 02 01 00 

Interface Descriptor:
bInterfaceNumber:     0x00
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0x02
bInterfaceSubClass:   0x02
bInterfaceProtocol:   0x00
iInterface:           0x00

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 00 10 01 

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 01 01 01 

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x04
04 24 02 06 

Unknown Descriptor:
bDescriptorType:      0x24
bLength:              0x05
05 24 06 00 01 

Endpoint Descriptor:
bEndpointAddress:     0x81  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0010 (16)
bInterval:            0x40

Interface Descriptor:
bInterfaceNumber:     0x01
bAlternateSetting:    0x00
bNumEndpoints:        0x02
bInterfaceClass:      0x0A
bInterfaceSubClass:   0x00
bInterfaceProtocol:   0x00
iInterface:           0x00

Endpoint Descriptor:
bEndpointAddress:     0x02  OUT
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Endpoint Descriptor:
bEndpointAddress:     0x83  IN
Transfer Type:        Bulk
wMaxPacketSize:     0x0040 (64)
bInterval:            0x00

Interface Descriptor:
bInterfaceNumber:     0x02
bAlternateSetting:    0x00
bNumEndpoints:        0x01
bInterfaceClass:      0x03 (HID)
bInterfaceSubClass:   0x00
bInterfaceProtocol:   0x00
iInterface:           0x00

HID Descriptor:
bcdHID:             0x0101
bCountryCode:         0x00
bNumDescriptors:      0x01
bDescriptorType:      0x22
wDescriptorLength:  0x002F

Endpoint Descriptor:
bEndpointAddress:     0x84  IN
Transfer Type:   Interrupt
wMaxPacketSize:     0x0040 (64)
bInterval:            0x01