07_API_LINE
LINEへ通知を送る
Wi-Fiを使ってLINEへメッセージを送信します。
準備する
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ヤフー Business IDを登録する
LINEヤフー Business IDは、LINEアカウントまたはメールアドレスを使って登録できます。ここでは、メールアドレスを使った登録方法を説明します。「メールアドレスで登録」をクリックします。

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

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

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

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

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

LINE公式アカウントの作成へ戻る
電話番号の認証が完了したら、「サービスに戻る」をクリックします。

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

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

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

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

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

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

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

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

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

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

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

Messaging APIの利用を確定する
アカウント名とプロバイダー名を確認し、「OK」をクリックします。

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

サンプルコード
GitHubで公開しているサンプルコードです。コードをコピーして Arduino IDEで使用します。
GitHubからコードを読み込んでいます...プログラムを書き込む
上のサンプルコードをコピーし、Arduino IDEに貼りつけます。
設定情報を書き換える
コード内の以下の箇所を、「1 準備する」で確認・取得した情報に 書き換えます。
| コード内の項目 | 入力する情報 |
|---|---|
line_ch_id | LINE Messaging APIのチャネルID |
line_ch_pw | LINE Messaging APIのチャネルシークレット |
SSID | 接続するWi-FiのSSID |
PASS | Wi-Fiのパスワード |
#define line_ch_id "ここにチャネルIDを入力"#define line_ch_pw "ここにチャネルシークレットを入力"#define SSID "ここにSSIDを入力"#define PASS "ここにパスワードを入力"コードの左側にある項目名や記号は残し、例を参考に値の部分だけを 書き換えます。値を囲む"、行末の;、 証明書の開始・終了行などは削除しません。書き換えたあと、xxxxxなどの仮の文字が残っていないことを確認してください。
Wi-Fiのパスワード、APIキー、トークン、証明書などを入力したコードは、 Webサイト、SNS、GitHubなどへ公開しないでください。
ボードとポートの設定を確認し、左上の 「→(書き込みボタン)」を押してCherryIoTに書き込みます。
初めて書き込む方は「はじめてのCherryIoT」で詳しい手順を確認してください。
動作確認
LINEで確認する
LINEに届いたメッセージを確認する
プログラムを書き込むと、作成したLINE公式アカウントから「[esp32] Test!」というメッセージが届きます。

設定したLINE公式アカウントから「[esp32] Test!」というメッセージが届くなら成功です。
動作中、シリアルモニターにはWi-Fiの接続情報、LINE Messaging APIから取得したアクセストークン、送信するJSONなどが表示されます。アクセストークンは重要な認証情報なので、第三者へ公開しないでください。
Arduino IDEの画面右上にあるアイコンをクリックすると、 画面下にシリアルモニターが表示されます。

コードの解説
アクセストークンを使ってLINEのAPIへ接続し、「[esp32] Test!」というテキストメッセージを送信するデータをHTTPS通信で送信します。
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分待ちます。