😮‍💨

Pro Micro, QMK覚え書き

に公開

https://tarohayashi.booth.pm/items/4500742
こちらを買って遊んでいました。
一通りビルドガイド通り作り終えて楽しんだ後、作者の方が用意されているファームウェアを少し改造したかったため、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について

https://github.com/sparkfun/Pro_Micro/tree/main

  • これが実際に公開されているPro Microの情報

  • Arduino Leonardoの互換機のため、デバイス名はArduino LeonardoであったりArduino Microであったりする

    • 純正Pro MicroはPro Micro 5Vなどと表示されるらしい
  • 今回使用したものはArduino Microとして認識されていた

QMKについて

https://docs.qmk.fm/

  • QMK(Quantum Mechanical Keyboard)
    • コンピュータ入力デバイス開発のオープンソースコミュニティ
    • キーボードとマウスだけではなく、MIDIデバイスなども開発対象
    • QMK FirmwareやQMK Toolboxはこのコミュニティが開発・管理している自作キーボード関連のツール
    • 今回使ったのはQMK MSYSとQMK Toolbox

QMK MSYSについて

https://msys.qmk.fm/

  • ファームウェアをビルドするためのツール
  • リリースページから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)
...
  • 公式リファレンスは以下の項目が該当する

https://docs.qmk.fm/newbs_getting_started#windows

https://docs.qmk.fm/newbs_building_firmware

  • 今回は購入したCO2モニターキット用に配布されているコードを一部カスタムしただけなので詳しくは読まず、フォルダ構造を配布元と同一にして以下のコマンドを実行してビルドした
qmk compile -kb myco2monitor -km default

QMK Toolboxについて

https://qmk.fm/toolbox
https://github.com/qmk/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ファイルを指定し、RSTGNDをショートさせると書き込める
  • 書き込み中は以下のようなログが出力される
    • コンソール末尾に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

開発ドキュメント

https://docs.qmk.fm/

実際に行ったカスタマイズ

  • 発光モード: 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;
}
...

参考

https://zenn.dev/koron/articles/a2e220d73800ba
https://note.com/u9jg83gf/n/n5299d767d34e
https://salicylic-acid3.hatenablog.com/entry/qmk-toolbox
https://zenn.dev/koron/articles/9fee38469a8acc
https://qiita.com/hnw/items/a99528c150fecaf4c82c
https://qiita.com/hironot/items/417207eb9f734c9910ac
https://tech.buty4649.net/entry/2018/02/13/211957

Discussion