下の赤色LEDはCAPSランプになっていて、他のキーボードの CAPS LOCK キーにも連動して点滅する |
概要
Digispark+gcc チュートリアルの Part2 です。
Digispark にファームウェアを書き込んで、USB キーボードとして動作させる方法を説明します。これは Code and Life さんの記事 USB HID keyboard with V-USB を参考にして Digispark で動作するようにアレンジしたものです。
ファームウェアを C言語で書いて avr-gcc でコンパイルし、USB で接続した Digispark に書き込みます (Arduino の開発環境を使いません)。
Raspberry Pi, FreeBSD で動作確認しました。
※ Windows のコマンドラインから Digispark に生のファームウェアを書き込む手順は、1回目の記事 参照
1. 開発環境の準備
以前の記事 「Digispark+gcc Lチカチュートリアル(RaspberryPi, Linux, FreeBSD 版)」 の 1. 2. を実行して、必要なツールをインストールし、Digispark への書き込みソフト micronucleus
を実行できるようにしておく。
2. ソースコードのダウンロードとコンパイル
(1) Digispark_kbd.zip をダウンロードして(「エラー」と表示された場合もそのままダウンロードできる)、ローカルに展開する。
(2) make コマンド(Raspberry Pi では make コマンド、FreeBSD では gmake コマンド) を実行すると main.c がコンパイルされてバイナリ (Intel HEX) 形式のファームウェア sample1.hex が生成する。
3. ファームウェアの書き込み
1. で準備した書き込みツール micronucleus をパスの通った場所に置き
# micronucleus --run sample1.hex
を実行する(root 権限が必要)。
> Please plug in the device ...
> Press CTRL+C to terminate the program.
と表示されるので、この状態で USB 端子に Digispark を挿入するとファームウェアが書き込まれる。
4. 動作確認
(1) ファームウェアを書き込んだ Digispark を PC の USB 端子に挿入すると、5-6 秒後に USB キーボードとして認識される。Raspberry Pi, FreeBSD では dmesg コマンドを実行すると、USB デバイスの名前が確認できる(ベンダID=0x16c0, デバイスID=0x05dc)。
Raspberry Pi の例
% dmesg
[522793.926120] usb 1-1.3: New USB device found, idVendor=16c0, idProduct=05dc
[522793.926166] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[522793.926185] usb 1-1.3: Product: V-USB
[522793.926201] usb 1-1.3: Manufacturer: KBD
[522793.945119] input: KBD V-USB as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/0003:16C0:05DC.0005/input/input4
[522794.000287] hid-generic 0003:16C0:05DC.0005: input,hidraw0: USB HID v1.01 Keyboard [KBD V-USB] on usb-20980000.usb-1.3/input0
FreeBSD の例
% dmesg
ugen0.5: <KBD> at usbus0
ukbd0: <KBD V-USB, class 0/0, rev 1.10/1.00, addr 12> on usbus0
kbd2 at ukbd0
Windows の例
Windows PC に挿した場合は HID キーボードデバイスとして認識されたことが、デバイスマネージャから確認できる。
(2) 基板上の LED (PB1 に接続) は CAPS LOCK ランプとして機能している。Digispark を接続した PC のキーボードの SHIFT+CAPSLOCKキーを押すと、本来のキーボードの CAPS LOCK ランプと同時に、Digispark 上の LED も点滅する。
(3) Digispark の P0 端子(PB0)と GND 端子をショートさせると、キーボードの "x" キーを押して離す動作が実行されて、画面上に x と表示される。
はじめまして。
返信削除Arduinoの開発環境でも同じこと(CapsLockLEDの制御)は出来ますか?
実は Arduino の開発環境を使っていないため分かりません。すみません。
返信削除検索してみたところ、海外の掲示板でも同じことをしたいと書いている人がいましたが、2017/9 の段階では Digispark のライブラリではできないみたいです。
https://digistump.com/board/index.php?topic=2757.0
あ、ここです。その後解決されています。加納
削除ありがとうございます。
返信削除同じ問題に直面してる人は見つかるんですけどね。