M5Stack(Core2)でQRコード読み取りする手順

2025/12/12

M5Stack Core2とM5Stack用QRコードスキャナーユニット(STM32F030)を用いてQRコードスキャナーを実装する手順を紹介します。

目次

ハードウェア手順

ソフトウェア設定(手順)

    Arduino IDE を使って開発します。Arduino IDE開発環境が整っていない方はArduino IDE インストールで検索し、インストールを完了させてください。

  1. まず、GitHubからZIPファイルをダウンロードします。
    M5Stack/M5Core2 をGitHub内で検索して、GitHub → M5Stack/M5Core2 → <>Code → Download ZIPでダウンロードしてください。

  2. Arduino IDE を起動し、開発画面上部のSketch → Include Library → Add .ZIP Libraryからダウンロードした.zipファイルを選択してください。

  3. 開発画面上部のFile → Preferences → Additional boards manager URLs で 右側のボタンを押して、以下の内容にしてください。

    https://espressif.github.io/arduino-esp32/package_esp32_index.json
    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    https://static-cdn.m5stack.com/resource/arduino/package_m5stack_index.json
  4. 開発画面右側の Library Manager で

    1. esp32 by Espressif Systems最新版
    2. Arduino AVR Boards by Arduino最新版
    3. M5stack by M5Stack officialver 3.2.4
    をインストールしてください。検索バーを活用すると見つけやすいです。

  5. 開発画面右側の Boards Manager で

    1. M5GFX by M5Stack最新版
    2. M5Unified by M5Stack最新版
    をインストールしてください。検索バーを活用すると見つけやすいです。

  6. Tools → Board → esp32 → M5Core2 を選択。

  7. Tools → Port でM5Stackが接続されたポートを選択。PCとM5Stackの接続を切ったり、つないだりして対応するポートを確認してください。

サンプルコード

こちら のサンプルコードをCore2用に修正したコードです。

/*
 * SPDX-FileCopyrightText: 2024 M5Stack Technology CO LTD
 *
 * SPDX-License-Identifier: MIT
 */

/**
 * @file i2c_mode.ino
 * @brief Unit QRCode I2C Mode Example
 * @version 0.2
 * @date 2024-06-19
 *
 *
 * @Hardwares: M5Core + Unit QRCode
 * @Platform Version: Arduino M5Stack Board Manager v2.1.0
 * @Dependent Library:
 * M5Unified: https://github.com/m5stack/M5Unified
 * M5GFX: https://github.com/m5stack/M5GFX
 * M5UnitQRCode: https://github.com/m5stack/M5Unit-QRCode
 */

#include 
#include 
#include "M5UnitQRCode.h"

M5Canvas canvas(&M5.Display);

M5UnitQRCodeI2C qrcode;

#define I2C_AUTO_SCAN_MODE

void setup() {
    M5.begin();

    canvas.setColorDepth(1);  // mono color
    canvas.createSprite(M5.Display.width(), M5.Display.height());
    canvas.setTextSize((float)canvas.width() / 160);
    canvas.setTextScroll(true);

    while (!qrcode.begin(&Wire, UNIT_QRCODE_ADDR, 32, 33, 100000U)) {
        canvas.println("Unit QRCode I2C Init Fail");
        Serial.println("Unit QRCode I2C Init Fail");
        canvas.pushSprite(0, 0);
        delay(1000);
    }

    canvas.println("Unit QRCode I2C Init Success");
    Serial.println("Unit QRCode I2C Init Success");
#ifdef I2C_AUTO_SCAN_MODE
    canvas.println("Auto Scan Mode");
    canvas.pushSprite(0, 0);
    qrcode.setTriggerMode(AUTO_SCAN_MODE);
#else
    canvas.println("Manual Scan Mode");
    canvas.pushSprite(0, 0);
    qrcode.setTriggerMode(MANUAL_SCAN_MODE);
#endif
}

void loop() {
    if (qrcode.getDecodeReadyStatus() == 1) {
        uint8_t buffer[512] = {0};
        uint16_t length     = qrcode.getDecodeLength();
        Serial.printf("len:%d\r\n", length);
        qrcode.getDecodeData(buffer, length);
        Serial.printf("decode data:");
        for (int i = 0; i < length; i++) {
            Serial.printf("%c", buffer[i]);
            canvas.printf("%c", buffer[i]);
        }
        Serial.println();
        canvas.println();
        canvas.pushSprite(0, 0);
    }
#ifndef I2C_AUTO_SCAN_MODE
    M5.update();
    if (M5.BtnA.wasPressed()) {
        // start scan
        qrcode.setDecodeTrigger(1);
    }
    if (M5.BtnB.wasPressed()) {
        // stop scan
        qrcode.setDecodeTrigger(0);
    }
#endif
} 
        

アップロード・実行

参考

    M5Stack用QRコードスキャナーユニット(STM32F030)

(関戸)