2025/12/12
M5Stack Core2とM5Stack用QRコードスキャナーユニット(STM32F030)を用いてQRコードスキャナーを実装する手順を紹介します。
I2Cで利用します
上記2つとPCを接続します。ケーブルはM5Stack Core2に付属したあるものを使いました。
Arduino IDE を使って開発します。Arduino IDE開発環境が整っていない方はArduino IDE インストールで検索し、インストールを完了させてください。
まず、GitHubからZIPファイルをダウンロードします。
M5Stack/M5Core2 をGitHub内で検索して、GitHub → M5Stack/M5Core2 → <>Code → Download ZIPでダウンロードしてください。
Arduino IDE を起動し、開発画面上部のSketch → Include Library → Add .ZIP Libraryからダウンロードした.zipファイルを選択してください。
開発画面上部の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
開発画面右側の Library Manager で
esp32 by Espressif Systems最新版Arduino AVR Boards by Arduino最新版M5stack by M5Stack officialver 3.2.4開発画面右側の Boards Manager で
M5GFX by M5Stack最新版M5Unified by M5Stack最新版Tools → Board → esp32 → M5Core2 を選択。
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 }
開発画面の"→"ボタンを押すことでアップロードできます。
問題なく実行できていれば、下のように出力されます。
スキャナーユニットのカメラでQRコードを読み取ることができるようになりました。上のQRコードを読み取ることで200と出力されるはずです。
(関戸)