DigisparkでMicrosoft Teamsのマイクミュートのオンオフの物理キーを作る（夏休み工作）

Digisparkは、マイコンのATTiny85の小さなボードです。これと、QMK Configuratorを使ってノンプログラミングでMicrosoft Teamsのマイクミュートのオンオフの物理キーを作ってみました。
はんだ付けやケースの工作は必要なでのすが、プログラムを書かなくてもよいのは楽だと思います。QMK Configuratorには、いろいろキーが設定できるので、Microsoft Teamsのマイクミュートのオンオフ以外もできると思います。
Microsoft Teamsのマイクミュートのオンオフのショートカットキーは「Ctrl + Shift + M」です（Windowsの場合です）1つのキーを押すと、「Ctrl + Shift + M」が送信されるようにしています。

## 用意するもの

1. Digispark
2. プッシュボタンスイッチ（モーメンタリとよばれるプッシュボタンスイッチ。モーメンタリは、プッシュボタンスイッチを押してい間だけオンになるプッシュボタンスイッチです）
3. 配線用のコード、はんだ、はんだごてなど

あと、PCも必要です。ここではWindows 10を利用しましたので、すべてWindows 10を利用した手順になります。

## Digisparkの動作確認

Digisparkは、PCにUSB接続後の5秒間だけプログラムの書き込みモードになります。その後書き込まれているプログラムを実行します。なので、DigisparkはPCに接続しないでください。
プログラム書き込み用のソフト（micronucleus）をダウンロードし、そのmicronucleusでDigisparkがアクセスできるか確認します。

### micronucleusのダウンロード

https://github.com/micronucleus/micronucleus/releases にアクセスし`micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763.zip`をダウンロードします。説明の都合上ダウンロードフォルダーにダウンロードされたことを前提に進めます。
![qmk6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/314dad06-6278-7af1-3d70-48d8e7f9ddcf.png)
micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763.zip をすべて展開します。

展開すると展開した場所にmicronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763フォルダーが作られると思います。
インストールは不要です。展開しただけで利用できます。

### micronucleusの実行とDigisparkの接続

コマンドプロンプトを開きます。
コマンドプロンプトが出てきたら、Downloadsフォルダーに移動します。
移動したら`micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe --info`を実行し、`Please plug in the device ...`が表示されたらDigisparkをPCに接続。


```
>cd Downloads

>micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe --info
> Please plug in the device ...
```

DigisparkをPCに接続すると、`Device is found!`が表示されDigisparkのファームウェアのバージョンが表示されます。
`Device has firmware version `が表示されてれば問題ないと思います。


```
>micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe --info
> Please plug in the device ...
> Device is found!
connecting: 20% complete
connecting: 27% complete
connecting: 34% complete
connecting: 40% complete
> Device has firmware version 2.6
> Device signature: 0x1e930b
> Bootloader entry condition: The bootloader is always activated after reset.
> Bootloader exit condition: The bootloader exits after 6 seconds (default) if no uploading detected.
> Available space for user applications: 6650 bytes
> Suggested sleep time between sending pages: 7ms
> Whole page count: 104  page size: 64
> Erase function sleep duration: 728ms
>> Micronucleus done. Thank you!

>
```

## Digisparkとスイッチの接続

Digisparkとスイッチの接続は、次のような回路図になります。
![qmk0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/1b16b35b-ddc8-07da-fe86-65b5c2c630af.png)

## GUIによるキーの設定とコンパイル、ダウンロード

その次は、ノンプログラミングです。Web上で操作すると自動的にプログラムを作成してくれます。
出来上がったプログラムをコンパイルしてダウンロードします。

### GUIによるキーの設定

