Intern

M5Stack Coreでボタンを押すとメールが届くシステムを作ってみた

参考にしたのは、こちらの記事です:
🔗 M5Stack Core2 / S3 の GPIO を使ってメールを送ってみた(smartlight.co.jp)

ただ、この記事ではArduino IDEで書かれていますが、今回はVSCode + PlatformIOでやってみました。

やりたいこと

  • M5Stack Core2を使って、ボタンAを押すとランダムな数値を生成
  • その値をメールに載せて送信
  • Gmailのアプリパスワードを使って送信認証
  • Wi-Fi経由でインターネットに接続して動作

使ったもの

  • M5Stack Core2(無印のCore ESP32でもOK)
  • VSCode + PlatformIO
  • Gmail(アプリパスワード使用)
  • EMailSenderライブラリ
  • M5Stackライブラリ

VSCode + PlatformIOの準備

まずは開発環境の準備から。PlatformIOはVSCodeでArduino系の開発を行うための拡張機能です。

  1. VSCodeに「PlatformIO IDE」拡張をインストール
  2. 新規プロジェクトを作成(Boardは m5stack-core-esp32 を選択)
  3. platformio.ini は以下のようにしました:
<code>[env:m5stack-core-esp32]
platform = espressif32
board = m5stack-core-esp32
framework = arduino
upload_speed = 115200
monitor_speed = 115200</code>
Code language: HTML, XML (xml)

必要なライブラリの導入

今回は2つのライブラリを使いました:

M5Stack(公式ライブラリ)
🔗 https://github.com/m5stack/M5Stack

EMailSender(SMTPでメール送信できる便利ライブラリ)
🔗 https://github.com/xreef/EMailSender

lib/ フォルダの中にそれぞれのフォルダを置き、中に src/ フォルダを作ってその中に .h .cpp をを入れる構成にしました。入れる構成にしました。
を入れる構成にしました。



lib/
├── M5Stack/
│ └── src/
│ └── M5Stack.h など
├── EMailSender/
│ └── src/
│ └── EMailSender.h / .cpp など

Gmailのアプリパスワードの設定

普通のGmailパスワードでは弾かれてしまうため、「アプリパスワード」という16桁の専用パスワードを発行する必要があります。

  1. Googleアカウントにログイン
  2. 「セキュリティ」→「2段階認証プロセス」を有効化
  3. 「アプリパスワード」メニューからトークンを発行(例:Mail/ESP32など)

→ これをメール送信の際の「パスワード」として使います。

実際に書いたコード

以下が、今回PlatformIOで動作させたコードです。

<code>#include <M5Stack.h>
#include <WiFi.h>
#include <EMailSender.h>

char ssid[]       = "あなたのSSID";
char password[]   = "あなたのWi-Fiパスワード";

char myMailAdr[]  = "送信元Gmailアドレス";
char myMailPass[] = "アプリパスワード";
char toMailAdr[]  = "受信先メールアドレス";

EMailSender emailSend(myMailAdr, myMailPass);

boolean send_mail(String msg) {
  EMailSender::EMailMessage message;
  message.subject = "M5Stackからの通知";
  message.message = msg;
  EMailSender::Response resp = emailSend.send(toMailAdr, message);
  return resp.status;
}

void setup() {
  M5.begin();
  M5.Power.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void loop() {
  M5.update();
  if (M5.BtnA.wasPressed()) {
    int val = random(100, 1000);
    String msg = "ランダムな値は " + String(val) + " です。";
    send_mail(msg);
  }
}
</code>Code language: PHP (php)

実行してみた結果

まとめ

今回は、M5Stack Core2とVSCode + PlatformIOを使ってボタンを押すとメールが届くシステムを作ってみました。

Gmailの設定とライブラリの配置さえできれば思った以上にスムーズでした。

PlatformIOはコード補完やプロジェクト構成が明確で、今後も使っていきたいなと思える開発環境でした。

参考にしたもの