😮💨
Pro Micro, QMK覚え書き
一通りビルドガイド通り作り終えて楽しんだ後、作者の方が用意されているファームウェアを少し改造したかったため、QMK Firmwareの動作環境を作りました。
その過程でPro MicroやQMKについて少し調べたので、自分用のメモとして残します。
環境
マイコンの仕様
Type C インターフェイス、Pro Micro モジュール、定常電圧: 5V の入力電圧: 7-12V。
メモリ 32KB、SRAM:2KB、EEPROM:1KB、クロック周波数:16MHz。
4チャンネル10ビットADC、5 PWMピン、12 x デジタルI/O、RxおよびTxハードウェアシリアル接続。
5V/16MHzで動作するAT-mega32U4。
ボード上に電圧レギュレータがあるので、DC12Vまでの電圧を受け入れることができます。電源が不安定な電源ボードの場合は、RAW とVCCピンに接続する必要があります。
- 安いなりに「不良品が届いた」系のコメントが散見されるため、ぶっちゃけおすすめでは全くない
Windowsの仕様
エディション Windows 11 Home
バージョン 23H2
インストール日 2024/10/23
OS ビルド 22631.4317
ツールの仕様
- QMK Toolbox
- version 0.3.3
- QMK MSYS
- version 1.1.6
Pro Microについて
-
Arduino Leonardoの互換機
- Spark funで売っているPro Microが「純正Pro Micro」
- ハードウェア設計情報などがCC BY-SA 4.0で公開されているため、安い互換機がたくさん作られた
- 私もご多分に漏れず互換機を購入
-
これが実際に公開されているPro Microの情報
-
Arduino Leonardoの互換機のため、デバイス名は
Arduino Leonardo
であったりArduino Micro
であったりする- 純正Pro Microは
Pro Micro 5V
などと表示されるらしい
- 純正Pro Microは
-
今回使用したものは
Arduino Micro
として認識されていた
QMKについて
- QMK(Quantum Mechanical Keyboard)
- コンピュータ入力デバイス開発のオープンソースコミュニティ
- キーボードとマウスだけではなく、MIDIデバイスなども開発対象
- QMK FirmwareやQMK Toolboxはこのコミュニティが開発・管理している自作キーボード関連のツール
- 今回使ったのはQMK MSYSとQMK Toolbox
QMK MSYSについて
- ファームウェアをビルドするためのツール
-
リリースページから
QMK_MSYS.exe
をインストール - 初回は以下のように環境構築が必要なので、追加でコマンドを実行してセットアップする
If you have not already done so,
run qmk setup to get started.
run qmk compile -kb <keyboard> -km default to start building.
run qmk config user.hide_welcome=True to hide this message.
[issan@HANAE ~]$ qmk setup
☒ Could not find qmk_firmware!
Would you like to clone qmk/qmk_firmware to C:/Users/issan/qmk_firmware? [y/n] y
Cloning into '/c/Users/issan/qmk_firmware'...
Updating files: 1% (260/21867)
Updating files: 2% (438/21867)
Updating files: 2% (525/21867)
Updating files: 3% (657/21867)
...
- 公式リファレンスは以下の項目が該当する
- 今回は購入したCO2モニターキット用に配布されているコードを一部カスタムしただけなので詳しくは読まず、フォルダ構造を配布元と同一にして以下のコマンドを実行してビルドした
qmk compile -kb myco2monitor -km default
QMK Toolboxについて
- マイコンにファームウェアを書き込むためのツール
- ファームウェアの自動検出と自動フラッシュをサポートしているらしい
- 最も手軽な書き込みツールとしてはPro Micro Web Updaterがある
- 今回は激安互換機を使っているからなのかこのツールでは以下のようにVerifyできず、動作しなかった
Reset Pro Micro and choose serial port appeared.
Error: Serial receive timeout
Firm read failed
atmega32u4 found.
Verify flash 19288 bytes...
.......................................................................................................................................................Verify NG at address 0x2
Error: Verify failed
Firm read failed
-
QMK Toolboxのリリースページよりインストーラーをインストールして使う
- 書き込む
.hex
ファイルを指定し、RST
とGND
をショートさせると書き込める
- 書き込む
- 書き込み中は以下のようなログが出力される
- コンソール末尾に
Flash complete
と出力されればOK
- コンソール末尾に
書き込み成功時のログ
Caterina device connected (usbser): Microsoft USB シリアル デバイス (COM6) (2341:0037:0001) [COM6]
Attempting to flash, please don't remove device
> avrdude.exe -p atmega32u4 -c avr109 -U flash:w:"C:\Users\issan\qmk_firmware\.build\myco2monitor_default.hex":i -P COM6
>
> Connecting to programmer: .
> Found programmer: Id = "CATERIN"; type = S
> Software Version = 1.0; No Hardware Version given.
> Programmer supports auto addr increment.
> Programmer supports buffered memory access with buffersize=128 bytes.
>
> Programmer supports the following devices:
> Device code: 0x44
>
> avrdude.exe: AVR device initialized and ready to accept instructions
>
> Reading | ################################################## | 100% 0.00s
>
> avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
> avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
> To disable this feature, specify the -D option.
> avrdude.exe: erasing chip
> avrdude.exe: reading input file "C:\Users\issan\qmk_firmware\.build\myco2monitor_default.hex"
> avrdude.exe: writing flash (20268 bytes):
>
> Writing | ################################################## | 100% 1.51s
>
> avrdude.exe: 20268 bytes of flash written
> avrdude.exe: verifying flash memory against C:\Users\issan\qmk_firmware\.build\myco2monitor_default.hex:
>
> Reading | ################################################## | 100% 0.16s
>
> avrdude.exe: 20268 bytes of flash verified
>
> avrdude.exe done. Thank you.
>
Flash complete
開発ドキュメント
- おそらく、特にUnderstanding QMK's CodeとList of Useful Core Functions To Make Your Keyboard Betterの章を詳しく読めばよさそう
実際に行ったカスタマイズ
- 発光モード:
GRADATION
ではALARTTHRESHOLD
(デフォルトは2000ppm)以上は赤、それ以下は青から段階的に色が変化するようになっている-
ALERTTHRESHOLD
を2000 -> 1500に変更 - 測定結果が
ALERTTHRESHOLD
以上のとき、赤色と消灯で点滅するよう変更-
bool oled_task_user(void)
は周期的に呼ばれているようで、以下のように測定間隔とLED更新間隔を別のタイマーで管理すればOKだった
-
-
keymap.c
...
// CO2濃度警告の閾値
#define ALARTTHRESHOLD 1500
// 測定更新間隔(ミリ秒)
#define MEASURE_INTVAL 4000
// LED点滅の間隔(ミリ秒)
#define BLINK_INTVAL 500
// 計算とOLEDの表示
bool oled_task_user(void) {
...
}
if (timer_elapsed(oled_timer) > MEASURE_INTVAL){
...
// OLED処理
...
}
// LED処理
if (timer_elapsed(blink_timer) > BLINK_INTVAL) {
oled_set_cursor(0,3);
if(mode == GRADATION){
uint16_t hue;
if(last_ppm >= ALARTTHRESHOLD){
led_on = !led_on;
if (led_on) {
rgblight_sethsv(0, 255, 255); // 赤色
} else {
rgblight_sethsv(0, 255, 0); // 消灯
}
// hue = 0;
} else{
// 普通のグラデーション表示
}
...
return false;
}
...
参考
Discussion