

本チュートリアルで使用するコントローラは Basic v2.7 で、Module13.2 QRCode と組み合わせて一次元 / 二次元コードの解析を行います。使用前に下図を参照し、ピンスイッチを指定位置に切り替えてください。
本サンプルはコントローラ Basic v2.7 と組み合わせ、G34 (RX) および G12 (TX) を通信ピンとして使用します。具体的なスイッチ設定は以下の図をご覧ください。 
本サンプルプログラムでは、Module13.2 QRCode をボタン制御スキャンモードに設定します。ボタン A をクリックすると UART 経由でスキャン開始 / 停止コマンドを送信します。ボタン B を押し続けると、モジュールの TRIG ピンを制御してスキャンを開始し、ボタン B を離すとスキャンを停止します。スキャンが成功すると、デコード結果がディスプレイに表示されます。 
/*
* SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
*
* SPDX-License-Identifier: MIT
*/
#include <Arduino.h>
#include <M5Unified.h>
#include <M5ModuleQRCode.h>
M5ModuleQRCode module_qrcode;
void setup()
{
M5.begin();
M5.Display.setFont(&fonts::efontCN_16);
M5.Display.setTextScroll(true);
/* Set module config */
auto cfg = module_qrcode.getConfig();
cfg.pin_tx = 12;
cfg.pin_rx = 34;
cfg.baudrate = 115200;
cfg.serial = &Serial1;
module_qrcode.setConfig(cfg);
/* Init module */
while (!module_qrcode.begin()) {
M5.Display.setTextColor(TFT_RED);
M5.Display.println(">> Init module failed, retry...");
delay(1000);
}
M5.Display.setTextColor(TFT_WHITE);
M5.Display.println(">> Init module success");
/* Set light mode */
M5.Display.println(">> Set lights mode");
module_qrcode.setFillLightMode(QRCodeM14::FILL_LIGHT_ON_DECODE);
module_qrcode.setPosLightMode(QRCodeM14::POS_LIGHT_ON_DECODE);
/* Set trigger mode */
M5.Display.println(">> Set trigger mode to continuous");
module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_CONTINUOUS);
module_qrcode.stopDecode();
M5.Display.println(">> Click BtnA to toggle scanning");
}
void loop()
{
M5.update();
static bool is_scanning = false;
/* If BtnA was clicked */
if (M5.BtnA.wasClicked()) {
is_scanning = !is_scanning;
if (is_scanning) {
module_qrcode.startDecode();
} else {
module_qrcode.stopDecode();
}
M5.Display.setTextColor(TFT_WHITE);
M5.Display.println(is_scanning ? ">> Start scanning..." : ">> Stop scanning");
}
/* Update module */
module_qrcode.update();
/* If scan result available */
if (module_qrcode.available()) {
auto result = module_qrcode.getScanResult();
/* Display result */
M5.Display.setTextColor(TFT_WHITE);
M5.Display.println(">> Get code:");
M5.Display.setTextColor(TFT_YELLOW);
M5.Display.println(result.c_str());
}
}モジュールは様々なスキャンのトリガーモードに対応しています。
enum TriggerMode_t {
TRIGGER_MODE_KEY = 0,
TRIGGER_MODE_CONTINUOUS = 1,
TRIGGER_MODE_AUTO = 2,
TRIGGER_MODE_PULSE = 4,
TRIGGER_MODE_MOTION_SENSING = 5
}; TRIGGER_MODE_KEY:TRIGGER_MODE_CONTINUOUS:TRIGGER_MODE_AUTO:TRIGGER_MODE_PULSE:TRIGGER_MODE_MOTION_SENSING:TRIGGER_MODE_AUTO 以外は、UART コマンドによるスキャン制御が可能です。2. モード設定はデバイスに書き込まれ、電源 OFF でも保存されます。setTriggerMode 関数でトリガーモードを設定できます:
module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_KEY);
// module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_CONTINUOUS);
// module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_AUTO);
// module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_PULSE);
// module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_MOTION_SENSING); Module13.2 QRCode は、以下 2 つの方法でスキャンを制御できます:
startDecode() 関数を呼び出し、UART 経由のコマンドでスキャンをトリガー(ソフトウェアトリガー)setTriggerLevel(false) 関数で TRIG ピンのレベルを制御(低レベル有効)startDecode 関数でスキャンを制御:
module_qrcode.startDecode();
delay(1000);
module_qrcode.stopDecode();
delay(1000); setTriggerLevel 関数でスキャンを制御:
module_qrcode.setTriggerLevel(false);
delay(1000);
module_qrcode.setTriggerLevel(true);
delay(1000); setFillLightMode() で補助ライトモードを設定します。列挙定義は以下の通りです:
enum FillLightMode_t {
FILL_LIGHT_OFF = 0, // 消灯
FILL_LIGHT_ON_DECODE = 2, // デコード時のみ点灯
FILL_LIGHT_ON = 3 // 常時点灯
}; FILL_LIGHT_OFF:FILL_LIGHT_ON_DECODE:FILL_LIGHT_ON:setFillLightMode 関数で設定:
module_qrcode.setFillLightMode(QRCodeM14::FILL_LIGHT_ON_DECODE);
// module_qrcode.setFillLightMode(QRCodeM14::FILL_LIGHT_ON);
// module_qrcode.setFillLightMode(QRCodeM14::FILL_LIGHT_OFF); setPosLightMode() でポジションライト(定位灯)のモードを設定します。列挙定義は以下の通りです:
enum PosLightMode_t {
POS_LIGHT_OFF = 0, // 消灯
POS_LIGHT_FLASH_ON_DECODE = 1, // デコード時点滅
POS_LIGHT_ON_DECODE = 2 // デコード時点灯
}; module_qrcode.setPosLightMode(QRCodeM14::POS_LIGHT_ON_DECODE);
// module_qrcode.setPosLightMode(QRCodeM14::POS_LIGHT_FLASH_ON_DECODE);
// module_qrcode.setPosLightMode(QRCodeM14::POS_LIGHT_OFF); POS_LIGHT_OFF:POS_LIGHT_FLASH_ON_DECODE:POS_LIGHT_ON_DECODE:Module13.2 QRCode は複数の USB 動作モードに対応しており、USB-CDC シリアル、USB-HID キーボード、USB-HID POS デバイス機能をサポートします。
使用前に、基板上のインターフェーススイッチを USB 側に切り替えてください。この操作により、内蔵モジュールの USB ピン (USB_D+、USB_D-) が PORT.C インターフェースに接続されます。その後、Grove to USBC 変換アダプタで PORT.C を PC に接続してください。下記サンプルプログラムに従い、必要な USB 動作モードを設定できます。

