最終更新日
記事公開日

【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をコピー

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

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

関連情報