最終更新日
記事公開日

【ESP32】ボタンを押したらLINE通知

今回はESP32-DevKitCを使って、LINE通知を行うサンプルコードを紹介します。

「とりあえず、シンプルにESP32からLINEにメッセージを送りたい」

「ボタンやセンサーに反応して、LINEに通知させたい」

という方、ぜひ参考にしてみて下さい。

【ESP32】ボタンを押したらLINEで通知

ESP32は自宅のWi-Fiに接続しています。

ボタンを押すと、ESP32からLINEの公式API(LINE Notify)へコマンドを送信。

あらかじめ指定しておいたメッセージがLINEを通じてスマホに届きます。

送り先は「自分だけ」もしくは「LINEグループ」に設定可能です。

手順[目次]

トークン発行(LINE Notify登録)

LINE Notifyとは、外部のWEBサービスからLINEのメッセージを配信できるLINEの公式サービスです。

このLINE NotifyとESP32を組み合わせることで、自由にメッセージを送ることができます。

まずは「トークン」と呼ばれる認証キーを発行する必要があります。

LINE Notifyにログイン

LINE Notifyにパソコンでアクセスします。

画面右上の[ログイン]ボタンを押して下さい。

※スマホ用サイトではトークン発行ボタンが表示されません。どうしてもスマホからアクセスしたい場合は、ブラウザの設定を「PC版サイト」に切り替えてアクセスしてください。

LINE Notifyトップページ

メールアドレスとパスワードを入力し、[ログイン]ボタンを押してください。

今、使用している個人のLINEアカウントで大丈夫です。

あくまでLINE Notifyを利用するための手続きですので、個人のLINE情報に関わることはありません。

メールアドレスとパスワードを入力

[?]メールアドレスやパスワードが分からない場合

スマホでLINEを起動し、アカウント設定の内容を確認してください。

[ホーム]- 画面右上の[歯車アイコン]をクリック↓

画面右上の[歯車アイコン]

[アカウント]をクリック↓

アカウント

メールアドレス・パスワードが「未登録」となっている場合は、登録を行ってください↓

メールアドレスとパスワードの登録情報

「登録完了」となっている場合は、文字をクリックすると登録してあるメールアドレスが表示されます↓

登録済みのメールアドレス

パスワードは表示されませんので、パスワードの変更を行ってください↓

パスワードの変更

トークンの発行

無事にログインできたら、画面右上にLINEに登録した自分の名前が表示されます。

画面右上の名前をクリックし、[マイページ]をクリック↓

マイページ

アクセストークンの発行(開発者向け)の文字の下にある[トークンを発行する]ボタンをクリック↓

トークンを発行する

トークン名を入力します。

ここで決めた名前が、送信者としてメッセージと共に表示されます。

トークン名を入力

トークルームを選択します。

今回は、「児玉家」という家族みんなに通知するためのグループを用意しました。

トークルームを選択

[発行する]ボタンをクリック↓

[発行する]ボタンをクリック

トークンが発行されました。

このトークンをプログラム内に書き込んで下さい。

[閉じる]ボタンを押すと、連携中サービスのところに、にさきほど追加したトークン名が表示されていることを確認してください↓

連携中サービス

LINE Notifyをグループに招待する

最後に、グループの中にLINE Notifyを招待しておきます。

LINE Notifyをグループメンバーにしておかないと、LINE Notifyからグループにメッセージを送ることができません。

※ここからはスマホでLINEを起動して下さい。

[ホーム]-[グループ]-[グループ名]と進む↓

[ホーム]-[グループ]-[グループ名]

[人の形をしたアイコン]をクリック↓

[人の形をしたアイコン]をクリック

[友達を招待]をクリック↓

友達を招待

[LINE Notify]を選択し、画面右上の「招待」ボタンをクリック↓

[LINE Notify]を選択し、画面右上の「招待」ボタンをクリック

これで、グループメンバーにLINE Notifyが追加されました↓

LINE Notifyのグループメンバーへの追加が完了

実際には、こんな感じで通知が届きます↓

[お知らせbot]ピンポーン!

