4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初めてのIoT - ボタン1つでSlackに出退勤打刻(M5StickC Plus2)

Last updated at Posted at 2025-12-16

はじめに

私は普段IoTやハードウェアは全く触ったことがありません。
ただ、とあるきっかけで、知人より M5StickC Plus2 を頂きました。

M5StickC Plus2 M5StickC Plus2

初めて見た時は「なんだこの長細いの…?」という感じでしたが、これがWi-Fi/Bluetooth内蔵のマイコンで、いろいろ作れるらしい。
せっかくなので勉強がてら何か作ってみることに 🏃

何を作る?

「ボタンがあるなら、押したら何か起きるものを作りたい‼️

ということで思いついたのが、Slackに出退勤を投稿するボタンです。
毎日の「出勤します」「退勤します」の投稿が、ボタン1つで完了します。

全体像

mermaid-diagram-1765875998864.png

この記事で作るもの

  • Aボタン(正面) → 出勤メッセージ
  • Bボタン(側面) → 退勤メッセージ

対象読者

  • Arduino / ESP32 初心者 / 「物理ボタン × Slack」を試してみたい人
  • IoTに興味があるエンジニア

必要なもの

ハードウェア

品名 備考
M5StickC Plus2 Amazonやスイッチサイエンスで購入可
USB-Cケーブル データ転送対応のもの

ESP32とは?
Wi-Fi/Bluetooth内蔵の小型マイコン。Arduino IDEで開発でき、IoTデバイスによく使われています。M5StickC Plus2はESP32を搭載した製品です。

ソフトウェア

ネットワーク

  • 2.4GHz Wi-Fi(必須)

⚠️ ESP32は 5GHz Wi-Fiに非対応 です。2.4GHz帯のSSIDを使用してください。


手順

1. Slack Incoming Webhook を作成

Slackにメッセージを送るための「Webhook URL」を取得します。

  1. Slack API にアクセス
  2. Create New AppFrom scratch
  3. App名(例:出退勤ボタン)とワークスペースを選択 → Create App
  4. 左メニュー → Incoming WebhooksOn に切り替え
  5. Add New Webhook to Workspace → 投稿先チャンネル選択 → 許可
  6. 表示された Webhook URL をコピー
https://hooks.slack.com/services/<WorkspaceID>/<AppID>/<Secret>

⚠️ Webhook URLは絶対に公開しない! これが漏れると誰でも投稿できてしまいます。


2. SlackユーザーIDを確認

メッセージにメンションを付けるため、自分のユーザーIDを確認します。

  1. Slackで自分のプロフィールを開く
  2. ︙(その他)メンバーIDをコピー
SlackユーザーID

U0123456789 のような形式のIDが取得できます。


3. Arduino IDE セットアップ

M5Stickにプログラムを書き込むには Arduino IDE というものを使うらしい?🧐
調べてみると、マイコン開発の定番ツールのようで無料で使えます。

  1. Arduino IDE 2.x をダウンロード・インストール
Arduino IDE

ESP32ボードを追加

Arduino IDEを開いたら、M5Stick(ESP32)を認識させるための設定をします。

  1. Settings(Preferences) を開く

  2. Additional boards manager URLs に以下を追加:

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    
  3. Boards Manager を開き、esp32 を検索 → Install

M5StickCPlus2ライブラリをインストール

  1. ToolsManage Libraries...
  2. M5StickCPlus2 を検索 → Install

4. コードのポイント

完成コードはGitHubで公開していますが、ポイントを解説します。

4-1. Slackへの送信

Webhook URLにJSON形式でPOSTするだけ。これだけでSlackに投稿できます。

HTTPClient http;
http.begin(SLACK_WEBHOOK_URL);
http.addHeader("Content-Type", "application/json");

String payload = "{\"text\":\"出勤しました\"}";
int code = http.POST(payload);

4-2. ボタン検知

M5StickCPlus2ライブラリのおかげで、ボタン検知も簡単です。

M5.update();  // ボタン状態を更新

if (M5.BtnA.wasPressed()) {
  // Aボタンが押された → 出勤処理
}
if (M5.BtnB.wasPressed()) {
  // Bボタンが押された → 退勤処理
}

4-3. NTPで時刻取得

インターネット経由で正確な時刻を取得。日本時間(UTC+9)に設定しています。

configTime(9 * 3600, 0, "ntp.nict.jp");  // JST設定

struct tm timeinfo;
getLocalTime(&timeinfo);  // 現在時刻を取得

👉 完成コード: GitHub - m5stick-slack-attendance


4-4. config.h を作成して秘匿化

attendance_button/config.example.h をコピーして config.h を作成:

cp attendance_button/config.example.h attendance_button/config.h

config.h を編集:

#pragma once

// Wi-Fi(2.4GHzのみ対応)
#define WIFI_SSID "YOUR_WIFI_SSID"
#define WIFI_PASS "YOUR_WIFI_PASSWORD"

// Slack Incoming Webhook URL(絶対に公開しない)
#define SLACK_WEBHOOK_URL "https://hooks.slack.com/services/XXX/YYY/ZZZ"

// SlackユーザーID(プロフィールからコピー)
#define SLACK_USER_ID "U0123456789"

5. 書き込み

  1. Arduino IDEで attendance_button/attendance_button.ino を開く
  2. M5StickをUSBで接続
  3. Tools メニューで設定:
    • Board: ESP32 Dev Module
    • Port: 接続したシリアルポート
    • Upload Speed: 115200(重要!)
  4. Upload(→ボタン)で書き込み

ハマりポイント

1. Wi-Fiに繋がらない

ESP32は2.4GHzのみ対応です。5GHz Wi-Fiには接続できません。

ルーターの設定で2.4GHzと5GHzのSSIDが分かれているか確認してください。

2. Upload時にエラーが出る

Failed uploading: uploading error: exit status 2

Upload Speed を 115200 に下げてください。

ToolsUpload Speed115200

3. Slackに届かない

  • Webhook URLが正しいか確認
  • URLの前後に空白や改行が入っていないか確認
  • Serial Monitorでログを確認(ToolsSerial Monitor、115200 baud)

動作確認

無事に書き込みが完了したら、動作確認です!

起動時の流れ

  1. Wi-Fi接続中 → WiFi Connecting...
  2. 接続成功 → WiFi Connected!
  3. 時刻同期 → Time Syncing...
  4. Slack送信 → Slack Sending...
  5. 待機状態 → Ready!

起動後の画面

Ready画面

起動すると Ready! と表示され、ボタンの説明が出ます。

動作デモ

動作デモ

Slackに届くメッセージ

Slackメッセージ

ボタンを押すたびに、時刻付きでSlackに投稿されます。

M5Stickの画面

M5Stick画面デモ

状態 表示
待機中 Ready! + ボタン説明
送信中 Sending...(黄色)
成功 Sent!(緑)
失敗 Failed!(赤)

ボタンを押すとSlackにメッセージが届きます。
動いて嬉しい!🎉

まとめ

初めてIoTを触ってみましたが、思ったより簡単に動くものが作れて楽しかったです!
正直、最初は「ハードウェアって難しそう...」と思っていましたが、Arduino IDEのおかげで馴染みやすい開発体験でした。
C++も基本的な書き方だけで十分動きます。

「ボタンを押したらSlackに投稿される」というシンプルなものですが、実際に動くと結構感動します。
IoTに興味はあるけど何から始めればいいか分からない...という方は、ぜひ試してみてください!

ソースコードは以下で公開しています:

👉 GitHub: m5stick-slack-attendance


参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?