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