├── .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" --------------------------------------------------------------------------------