配線・回路図

配線・回路図
ESP32とLINE

プログラム

以下の変数は各自書き換えて下さい↓

  1. ssid
  2. password
  3. token
  4. message

#include <WiFi.h>
#include <WiFiClientSecure.h>

// WiFi設定
const char* ssid     = "your-ssid";
const char* password = "your-password";

// LINE Notify設定
const char* host = "notify-api.line.me";
const char* token = "your-token";
const char* message = "ピンポーン";

// スイッチに使用するPinの設定
int sw_pin = 34;

void setup()
{
    // スイッチPinを入力に設定
    pinMode(sw_pin,INPUT);

    // シリアルモニタの通信速度
    Serial.begin(115200);

    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    // WiFi接続
    WiFi.begin(ssid, password);

    // WiFiの接続状態を確認
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected.");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());
}

// line通知
void send_line() {

  // HTTPSへアクセス(SSL通信)するためのライブラリ
  WiFiClientSecure client;

  // サーバー証明書の検証を行わずに接続する場合に必要
  client.setInsecure();
  
  Serial.println("Try");
  
  //LineのAPIサーバにSSL接続(ポート443:https)
  if (!client.connect(host, 443)) {
    Serial.println("Connection failed");
    return;
  }
  Serial.println("Connected");

  // リクエスト送信
  String query = String("message=") + String(message);
  String request = String("") +
               "POST /api/notify HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Authorization: Bearer " + token + "\r\n" +
               "Content-Length: " + String(query.length()) +  "\r\n" + 
               "Content-Type: application/x-www-form-urlencoded\r\n\r\n" +
                query + "\r\n";
  client.print(request);
 
  // 受信完了まで待機 
  while (client.connected()) {
    String line = client.readStringUntil('\n');
    if (line == "\r") {
      break;
    }
  }
  
  String line = client.readStringUntil('\n');
  Serial.println(line);
}

// スイッチの変数宣言
int sw_val = 0;

void loop(){

  // スイッチの状態を読み取る
  sw_val = digitalRead(sw_pin);

  // スイッチがONのとき
  if (sw_val) {

    // Lineにリクエストを送信する
    send_line();
  }
  
}
この記事のURLをコピー

7 件のコメント

  • はじめまして。こちらと同じものを作成しました。利用方法がいろいろありそうです。
    ボタンを複数設置して、このボタンならこのメッセージといった使い方ができればと思っています。
    ご多忙中とは存じますが、公開等お願いしたいです。
    また、外出中でも届くようお願いしたいです。いろいろすみません。

    • 荻野真一
    • 2022年11月9日 9:37 PM
    • 荻野真一さんへの返信

      はじめまして。
      コメントありがとうございます。

      申し訳ありません。
      現在、なかなか時間に余裕がなく、ご希望にお答えすることができそうにありません。

      この記事をベースにすれば、難しい内容ではありませんので、ぜひチャレンジしてみてください。

      • 管理人
      • 2022年11月10日 8:06 AM
      • 管理人さんへの返信

        お世話になります。無理を言いました。お身体無理されずお過ごしください。頑張ってチャレンジしてみます。

        • 荻野真一
        • 2022年11月10日 3:46 PM
  • はじめまして。こちらはwifi接続でLINE通知のコードですが、Bluetooth接続でLINE通知のコードはどこを変更する必要がありますでしょうか。

    • 2023年1月11日 2:52 PM
    • あさんへの返信

      すみません、BT接続でのLINE通知については、やっていないので分かりません。
      また時間があるときに試してみますね。

      • 管理人
      • 2023年1月13日 5:49 PM
  • はじめまして。
    これボタンを長押したら通知が連続で飛びませんか??

    • こた
    • 2023年1月15日 4:26 PM
    • こたさんへの返信

      はじめまして。
      すみません、今はもう色々とカスタムしてしまって、このプログラムで確認できる状態の物はないのですが、あくまで最低限動かすためのサンプルとして見て頂けると助かります。

      • 管理人
      • 2023年1月15日 5:16 PM

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報

運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

カテゴリー