07_API_LINE

LINEへ通知を送る

Wi-Fiを使ってLINEへメッセージを送信します。

Wi-Fi通信
1

準備する

CherryIoTをPCに接続する

CherryIoTをPCのUSB-A挿入口に接続します。

Wi-Fiの情報を確認する

CherryIoTを接続する2.4GHz Wi-FiのSSID(ネットワーク名)とパスワードを確認します。Wi-Fiルーター本体のラベルや設定画面に記載されています。分からない場合は、ネットワークの管理者に確認してください。

LINEを準備する

LINE公式アカウントを作成する

LINE公式アカウントの開設ページを開き、「LINE公式アカウントをはじめる」をクリックします。すでにLINE公式アカウントを持っている場合は、LINE Official Account Managerへログインして「設定を開く」へ進んでください。

LINE公式アカウントの開設ページ

LINEヤフー Business IDを登録する

LINEヤフー Business IDは、LINEアカウントまたはメールアドレスを使って登録できます。ここでは、メールアドレスを使った登録方法を説明します。「メールアドレスで登録」をクリックします。

LINEヤフー Business IDでメールアドレス登録を選択する画面

登録用のリンクを送信する

メールアドレスを入力し、「登録用のリンクを送信」をクリックします。

LINEヤフー Business IDへメールアドレスを入力する画面

確認メールを開く

LINEヤフーから届いた「ビジネスID 登録用リンク」のメールを開き、「登録画面に進む」をクリックします。

LINEヤフー Business IDの登録用メール

ユーザー情報を入力する

氏名とパスワードを入力し、確認用にも同じパスワードを入力して「次へ」をクリックします。

LINEヤフー Business IDのユーザー情報入力画面

Business IDを登録する

入力内容を確認し、「登録」をクリックします。

LINEヤフー Business IDの登録内容確認画面

電話番号を認証する

電話番号へ届いた6桁の認証番号を入力し、「確認する」をクリックします。

LINEヤフー Business IDの電話番号認証画面

LINE公式アカウントの作成へ戻る

電話番号の認証が完了したら、「サービスに戻る」をクリックします。

LINEヤフー Business IDの電話番号認証完了画面

LINE公式アカウントの情報を入力する

アカウント名、メールアドレス、会社・事業者の所在国・地域、業種、運用目的、主な使い方などを入力します。利用規約とプライバシーポリシーを確認して同意し、「確認」をクリックします。

LINE公式アカウントの作成情報を入力する画面

入力内容を確認する

LINE公式アカウントの入力内容を確認し、「完了」をクリックします。

LINE公式アカウントの入力内容確認画面

LINE Official Account Managerを開く

LINE公式アカウントが作成されたら、「LINE Official Account Managerへ」をクリックします。

LINE公式アカウントの作成完了画面

LINE公式アカウントを友だち追加する

表示されたQRコードを、メッセージを受け取るスマートフォンのLINEで読み取り、作成したLINE公式アカウントを友だち追加します。追加できたら「次へ」をクリックします。

LINE公式アカウントを友だち追加するQRコードの画面

設定を開く

LINE Official Account Managerのホーム画面右上にある「設定」をクリックします。

LINE Official Account Managerのホーム画面で設定を開く場所

Messaging APIを開く

設定画面の左側メニューから「Messaging API」をクリックします。

LINE Official Account Managerの設定画面でMessaging APIを選択する場所

Messaging APIを有効にする

Messaging APIのステータスが「未利用」になっていることを確認し、「Messaging APIを利用する」をクリックします。

LINE Official Account ManagerでMessaging APIを利用する画面

開発者情報を登録する

LINE Developersへ登録する開発者名とメールアドレスを入力し、内容を確認して「同意する」をクリックします。

LINE Messaging APIの開発者情報登録画面

開発者情報を確認する

登録する開発者名とメールアドレスを確認し、「OK」をクリックします。

LINE Messaging APIの開発者情報確認画面

プロバイダーを作成する

「プロバイダーを作成」を選択して、任意のプロバイダー名を入力します。内容を確認して「同意する」をクリックします。