下記サンプルを参考に setModeUsbSerial() 関数を呼び出して USB-CDC モードへ設定します。PC と接続すると仮想シリアルポートが有効になり、ターミナルやシリアルモニタから該当 COM ポートにアクセスできます。BtnA(A ボタン)長押しでスキャンを行い、成功するとその結果がターミナル表示されます。このモードでは UART コマンドも利用可能です。UART モードに戻す場合、「HEX 値:21 42 40 00」を送信します。モジュール側で一瞬点滅すれば UART 切替成功です。以降 USB-CDC は無効となります。
#include <Arduino.h>
#include <M5Unified.h>
#include <M5ModuleQRCode.h>
M5ModuleQRCode module_qrcode;
void setup()
{
M5.begin();
/* Set module config */
auto cfg = module_qrcode.getConfig();
cfg.pin_tx = 12;
cfg.pin_rx = 34;
cfg.baudrate = 115200;
cfg.serial = &Serial1;
module_qrcode.setConfig(cfg);
/* Init module */
while (!module_qrcode.begin()) {
delay(1000);
}
module_qrcode.setFillLightMode(QRCodeM14::FILL_LIGHT_ON_DECODE);
module_qrcode.setPosLightMode(QRCodeM14::POS_LIGHT_ON_DECODE);
module_qrcode.setTriggerMode(QRCodeM14::TRIGGER_MODE_KEY);
module_qrcode.stopDecode();
module_qrcode.setModeUsbSerial();
M5.Display.setFont(&fonts::FreeMonoBoldOblique24pt7b);
M5.Display.println("Hold BtnA");
M5.Display.println("Start Scan");
}
void loop()
{
M5.update();
if (M5.BtnA.isPressed()) {
module_qrcode.setTriggerLevel(false);
} else {
module_qrcode.setTriggerLevel(true);
}
}setModeUsbKeyboard() 関数で USB-HID モードに切り替えます。デバイスは USB キーボードとして動作し、BtnA 長押しでスキャン、成功するとコード内容がキーボード入力として直接送信されます。
setModeUsbPos() 関数で USB-HID POS モードに設定できます。このモードでは、標準 POS スキャナデバイスとして動作し、対応プロトコルの PC アプリと連携します。現在提供されている上位アプリは Windows 専用で、他プラットフォーム向けはソースを参考に移植可能です。
上位アプリパッケージ内 examples\c\vs\Release\read-in-callback.exe を実行し、テスト QR コードをスキャンしてください。スキャン結果がウィンドウに表示されます。 
USB HID-POS 利用時、デバイスマネージャ上で下記のようなドライバエラーが発生する場合の対処法:
以下の手順で進めてください。


作業完了後、デバイスマネージャで下図のように「HID-compliant device」と表示されれば USB HID-POS が正常に動作します。 
「CodeBarConfigTool.exe」をダウンロードし起動してください。ツール画面例は下図の通りです。
以下は USB-CDC モードからシリアルモードへ変更する手順です:
最初に、下図①のアイコンをクリック、②で対応 USB ポートを選択し、③「接続」ボタンを押します。成功すると④がオンライン状態になります。 
次に、下図①をチェック、②をダブルクリック、③が表示されたらシリアル設定成功です。 
ツールの詳細説明はパッケージ内の CodeBarConfigTool.pdf を参照してください。