・2022/03/13
市販のキーボードを無改造で QMK化する QMK USB Converterを作ってみる
(QMK firmware QMK USB to USB keyboard protocol converter Pro Micro 3.3V + USB Host MAX3421E)
Tags: [電子工作], [QMK]
● QMK firmwareの関連記事
・2021/08/23
QMK firmwareの開発環境を ラズパイや Windows WSLにセットアップする方法
ラズパイや Windows WSL環境でカスタマイズ キーボードのファームウェア QMK firmwareの開発環境を構築
・2022/01/09
BUFFALOの USB テンキーを Pro Microと QMKを使って VIAカスタマイズ キーボードに改造する方法
BUFFALO USB 10-Key keyboard BSTK100 modification by Pro Micro and QMK firmware VIA
・2021/08/11
社畜のキーボード「新入社員の同期」を購入してみた!! VIA、QMK、Remapでのカスタマイズに対応
キー内容が Remap等でカスタマイズ可能な社畜のキーボード「新入社員の同期」を 3500円で購入
● 2023年、QMK USB Converterの製作が RP2040を使う事で劇的に簡単になりました
・2023/08/12
【自由工作】市販のキーボードを無改造で VIA QMK化する Keyboard Quantizerを自作する【夏休み】
夏休みが明けたら 僕のキーボードが最強になって クラスのみんなから MMK 大作戦
●市販のキーボードを無改造で QMK化する QMK USB Converterを作ってみる
QMK firmware QMK USB to USB keyboard protocol converter Pro Micro 3.3V + USB Host MAX3421E
USB Host Shield MAX3421Eと Pro Micro 3.3V版を使って市販のキーボードを無改造で QMK化する QMK USB Converterを作ってみる。
注意:USB Host Shield MAX3421Eは Pro Micro 16MHz +5V版では使えません(+5V to +3.3Vのレベル変換が必要になる)
● Amazonで部品を調達
MAX3421Eは +5Vトレラントではないので Pro Micro 8MHz 3.3V版が必要です。
MAX3421E SPIインタフェース付き、USBペリフェラル/ホストコントローラ - Maxim Integrated
USB Host Shield MAX3421E基板は互換品を購入しました。
HW-244 USB Host Shield UHS mini 2.0
USB Host Shield MAX3421E基板ではパターンカットが 1箇所必要で、USBコネクタの 2K2のシルク印刷のパターンをカットします。
USB Host Shield基板の +5Vに Pro Micro基板の RAWを配線します。
USB Host Shield基板の RESETに Pro Micro基板の RESETを配線します。
(USB Host Shield基板の RESETに Pro Micro基板の +3.3Vを配線する例も有りますが、今回は RESETにしました)
・USB Host Shield MAX3421Eと Pro Micro 3.3V版を使って市販のキーボードを無改造で QMK化する QMK USB Converterを作ってみる




USB Host Shield MAX3421E基板でお決まりの USB +5Vのパターンカット(オレンジ色の部分)。
+5Vと RESETはワイヤでの配線を行ないます。
Pro Micro基板との連結は上記の赤ドットのピンにだけ行ないます。
USB Host Shield MAX3421E基板側は上記の信号線と、別途 +5Vと RESETの配線が必要です。
Pro Micro基板側は上記の信号線を使用します。
+5Vと RESETはワイヤでの配線を行ないます。
USBコネクタの半田付けが物凄く汚いです。
2016年のロットでも 2020年のロットでも USBコネクタの半田付けが物凄く汚いです。

こんな感じで完成します。
● QMK firmware USB to USB keyboard protocol converterを組み立てた
USB Host Shield MAX3421E基板でお決まりの USB +5Vのパターンカット。
こんな感じでピンを立てて Pro Micro基板と連結をします。
こんな感じでピンを立てて Pro Micro基板と連結をします。



USB HOST基板側で +5Vと RESETの配線を行ないました。


●ブザーと OLEDを付けました



