├── .gitignore
├── README.md
├── images
├── 0.png
├── 1.png
└── 2.jpg
├── main.ino
└── secret.h.example
/.gitignore:
--------------------------------------------------------------------------------
1 | # VSCode settings
2 | .vscode/
3 |
4 | # Arduino build output
5 | *.ino.*
6 | *.elf
7 | *.eeprom
8 | *.hex
9 | *.bin
10 | *.o
11 | *.a
12 | *.d
13 |
14 | # MacOS system files
15 | .DS_Store
16 |
17 | # Windows system files
18 | Thumbs.db
19 |
20 | # Linux system files
21 | *.swp
22 |
23 | # tools
24 | image2cpp.py
25 | wav2cpp.py
26 |
27 | # build
28 | build/
29 | dist/
30 |
31 | # assets
32 | *.mp3
33 | *.mp4
34 | *.wav
35 | *.png
36 | *.jpeg
37 | !/images/*
38 |
39 | # password類の設定
40 | secret.h
41 |
42 | # local lib path
43 | # なぜかarduinoIDEでパスを通してもビルドが通らないのでローカルにライブラリを設置
44 | src/
45 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # IntercomNotificator
2 |
3 |
4 |
5 |
6 | M5StickCを使って、インターホンをネット経由で通知するプログラム
7 |
8 | スイッチが押されると、Discordに通知が送信され、誰かがインターホンを鳴らしたことを知らせます
9 |
10 | > **追記**
11 |
12 | Twitterで大好評だったので、使い方を詳しく書きました
13 | https://x.com/kuwamain/status/1888183724388622832/
14 |
15 | ## 必要なもの
16 | - **M5StickC or ESP32**: 小型のESP32開発ボード
17 | - **Wi-Fi接続情報**: プログラムをWi-Fiに接続するためのSSIDとパスワード
18 | - **Discord Webhook URL**: 通知を送信するためのDiscord Webhook URL
19 |
20 | ## 作り方
21 | ### 必要なライブラリのインストール
22 | - M5StickCのライブラリ
23 | - ESP32のライブラリ
24 |
25 | `WiFi.h`も`HTTPClient.h`も、ESP32のライブラリの中に入っています
26 |
27 | Arduino IDE等でインストールしてパスを通しておきましょう
28 |
29 | ### secret.h
30 | `secret.h.example`をコピーして、`secret.h`を作成してください
31 |
32 | 中にWI-FI設定とDiscordのWebhookの設定を書き込んでください
33 |
34 | ### 設置
35 | まずはインターホンの説明書をよく読みましょう
36 |
37 | 運がよくインターホンが押されたときにONになる A接点出力 なんてものがあれば、そこに設定した入力PINとグランドを接続するだけで使えます
38 |
39 |
--------------------------------------------------------------------------------
/images/0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuwacom/Intercom-Notificator/e29ca8bf27ba699d52bfb1c21459fb5f0db14c94/images/0.png
--------------------------------------------------------------------------------
/images/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuwacom/Intercom-Notificator/e29ca8bf27ba699d52bfb1c21459fb5f0db14c94/images/1.png
--------------------------------------------------------------------------------
/images/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuwacom/Intercom-Notificator/e29ca8bf27ba699d52bfb1c21459fb5f0db14c94/images/2.jpg
--------------------------------------------------------------------------------
/main.ino:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
5 | #include "secret.h"
6 |
7 | // WiFi 設定
8 | const char *ssid = WIFI_SSID;
9 | const char *password = WIFI_PASSWORD;
10 |
11 | // Discoed WEBHook
12 | const char *discordWebhookUrl = DISCORD_WEBHOOK_URL;
13 |
14 | // スイッチのピン
15 | // G26とかG36でもいいかも
16 | // グランドと繋ぐ
17 | #define SWITCH_PIN 32
18 |
19 | void setup()
20 | {
21 | M5.begin(); // M5StickC の初期化
22 | pinMode(SWITCH_PIN, INPUT_PULLUP); // スイッチピンをプルアップモードで設定
23 |
24 | M5.Lcd.setRotation(3);
25 | M5.Lcd.setTextFont(2);
26 | M5.Lcd.setTextSize(1);
27 | M5.Lcd.setCursor(0, 0);
28 |
29 | // Wi-Fi 接続
30 | WiFi.begin(ssid, password);
31 | M5.Lcd.print("Connecting to WiFi...");
32 | while (WiFi.status() != WL_CONNECTED)
33 | {
34 | delay(500);
35 | M5.Lcd.print(".");
36 | }
37 | M5.Lcd.setTextColor(GREEN, BLACK);
38 | M5.Lcd.println("\nWiFi Connected!!");
39 | M5.Lcd.println(WiFi.localIP()); // IPアドレスを表示
40 |
41 | delay(2000);
42 | waitingMessage();
43 | }
44 |
45 | void loop()
46 | {
47 | static bool lastSwitchState = HIGH; // スイッチの状態を記録
48 | bool switchState = digitalRead(SWITCH_PIN); // スイッチの現在の状態を取得
49 |
50 | // スイッチが押された瞬間
51 | if (switchState == LOW && lastSwitchState == HIGH)
52 | {
53 | M5.Lcd.fillScreen(GREEN); // 画面リセット
54 | M5.Lcd.setCursor(0, 0);
55 |
56 | M5.Lcd.setTextSize(2);
57 | M5.Lcd.setTextColor(RED, BLACK);
58 | M5.Lcd.println("Wellcome");
59 |
60 | M5.Lcd.setTextSize(1);
61 | M5.Lcd.setTextColor(WHITE, BLACK);
62 | M5.Lcd.println("Sending Message...");
63 |
64 | // Discord にメッセージ送信
65 | sendDiscordMessage("<@664814874328563712>\\n🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔\\n🔔 誰かがインターホンを鳴らしています! 🔔\\n🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔🔔");
66 | }
67 | else if (switchState == HIGH && lastSwitchState == LOW)
68 | {
69 | waitingMessage();
70 | }
71 | lastSwitchState = switchState; // 前回のスイッチ状態を更新
72 |
73 | delay(100); // チャタリング防止
74 | }
75 |
76 | void waitingMessage()
77 | {
78 | M5.Lcd.fillScreen(BLACK); // 画面をクリア
79 | M5.Lcd.setTextSize(2);
80 | M5.Lcd.setCursor(0, 20);
81 | M5.Lcd.setTextColor(YELLOW, BLACK);
82 | M5.Lcd.println("Waiting...");
83 | }
84 |
85 | void sendDiscordMessage(String message)
86 | {
87 | if (WiFi.status() == WL_CONNECTED)
88 | {
89 | HTTPClient http;
90 | // Webhook URL に接続
91 | http.begin(discordWebhookUrl);
92 | http.addHeader("Content-Type", "application/json");
93 |
94 | // Discord に送るメッセージのフォーマット
95 | String payload = "{\"content\":\"" + message + "\"}";
96 | // HTTP POST リクエスト
97 | int httpResponseCode = http.POST(payload);
98 |
99 | M5.Lcd.setTextColor(WHITE, BLACK);
100 | if (httpResponseCode > 0)
101 | {
102 | M5.Lcd.println("Message Sent!");
103 | M5.Lcd.print("HTTP Code: ");
104 | M5.Lcd.println(httpResponseCode);
105 | }
106 | else
107 | {
108 | M5.Lcd.println("Failed to send message");
109 | M5.Lcd.print("HTTP Code: ");
110 | M5.Lcd.println(httpResponseCode);
111 | }
112 | http.end(); // 接続終了
113 | }
114 | else
115 | {
116 | M5.Lcd.println("WiFi Not Connected!");
117 | }
118 | }
--------------------------------------------------------------------------------
/secret.h.example:
--------------------------------------------------------------------------------
1 | #define WIFI_SSID "YOUR_WIFI_SSID"
2 | #define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
3 | #define DISCORD_WEBHOOK_URL "YOUR_DISCORD_WEBHOOK_URL"
--------------------------------------------------------------------------------