LINE Messaging APIでプロバイダーを作成する画面

プライバシーポリシーと利用規約を確認する

プライバシーポリシーと利用規約は任意項目です。今回は入力せず、「OK」をクリックします。

LINE Messaging APIのプライバシーポリシーと利用規約を登録する画面

Messaging APIの利用を確定する

アカウント名とプロバイダー名を確認し、「OK」をクリックします。

LINE Messaging APIの利用確認画面

Channel IDとChannel secretを確認する

Messaging APIが「利用中」になったら、Channel情報に表示されるChannel IDとChannel secretを確認します。この2つをサンプルコードで使用します。Channel secretは重要な認証情報なので、第三者へ公開しないでください。

LINE Messaging APIのChannel IDとChannel secretを確認する画面
2

サンプルコード

GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。

07_API_LINE.ino
GitHubで開く
GitHubからコードを読み込んでいます...
3

プログラムを書き込む

上のサンプルコードをコピーし、Arduino IDEに貼りつけます。

設定情報を書き換える

コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。

コード内の項目入力する情報
line_ch_idLINE Messaging APIのチャネルID
line_ch_pwLINE Messaging APIのチャネルシークレット
SSID接続するWi-FiのSSID
PASSWi-Fiのパスワード
#define line_ch_id "ここにチャネルIDを入力"#define line_ch_pw "ここにチャネルシークレットを入力"#define SSID "ここにSSIDを入力"#define PASS "ここにパスワードを入力"

コードの左側にある項目名や記号は残し、例を参考に値の部分だけを 書き換えます。値を囲む"、行末の;、 証明書の開始・終了行などは削除しません。書き換えたあと、xxxxxなどの仮の文字が残っていないことを確認してください。

Wi-Fiのパスワード、APIキー、トークン、証明書などを入力したコードは、 Webサイト、SNS、GitHubなどへ公開しないでください。

ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。

初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。

4

動作確認

LINEで確認する

LINEに届いたメッセージを確認する

プログラムを書き込むと、作成したLINE公式アカウントから「[esp32] Test!」というメッセージが届きます。

LINE公式アカウントからesp32 Testメッセージが届いた画面

設定したLINE公式アカウントから「[esp32] Test!」というメッセージが届くなら成功です。

動作中、シリアルモニターにはWi-Fiの接続情報、LINE Messaging APIから取得したアクセストークン、送信するJSONなどが表示されます。アクセストークンは重要な認証情報なので、第三者へ公開しないでください。

Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

Arduino IDEでシリアルモニターを表示する場所
5

コードの解説

アクセストークンを使ってLINEのAPIへ接続し、「[esp32] Test!」というテキストメッセージを送信するデータをHTTPS通信で送信します。

07_API_LINE.ino
GitHubで開く
GitHubからコードを読み込んでいます...

#include <WiFi.h>CherryIoTのWi-Fi機能を使うため、WiFiライブラリを読み込みます。

#include <HTTPClient.h>LINEのAPIとHTTP通信するため、HTTPClientライブラリを読み込みます。

#define line_ch_id "xxxxx"LINE Messaging APIのチャネルIDを、line_ch_idへ設定します。

#define line_ch_pw "xxxxx"LINE Messaging APIのチャネルシークレットを、line_ch_pwへ設定します。

#define SSID "xxxxx"CherryIoTを接続するWi-FiのSSIDを、SSIDへ設定します。

#define PASS "xxxxx"Wi-Fiのパスワードを、PASSへ設定します。

const char* originalImageUrl =LINEへ画像を送る場合に使う画像のURLを、originalImageUrlへ保存します。このサンプルでは画像送信の処理を実行しないため、この変数は使用しません。

const char* previewImageUrl画像を送る場合に使うプレビュー画像のURLを、previewImageUrlへ保存します。