A-B間に配線をする。
NCは未接続。
ブザー自身はコイル駆動で 10Ω。
E=RIの式で I=E/R、3.3V/(10+120)Ω=25mA
(AVR ATmega32U4の 1pinあたりの最大許容電流 40mAを超えない様にする)
120Ω程度の抵抗を直列に入れる。
Atmel ATmega32U4 PDF
29. Electrical Characteristics
29.1 Absolute Maximum Ratings
DC Current per I/O Pin ... 40.0mA


●最強の QMK USB Converter!!爆誕!!
プログラムサイズを限界まで削減して QMK USB Converterで下記の機能を詰め込む事に成功しました。
最強の QMK USB Converter!!爆誕!!
・QMK USB Converter with VIA Layer

● Add multilayer VIA support to Hasu usb_usb #16458
USB to USB keyboard protocol converterを VIA対応にするパッチ。
暫くすれば QMK公式に取り込まれるかも。
Add multilayer VIA support to Hasu usb_usb #16458
VIA_ENABLEで VIA機能を有効にする。
● VIA用 keymap.json定義ファイル #16458を適用版
{
"name":"USB to USB keyboard protocol converter with #16458",
"vendorId":"0x4853",
"productId":"0x005B",
"lighting":"none",
"matrix":{
"rows":9,
"cols":16
},
"layouts":{
"keymap":[
[ {"x":2},"0,1","0,2","0,3","0,4", {"x":0.5},"0,5","0,6","0,7","0,8", {"x":0.5},"0,9","0,10","0,11","0,12" ],
[ "0,0", {"x":1},"0,13","0,14","0,15","1,0", {"x":0.5},"1,1","1,2","1,3","1,4", {"x":0.5},"1,5","1,6","1,7","1,8", {"x":0.5},"1,9","1,10","1,11", {"x":1.5},"1,12","1,13","1,14", {"x":0.5},"1,15","2,0" ],
[ {"y":0.5},"2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9","2,10","2,11","2,12","2,13","2,14","2,15", {"x":0.5},"3,0","3,1","3,2", {"x":0.5},"3,3","3,4","3,5","3,6", {"x":0.5},"3,7","3,8" ],
[ {"w":1.5},"3,9","3,10","3,11","3,12","3,13","3,14","3,15","4,0","4,1","4,2","4,3","4,4","4,5", {"w":1.5},"4,6", {"x":0.5},"4,7","4,8","4,9", {"x":0.5},"4,10","4,11","4,12","4,13", {"x":0.5},"4,14","4,15" ],
[ "5,0","5,1","5,2","5,3","5,4","5,5","5,6","5,7","5,8","5,9","5,10","5,11", "5,12", {"w":2},"5,13", {"x":4},"5,14","5,15","6,0","6,1", {"x":0.5},"6,2","6,3" ],
[ {"w":1.5},"8,1","6,4","6,5","6,6","6,7","6,8","6,9","6,10","6,11","6,12","6,13","6,14", "6,15",{"w":1.5},"8,5", {"x":1.5},"7,0", {"x":1.5},"7,1","7,2","7,3","7,4", {"x":0.5},"7,5","7,6" ],
[ {"w":1.5},"8,0","8,3","8,2","7,7","7,8", {"w":2},"7,9", "7,10","7,11","7,12","8,6","8,7","7,13",{"w":1.5},"8,4", {"x":0.5},"7,14","7,15","8,8", {"x":0.5, "w":2},"8,9", "8,10","8,11", {"x":0.5},"8,12","8,13" ]
]
}
}
● VIA用 keymap.json定義ファイル ノーマル版
{
"name":"USB to USB keyboard protocol converter",
"vendorId":"0xFEED",
"productId":"0x005B",
"lighting":"none",
"matrix":{
"rows":16,
"cols":16
},
"layouts":{
"keymap":[
[ {"x":2},"6,8", "6,9", "6,10", "6,11", {"x":0.5},"6,12", "6,13", "6,14", "6,15", {"x":0.5},"7,0", "7,1", "7,2", "7,3" ],
[ "2,9",{"x":1},"3,10", "3,11", "3,12", "3,13", {"x":0.5},"3,14", "3,15", "4,0", "4,1", {"x":0.5},"4,2", "4,3", "4,4", "4,5", {"x":0.5},"4,6", "4,7", "4,8", {"x":1.5},"8,1", "8,0", "7,15", {"x":0.5},"6,6","7,5" ],
[ "3,5", "1,14", "1,15", "2,0", "2,1", "2,2", "2,3", "2,4", "2,5", "2,6", "2,7", "2,13", "2,14", "8,9", "2,10", {"x":0.5},"4,9", "4,10", "4,11", {"x":0.5},"5,3", "5,4", "5,5", "5,6", {"x":0.5},"7,8", "7,9" ],
[ {"w":2},"2,11", "1,4", "1,10", "0,8", "1,5", "1,7", "1,12", "1,8", "0,12", "1,2", "1,3", "2,15", "3,0", "3,1", {"x":0.5},"4,12", "4,13", "4,14", {"x":0.5},"5,15", "6,0", "6,1", "5,7", {"x":0.5},"7,6", "7,10" ],
[ "3,9", "0,4", "1,6", "0,7", "0,9", "0,10", "0,11", "0,13", "0,14", "0,15", "3,3", "3,4", "3,2", {"w":2},"2,8", {"x":4}, "5,12", "5,13", "5,14", "8,5", {"x":0.5},"7,7", "7,12" ],
[ {"w":1.5},"14,1", "6,4", "1,13", "1,11", "0,6", "1,9", "0,5", "1,1", "1,0", "3,6", "3,7", "3,8", "8,7", {"w":1.5},"14,5", {"x":1.5},"5,2", {"x":1.5},"5,9", "5,10", "5,11", "6,7", {"x":0.5},"7,4", "7,13" ],
[ {"w":1.5},"14,0", "14,3", "14,2", "8,11", "9,1", {"w":2},"2,12", "9,0", "8,10", "8,8", "14,6", "14,7", "6,5", {"w":1.5},"14,4", {"x":0.5},"5,0", "5,1", "4,15",{"x":0.5, "w":2},"6,2", "6,3", "5,8", {"x":0.5},"7,14", "7,11" ]
]
}
}
● QMKのハマりどころ NO_ACTION_TAPPINGを有効にするとレイヤー切り替えの MO(n)が使えなくなります
NO_ACTION_TAPPINGを有効にするとレイヤー切り替えの MO(n)が使えなくなります。
NO_ACTION_TAPPING disables layers #5735
●自前で MO(n)を実装する方法 その1
切り替え専用のキー定義を追加する。(例えば右側の Winキーに定義する)
欠点:何かキーを潰す必要が有る。
enum my_keycodes {
MO_LAYER1 = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_via( ..., MO_LAYER1, ... )
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
...
// Momentary layer switching MO(1)
if (keycode == MO_LAYER1) {
if (record->event.pressed) {
layer_on(1);
} else {
layer_clear();
}
}
...
return true;
}
●自前で MO(n)を実装する方法 その2(その1の改善案)
右側の Winキーと Menuキーを使用する。
Winキーを押した状態で Menuキーを押すと、Winキーを押している間だけレイヤー1に切り替わる。
利点:Winキーと Menuキーを単独で使用する場合は通常通りに使用可能。
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_via( ..., KC_RGUI, KC_APP, ... ),
[_FN1] = LAYOUT_via( ..., ______, KC_NO, ... ),
};
bool isRGUI = false;
bool isLayer1 = false;
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
...
下記をベースにして必要に応じて改良して使用します。
// Momentary layer switching MO(1) with KC_RGUI and KC_APP
if (isRGUI) {
isRGUI = false;
if (keycode == KC_APP) {
if (record->event.pressed) {
isLayer1 = true;
layer_on(1);
}
return false;
} else {
register_code(KC_RGUI);
}
}
if (keycode == KC_RGUI) {
if (record->event.pressed) {
isRGUI = true;
return false;
} else {
if (isLayer1) {
isLayer1 = false;
layer_clear();
return false;
}
}
}
...
return true;
}
● QMKの MAX3421E USB HOSTモジュールをアップデートする方法
・2022/06/04
QMKファームウェアの USB_Host_Shield_2.0のバージョンを 1.1.0から 1.6.1にアップデートする方法
QMK firmware Update USB_Host_Shield_2.0 library version 1.1.0 to 1.6.1
● FREE WINGの QMKへのマージ履歴
FREE WINGの QMKへのマージ履歴
● VIAのマクロ送信時に各キー出力に WAITを入れる方法
VIAのマクロ定義のキーを送信する速度が速すぎて取りこぼしが発生する場合に DELAYを設定してキー送信毎に待ち時間を入れる事で取りこぼしの発生を抑えます。
Configuring QMK VIA
QMKの公式に Pull Requestを出しました。
Added Delay time to sending each Keys for VIA Macros function feature #16810
2022/07/12に qmk:developにマージされました!!
例: 100を指定で 100ms(1/10秒)の WAITを入れる。
config.h
#define VIA_MACRO_WAIT 100
dynamic_keymap.c
./quantum/dynamic_keymap.c
void dynamic_keymap_macro_send(uint8_t id) {
...
if (data[2] == 0) {
break;
}
}
send_string(data);
#ifdef VIA_MACRO_WAIT
wait_ms(VIA_MACRO_WAIT);
#endif
}
}
● Dynamic Macroの再生時の送信時に各キー出力に WAITを入れる方法
Dynamic Macroで定義したキーを送信する速度が速すぎて取りこぼしが発生する場合に DELAYを設定してキー送信毎に待ち時間を入れる事で取りこぼしの発生を抑えます。
QMKの公式に Pull Requestを出しました。
Added Wait time to sending each Keys for Dynamic Macros function #16800
2022/07/02に qmk:developにマージされました!!
例: 50を指定で 50ms(1/20秒)の WAITを入れる。
config.h
#define DYNAMIC_MACRO_DELAY 50
process_dynamic_macro.c
./quantum/process_keycode/process_dynamic_macro.c
void dynamic_macro_play(keyrecord_t *macro_buffer, keyrecord_t *macro_end, int8_t direction) {
dprintf("dynamic macro: slot %d playback\n", DYNAMIC_MACRO_CURRENT_SLOT());
layer_state_t saved_layer_state = layer_state;
clear_keyboard();
layer_clear();
while (macro_buffer != macro_end) {
process_record(macro_buffer);
macro_buffer += direction;
#ifdef DYNAMIC_MACRO_DELAY
wait_ms(DYNAMIC_MACRO_DELAY);
#endif
}
● VIAの定義内容をクリアする方法(ATmega32U4の EEPROMをクリアする方法)
$ cat reset.eep
:0100000000FF
:00000001FF
$ avrdude -p atmega32u4 -c avr109 -P /dev/ttyS9 -c avr109 -U eeprom:w:reset.eep:i
● QMK firmware USB to USB keyboard protocol converter
USB to USB keyboard protocol converter
これをビルドして Pro Microに書き込みます。
rules.mk
rules.mkの
DEFAULT_FOLDER = converter/usb_usb/hasu
を
DEFAULT_FOLDER = converter/usb_usb/pro_micro
に書き換える
qmk compile -kb converter/usb_usb -km default
● QMK firmware USB to USB keyboard protocol converter Customize Keymap
QMK Configurator
QMK Configuratorを使ってキーマップを編集して、ファームウェア(hexファイル)を生成できます。
●購入した Pro Micro 3.3V版は LilyPadUSBのファームウェアが入っていました
USB シリアル デバイス
USB\VID_1B4F&PID_9207&REV_0001
USB\VID_1B4F&PID_9207
USB シリアル デバイス
USB\VID_1B4F&PID_9208&MI_00
LilyPad USBはリセットボタンを 2回押しでファームウェア書き込みモードになります。
32U4 Firmware Note - Sparkfun
● QMK firmware USB to USB keyboard protocol converterのオリジナル記事
QMKではなく TMKを使用しています。
TMKでも ATMega32U4のプログラムサイズ 28KBの制限で制約事項が有ります。(ATMega32U4は 32KBだが 4KBは Boot Loaderで使用している)
Topic: TMK USB to USB keyboard converter
Pro Microを使った製作記事
● Pro Micro 16MHz +5V版 + MAX3421Eの製作例
Pro Micro 16MHz +5V版で MAX3421Eを使う場合は TXS0108E等の双方向レベルシフタを使う必要があります。
配線が面倒になるので +3.3V版の Pro Microを頑張って入手するのがオススメです。
Re: USB to USB keyboard converter build log(Pro Micro 3.3v with mini host shield)
Tags: [電子工作], [QMK]
●関連するコンテンツ(この記事を読んだ人は、次の記事も読んでいます)
【自由工作】市販のキーボードを無改造で VIA QMK化する Keyboard Quantizerを自作する【夏休み】
夏休みが明けたら 僕のキーボードが最強になって クラスのみんなから MMK 大作戦
BUFFALOの USB テンキーを Pro Microと QMKを使って VIAカスタマイズ キーボードに改造する方法
BUFFALO USB 10-Key keyboard BSTK100 modification by Pro Micro and QMK firmware VIA
QMK firmwareの開発環境を ラズパイや Windows WSLにセットアップする方法
ラズパイや Windows WSL環境でカスタマイズ キーボードのファームウェア QMK firmwareの開発環境を構築
QMK firmwareでプログラムのサイズを小さくするテクニック、ケチケチ プログラミングの方法
QMK firmware How to Reduce Program Size、Reducing QMK firmware size
QMK firmwareで I/Oピンが足りない場合にデコーダ、デマルチプレクサを使用して IOを拡張する解決方法
QMK firmware expand I/O for many matrix keyboard、How to use IO Expander Multiplexer / Demultiplexer / Decoder
QMK firmwareで I/Oピンが足りない場合に I2Cの GPIOエキスパンダを使用して IOを拡張する解決方法
QMK firmware expand I/O for many matrix keyboard、How to use I2C GPIO Expander PCF8574 and PCF8575
QMK firmwareで Audio機能を試してみる
QMK firmware test Audio function with Piezo buzzer
QMK firmwareで OLED機能で SSD1306を試してみる
QMK firmware test OLED Driver with SSD1306
QMK firmwareで Analog Stick機能で PSP2000用アナログ ジョイスティックを試してみる
QMK firmware test Analog Joystick function with PSP2000 Analog Stick
最新の QMK firmwareで new_keyboard.shのコマンドが動かなくなったのを修正する方法
QMK Bugfix Create New Keyboard new_keyboard.sh command No such file or directory Error
QMK firmwareの Githubを forkした自分のリモートに pushすると怒られて pushできない場合の対応方法
refusing to allow an OAuth App to create or update workflow `.github/workflows/api.yml` without `workflow` scope
中華製の格安なプログラマブル USBキーボードを買ってみた QMK VIAとは別物
中華製のプログラマブル USBキーボード KeyboardSetter.exe
社畜のキーボード「新入社員の同期」を購入してみた!! VIA、QMK、Remapでのカスタマイズに対応
キー内容が Remap等でカスタマイズ可能な社畜のキーボード「新入社員の同期」を 3500円で購入
[HOME]
|
[BACK]
リンクフリー(連絡不要、ただしトップページ以外は Web構成の変更で移動する場合があります)
Copyright (c)
2022 FREE WING,Y.Sakamoto
Powered by 猫屋敷工房 & HTML Generator
http://www.neko.ne.jp/~freewing/hardware/qmk_usb_converter_max3421e_host_shield/