😊

AtomS3でAtomic QRcode2 Baseを使用する

2025/01/19に公開

AtomS3でAtomic QRcode2 Baseを使用しようとしたらめちゃくちゃハマってしまったので共有します。

https://docs.m5stack.com/en/core/AtomS3

https://docs.m5stack.com/en/atom/Atomic QRCode2 Base

まずはdocument上exampleですが、QRcode Unitのexampleであり、atomic QRcode2 Baseのexampleであり、これでは動きません。

これが初学者泣かせでした。
こういうのは辞めてほしいですよね・・。

このポストで気づけました。感謝すべきは先人です。

ということでサンプルコードはこちら。今回はGeminiが書いてくれました。
AI様々です。

sketch.ino
#include "M5AtomS3.h"

#define TRIG 7
#define LED 8

void setup() {
  Serial.begin(115200);
  AtomS3.begin(true);

  Serial2.begin(115200, SERIAL_8N1, 5, 6); // RX:G6 TX:G5
  pinMode(TRIG, OUTPUT);
  pinMode(LED, INPUT);
  digitalWrite(TRIG, HIGH);

  Serial.println("Starting Serial work!");
  delay(100);

  // 初期画面をピンクに設定
  AtomS3.Display.fillScreen(TFT_PINK);
  AtomS3.Display.setTextColor(TFT_WHITE);
  AtomS3.Display.setTextSize(3);
  AtomS3.Display.setCursor(15, 10);
  AtomS3.Display.println("READY");
}

void loop() {
  AtomS3.update();

  if (digitalRead(39) == LOW) {
    digitalWrite(TRIG, LOW);
  } else {
    digitalWrite(TRIG, HIGH);
  }

  if (digitalRead(LED) == HIGH) {
    // Serial.println("LED is HIGH"); // LEDの状態を確認

    String qrCodeData = "";
    while (Serial2.available() > 0) {
      char ch = Serial2.read();
      qrCodeData += ch;

      Serial.print(ch); // 読み込んだ文字を確認

      if (ch == '\n') {
        break;
      }

      delay(10); // 処理に余裕を持たせる
    }

    if (qrCodeData.length() > 0) {
      Serial.println("QR Code Data: " + qrCodeData); // QRコードデータを確認

      // QRコード読み込み成功時の処理
      AtomS3.Display.fillScreen(TFT_GREENYELLOW);
      AtomS3.Display.setTextColor(TFT_BLACK);
      AtomS3.Display.setTextSize(3);
      AtomS3.Display.setCursor(20, 10);
      AtomS3.Display.println("OK!");
      delay(2000);

      // 初期画面に戻す
      AtomS3.Display.fillScreen(TFT_PINK);
      AtomS3.Display.setTextColor(TFT_WHITE);
      AtomS3.Display.setTextSize(3);
      AtomS3.Display.setCursor(15, 10);
      AtomS3.Display.println("READY");
    }
  } else {
    Serial.println("LED is LOW"); // LEDの状態を確認
  }
  delay(200);
}

最後に

本当はPlatformIOとCursorで開発したかったのですが、開発環境やライブラリのバージョンなど沼要素が非常に多く、とても開発がしづらく感じました。
普段はpnpm + umijsなどでサクッと開発に集中できるため、久しぶりに骨が折れました。
しかし作った後は「確実に動く」「電源の抜き差しで再起動」「再起動はすごく早い」
ため、作った後の信頼度はArduinoのほうが安定していると思います。

Discussion