String get_token(){LINEへ接続するためのアクセストークンを取得するget_token関数を定義します。

HTTPClient http;LINEのAPIへ通信するため、httpを用意します。

if(strcmp(line_ch_id,"0000000000") == 0){チャネルIDが未設定か確認します。

Serial.println("ERROR: Pls set line_ch_id and pwd");チャネル情報が未設定であることを表示します。

return "";空の文字列を返して処理を終了します。

String url = "https://api.line.me/oauth2/v3/token";アクセストークン取得用のURLを、urlへ保存します。

String body = "grant_type=client_credentials&";アクセストークン取得用の送信データを作り始めます。

body += "client_id=" + String(line_ch_id) + "&";送信データへチャネルIDを追加します。

body += "client_secret=" + String(line_ch_pw);送信データへチャネルシークレットを追加します。

http.begin(url);アクセストークン取得用のURLへ接続します。

http.addHeader("Content-Type","application/x-www-form-urlencoded");送信データの形式をHTTPヘッダーへ設定します。

int httpCode = http.POST(body);送信データをPOSTし、結果をhttpCodeへ保存します。

String token="";取得したアクセストークンを保存するtokenを用意します。

if(httpCode == 200){HTTP通信が正常に完了したか確認します。

String S = http.getString();LINEから返されたJSONを、Sへ保存します。

int i = S.indexOf("\"access_token\"");JSONからaccess_tokenの位置を探します。

if((i>0) && (S.substring(i+15, i+16).equals("\""))){アクセストークンの開始位置を確認します。

token = S.substring(i+16, i+16+174);アクセストークン部分を取り出し、tokenへ保存します。

Serial.println(token);取得したアクセストークンをシリアルモニターへ表示します。

}else{アクセストークンを取得できなかった場合はこちらへ進みます。

Serial.println("HTTP ERROR: "+String(httpCode));HTTPエラーの内容を表示します。

http.end();HTTP通信を終了します。

return token;取得したアクセストークンを返します。

int message_to_line(String textMessage){受け取った文章をLINEへ送るmessage_to_line関数を定義します。

String token = get_token();get_token関数でアクセストークンを取得します。

if(token.length() != 174){アクセストークンが正しく取得できたか確認します。

Serial.println("ERROR: Token Length Error; " + String(token.length()));アクセストークンの文字数エラーを表示します。

return 0;送信せず、0を返して処理を終了します。

HTTPClient http;メッセージ送信用のHTTP通信を準備します。

String url = "https://api.line.me/v2/bot/message/broadcast";メッセージ送信用のURLを、urlへ保存します。

http.begin(url);メッセージ送信用のURLへ接続します。

http.addHeader("Content-Type","application/json");送信データがJSON形式であることを設定します。

http.addHeader("Authorization","Bearer " + token);アクセストークンを認証情報として設定します。

String json = "{\"messages\":[";LINEへ送るJSONデータを作り始めます。

json += "{\"type\":\"text\",\"text\":\"" + textMessage + "\"}";送信するテキストメッセージをJSONへ追加します。

json += "]}";JSONデータを完成させます。

Serial.println(json);送信するJSONをシリアルモニターへ表示します。

int httpCode = http.POST(json);JSONをLINE Messaging APIへ送信します。

http.end();HTTP通信を終了します。

return httpCode;送信結果を返します。

void setup(){setup関数は最初に1回だけ実行されます。

Serial.begin(115200);Wi-FiやLINE通信の状態をPCへ表示するため、115200bpsでシリアル通信を開始します。

Serial.println("LINE Messaging API");「LINE Messaging API」と表示します。

WiFi.mode(WIFI_STA);CherryIoTをWi-Fiルーターへ接続するモードに設定します。

WiFi.begin(SSID,PASS);SSIDとPASSを使ってWi-Fiへの接続を開始します。

while(WiFi.status() != WL_CONNECTED){Wi-Fiへ接続できるまで繰り返します。

Serial.print('.');接続待ちを示す「.」を表示します。

delay(500);0.5秒待ちます。

Serial.println(WiFi.localIP());接続後のIPアドレスを表示します。

void loop(){loop関数は繰り返し実行されます。

message_to_line("[esp32] Test!");アクセストークンを使ってLINEのAPIへ接続し、「[esp32] Test!」というテキストメッセージを送信するデータをHTTPS通信で送信します。

delay(10*60*1000);10分待ちます。