Atom Liteから直接LINEメッセージを送信
※このページは神奈川工科大学電気電子情報工学科およびホームエレクトロニクス開発学科コミュニケーションロボティクス研究室の平凡なチュートリアルを淡々と示したものです。過度な期待はしないでください。 やってること
マイコン(Atom Lite)からWi-Fi接続してLINEメッセージを送信
手順:
LINE Notifyと自分のLINEアカウントの連携
Atom Liteのプログラミング(Wi-Fi接続→LINE Notifyにメッセージ送信)
開発環境:
Arduino IDE 2.3.2
1. はじめに
モノとインターネットとつなぐIoT開発をしていると、マイコンが取得した情報をスマートフォンにお知らせしたいという場面が多々あります。種々の方法がありますが、ここでは手っ取り早くなじみやすい通知方法としてAtom LiteからLINEでお知らせを送る方法を示します。今回の内容を用意するにあたり参考にしたサイトは下記のとおりです。 ※今回は取り扱わないマイコン等の各種通信については、下記も参考にしてください。
2. LINE Notifyを利用したマイコンからの通知方法
https://gyazo.com/35b15277fa9eee8b40735bfb372ecce7
上図はこれから構築するLINE Notifyを利用した通知システムの概要図です。マイコン(Atom Lite)からWi-Fi接続でLINE NotifyにアクセスしLINEアカウントに通知を送ります。LINE NotifyはWebサービスからの通知をLINEで受信することができる便利なサービスです。LINE Notifyを利用するには、まずLINE Notifyを自分のLINEアカウントと連携し、発行されるアクセストークンを用いてWEBサービス(ここではマイコン)からアクセスする必要があります。 以下に、具体的な手順を示します。
2.1 LINE NotifyとLINEアカウントとの連携
STEP1: WEBブラウザからLINE Notifyにアクセスし、自分のLINEアカウントからログインする。※本人確認のためスマートフォン版LINEで認証番号を入力する必要があります。 ログイン画面
https://gyazo.com/d4920df9664b38f49d2bc9e938f3b2de
本人確認画面
https://gyazo.com/68efe5744a22a7840968c96b92d007ae
STEP2: 画面右上のメニューから「マイページ」を選択する。
https://gyazo.com/f7002134fcb9c1af42e4d4b52999f234
STEP3: 画面中段の「アクセストークンの発行(開発者向け)」から「トークンを発行する」を選択する。
https://gyazo.com/459ed2b5e95fad683969666fa6692fea
STEP4: トークンの情報を記入する。
STEP4.1:
「トークン名を記入してください」の項目に任意のトークン名を記入する。※ここで決めたトークン名が通知メッセージの先頭に表示されます。下に示す例では「Atom liteからのお知らせ」と記入しています。
通知をするトークルームを選択する。※今回は一番上にある「1:1でLINE Notifyから通知を受け取る」を選択しています。別のトークルームを選択することもできます。
トークン情報の記入画面
https://gyazo.com/1e2575e0e14a8c2394cd69cb6719cbf9
STEP4.2: 発行したトークンが表示されるので、「コピー」をクリックしかならずどこかに保存する。その後、「閉じる」でウィンドウを閉じる。※トークンは二度と表示できないので注意してください。このトークンはマイコンからアクセスする際に必要になります。
https://gyazo.com/66b1b356e1afc7940616e81b201840b1
STEP4.3: 「連携中サービス」の中に、今、作成したトークン名があるかを確認する。
https://gyazo.com/2990bb0dc8d4fe5f592a26191fd0fb22
LINE Notifyの設定は以上です。
次節では、マイコンからLINE Notifyにアクセスする方法を示します。
2.2 マイコン(Atom Lite)からLINE Notifyをたたく
ここでは、2.1で取得したLINE Notifyのトークンを用いてマイコンからLINE通知するプログラムを示します。
https://gyazo.com/c22dde219f587b0c126152225207e8ed
上記はAtom LiteからLINE Notifyをテストするためのサンプルコードの概要図です。Atom Liteのボタンスイッチを押すと乱数(1から5の整数値)を生成し、その値をLINEで通知します。Atom Lite側でも生成した整数値を確認できるよう、値に応じてLEDの色を表示するようにしてあります(2秒で消灯)。この整数値をセンサ値などに変更すれば、皆さんの思い思いのIoTアプリケーションがつくれるはずです。
下記にArduino IDE用のサンプルコードを示します。
・Wi-Fiの設定(「ssid」と「password」)
・LINE Notifyの設定(「token」)
上記の項目の「xxxxxxxx」の部分を自分の環境にあわせて書き換えれば動作します。
※Atom Liteのスケッチ例がArduino IDEでビルドできる環境が前提です。わからない場合はこちらを参考にしてください。 code:AtomLiteLINENotify.ino
/* Atom LiteからのLINEメッセージ送信サンプル by yama 2024.6.21
* ・LINE Notifyを利用してWIFI経由でメッセージ(0から5乱数)を送信
* ・送信メッセージに応じたLED色表示
* ・送信データ(val0)をセンサ値などに置き換えて適宜利用してください
* ・ライブラリ等を最新のものでコンパイルすること(古い環境だとLED色の指定がRGBではなくGBRになる……)
*/
const char* ssid = "xxxxxxxx"; //※自分の環境にあわせて設定を変更
const char* password = "xxxxxxxx"; //※自分の環境にあわせて設定を変更
const char* host = "notify-api.line.me"; //LINE Notifyのホスト(変更不要)
const char* token = "xxxxxxxx"; //※自分の環境にあわせて設定を変更
unsigned long displayTime = 0; //LEDの表示時間用変数
uint8_t brightness; //LED明るさ用変数
int val0; //送信データ用変数
// LED表示関数
CRGB dispColor(uint8_t g, uint8_t r, uint8_t b) {
return (CRGB)((g << 16) | (r << 8) | b);
}
// LINEメッセージ送信関数
boolean line_notify(String msg) {
WiFiClientSecure client;
client.setInsecure();
if(!client.connect(host, 443)) {
Serial.println("connect error!");
return false;
}
String query = String("message=") + msg;
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);
return true;
}
void setup() {
M5.begin(true, false, true);
brightness = 0xFF; //明るさMAX
M5.dis.drawpix(0, dispColor(0, 0, 0));//LED消灯
WiFi.begin(ssid, password); // WiFi接続
while (WiFi.status() != WL_CONNECTED) { // WiFi接続完了するまで待機
delay(1000);
Serial.print(".");
}
Serial.println("WiFi Connected!");
displayTime = millis();
}
void loop() {
M5.update();
//ボタンが押されたとき
if(M5.Btn.wasReleased()) {
//このval0をセンサ値などに置き換えればよい
val0 = random(5); //今は送信用変数を乱数(0から5まで)で設定してます
String msg = "乱数の値は " + String(val0) + " です。"; //送信メッセージ作成
line_notify(msg); //LINEメッセージ送信
displayTime = millis(); //現在の時間(ボタンが押されたときの時間)を取得
//val0の値に応じてLED色を変更(確認用)
if (val0 == 1) {
M5.dis.drawpix(0, dispColor(brightness, 0, 0)); // LED-RED
} else if (val0 == 2) {
M5.dis.drawpix(0, dispColor(brightness, brightness, 0)); // LED-YELLOW
} else if (val0 == 3) {
M5.dis.drawpix(0, dispColor(0, brightness, 0)); // LED-GREEN
} else if (val0 == 4) {
M5.dis.drawpix(0, dispColor(0, brightness, brightness)); // LED-CYAN
} else if (val0 == 5) {
M5.dis.drawpix(0, dispColor(0, 0, brightness)); // LED-BLUE
} else if (val0 == 0) {
M5.dis.drawpix(0, dispColor(brightness, 0, brightness)); // LED-MEGENTA
}
}
// ボタンを押してから2秒(2000 msec)以上経過したら消灯
if(millis() - displayTime >= 2000) {
M5.dis.drawpix(0, dispColor(0, 0, 0)); // LED-BLACK
}
delay(50);
}
2.3 実行結果
プログラムを書き込んだ後にAtom Liteを電源につなぎ真ん中のボタンを押すと、乱数を一つ生成します。生成した乱数値に応じてLEDが光り、その値をLINEで通知します。
Atom Lite側のLED表示
https://gyazo.com/868bf0634f806f4be1c46f51c6ecb3c7
LINE側の通知
https://gyazo.com/0174037260681759e8ef6dfc0aafc5b5
https://gyazo.com/71c7de59f100448c29cdb7f29fbd171b