まずは、QMK Configuratorの https://config.qmk.fm/#/1k/LAYOUT_ortho_1x1 へアクセスします。
![qmk1-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/23dd9290-8013-6751-905b-f3db9c76fc49.png)
設定できるキーがでてきます。ここでは、1つだけです。
まずは設定されているキーを削除し、その後新しくキーを設定します。
`×`を押して現在の設定を削除します。
![qmk1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/bd418354-ba8e-0869-1213-d2eae947cf06.png)
そうすると以下のようになります。`N/A`は何もキーが設定されていない状態です。
![qmk1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/151c53bf-7f3a-61d7-0a67-4ba9dbe1729d.png)
設定するキーを選択しないといけないので、`N/A`をクリックします。
![qmk1-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/88a6cc2f-e20f-4986-9e3d-795afe904f75.png)
設定するキーを指定します。Quantumタブをクリックし、1つのキーで複数のキーを設定します。
![qmk2-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/e198c7ed-59bc-b100-d9f0-f576c139bb50.png)
ここでは、`C_S_T`を選択します。`C_S_T`は、何かのキーを押す前にコントロールキーとシフトキーを押す設定になります。
![qmk2-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/b3f7c24c-5d33-eab2-e1e3-a64655d22fd4.png)
こんどは、`C_S_T`の中の`N/A`を選択します。
![qmk2-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/a069ba7a-6469-4bd4-a633-b8eebf00fc08.png)
ANSIタブをクリックし、`M`を選択します。
![qmk3-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/11f01582-03ef-1d0d-b4da-74abced99d07.png)
そうすると、`C_S_T`の中の`M`が入り、コントロールキーとシフトキーとMキーを押す設定が出来上がります。
![qmk3-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/754cedb7-c9e2-2247-bb6b-607782a725e6.png)

### コンパイル

右上の`COMPILE`をクリックするとコンパイルが始まり、ジャガイモが表示されます。ジャガイモの表示が消えれば、コンパイルは終わります。
![qmk4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/0fc9b63c-b440-5ba0-17e7-9ac06de08dd3.png)

### ダウンロード

`FIRMWARE`をクリックし、コンパイルされたプログラムをダウンロードします。
![qmk5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/84749ab6-881e-32b1-3a24-d55b0d421c5e.png)
1k_layout_ortho_1x1_mine.hex というファイル名でダウンロードされます。
これも説明の都合上ダウンロードフォルダーにダウンロード置いてください。

## ダウンロードしたプログラムの書き込み

Digisparkの動作確認で使用した、`micronucleus.exe`を使います。
コマンドプロンプトを開きます。
コマンドプロンプトが出てきたら、Downloadsフォルダーに移動します。
`micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe ----run 1k_default.hex`を実行し、`Please plug in the device ...`が表示されたらDigisparkをPCに接続します。

```
>micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe --run 1k_default.hex
> Please plug in the device ...
```

DigisparkをPCに接続すると、`Device is found!`が表示されプログラムの書き込みが始まります。

```
>micronucleus-cli-master-882e7b4a-x86_64-MINGW64_NT-10.0-17763\micronucleus-cli-master-882e7b4a\micronucleus.exe --run 1k_default.hex
> Please plug in the device ...
> Device is found!
connecting: 16% complete
connecting: 22% complete
connecting: 28% complete
connecting: 33% complete
> Device has firmware version 2.6
> Device signature: 0x1e930b
> Bootloader entry condition: The bootloader is always activated after reset.
> Bootloader exit condition: The bootloader exits after 6 seconds (default) if no uploading detected.
> Available space for user applications: 6650 bytes
> Suggested sleep time between sending pages: 7ms
> Whole page count: 104  page size: 64
> Erase function sleep duration: 728ms
parsing: 50% complete
> Erasing the memory ...
erasing: 55% complete
erasing: 60% complete
erasing: 65% complete
> Starting to upload ...
writing: 70% complete
writing: 75% complete
writing: 80% complete
> Starting the user app ...
running: 100% complete
>> Micronucleus done. Thank you!

>
```

## 確認

Digisparkにつけたプッシュボタンスイッチを押したときに、想定したキーになっているか確認します。
Keyboard Event Viewer https://w3c.github.io/uievents/tools/key-event-viewer.html にアクセスして`input element with type="text":`のテキストボックスをクリックします。その後、Digisparkにつけたプッシュボタンスイッチを押して話ます。
![qmk8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/81804a31-5723-98dc-55a6-88e85ada93de.png)
そうするとDigisparkから送られてきたキーや順番が表示されます。
![qmk9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527700/e4c6bd8d-5d97-3bf6-dc1d-26ce5218f3cd.png)

Arduinoの開発環境でも同じようなのは作成できます。でもQMK Configuratorで思ったより簡単にできましたので記録として書いています。