1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M5stack M5CardPuter のキーボードを理解する

Last updated at Posted at 2025-09-22

はじめに

M5CardputerおよびM5stack Cardputer ADVのキーボードマトリックスをスキャンして、キーの押下を検出するArduinoプロジェクトです。回路図などを見て理解してしまえばそれほど難しいハードウェア構成ではないのですが、ちょっとしたテストを兼ねて作ったので、その詳細とともに公開します。

概要

このM5Cardputerシリーズのキーボードの物理的な構造を理解し、キーマトリックスのスキャン方法を学習することを目的としています。従来モデル(V1.1)とM5stack Cardputer ADVの両方に対応しており、それぞれ異なるハードウェア構成に適したキーボード制御を実装しています。

対応ハードウェア

M5Cardputer(V1.1)

  • 74HC138デコーダーを使用した8行×7列のキーマトリックス
  • 直接GPIO接続による制御

M5stack Cardputer ADV ⭐ NEW

  • TCA8418RTWRキーボードコントローラーを使用
  • I2C通信による制御
  • より安定したキーボード動作とFIFOバッファ機能

ハードウェア構成

従来モデル(V1.1)

  • 行制御: 74HC138デコーダーによる8行の制御
    • A0 (GPIO 8)
    • A1 (GPIO 9)
    • A2 (GPIO 11)
  • 列検出: 7つの列の直接GPIO接続
    • GPIO 3, 4, 5, 6, 7, 13, 15

ADVモデル

  • キーボードコントローラー: TCA8418RTWR
  • 通信方式: I2C
    • SDA (GPIO 8)
    • SCL (GPIO 9)
    • INT (GPIO 11)
  • I2Cアドレス: 0x34
  • キーマトリックス: 8行×10列(最大80キー対応)

使用デバイス

  • M5Stack CardPuter

機能

共通機能

  • キー押下の検出とシリアル出力
  • リアルタイムキー状態監視
  • 自動デバイス検出

従来モデル(V1.1)固有

  • 8×7キーマトリックスの全スキャン
  • チャタリング防止機能

ADVモデル固有

  • I2C通信によるキーボード制御
  • FIFOバッファによる確実なキーイベント処理
  • ハードウェアレベルでのデバウンス機能

技術的詳細

従来モデル(V1.1)のキーマトリックススキャン

  1. 74HC138デコーダーを使用して8行を順次選択
  2. 選択された行をLOWレベルにアクティブ化
  3. 7つの列をプルアップ抵抗でHIGHに保持
  4. キーが押されると、アクティブな行と列が接続されて列がLOWになる
  5. この変化を検出してキー押下を判定

74HC138には3ビットのGPIOが接続されています。これにより、8パターンの選択が可能です。0x00~0x07と考えるとよいでしょう。これが8行に相当します。

ADVモデルのTCA8418制御

  1. I2C通信でTCA8418RTWRを初期化
  2. キーパッドマトリックス用のGPIOピンを設定
  3. キーイベント割り込みを有効化
  4. FIFOバッファからキーイベントを読み取り
  5. キーIDと押下/リリース状態を解析

TCA8418RTWRは専用のキーボードコントローラーで、以下の利点があります:

  • ハードウェアレベルでのデバウンス処理
  • FIFOバッファによるキーイベントの確実な保存
  • 最大80キーまでの対応
  • 低消費電力設計

M5CardPuterの実際のキーマトリックス(従来モデル)

M5CardPuterは、14列4行のキーボードを持っています。これを、7列8行にマッピングしています。物理配置とGPIO接続上の配置が直感的ではないのですが、下の表のように接続されています。

行/列 0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 R7C5 R3C5 R7C6 R3C6 R7C0 R3C0 R7C1 R3C1 R7C2 R3C2 R7C3 R3C3 R7C4 R3C4
1 R6C5 R2C5 R6C6 R2C6 R6C0 R2C0 R6C1 R2C1 R6C2 R2C2 R6C3 R2C3 R6C4 R2C4
2 R5C5 R1C5 R5C6 R1C6 R5C0 R1C0 R5C1 R1C1 R5C2 R1C2 R5C3 R1C3 R5C4 R1C4
3 R4C5 R0C5 R4C6 R0C6 R4C0 R0C0 R4C1 R0C1 R4C2 R0C2 R4C3 R0C3 R4C4 R0C4

M5Cardputer ADVキーデータ

M5CardPuter ADVは、14列4行のキーボードを持っています。これを、7列8行にマッピングしています。REG_KEY_EVENT_Aから読み取った値は10進数で、一桁目がCOLで二桁めがROWとなります。15はR1C5となります。

ソースコード

M5CardPuter Key sample

参考資料

追記

このドキュメントは、初期調査とサンプルコードの生成をGemini2.5 Proで行い、コードの作成をClaude Sonnet 4に手伝ってもらいました。

連絡先など

間違い・改善提案などありましたら、プルリクエストをくださるかご連絡くださると嬉しいです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?