LoginSignup
1
1

More than 1 year has passed since last update.

M5StackとLineNotifyを使って通知を飛ばしてみた

Last updated at Posted at 2022-12-16

制作背景

M5Stack買ってから数か月放置してたのでそろそろ使いたいということと
LineNotifyを使ってLineに通知を送ってみたいということで作成しました。

やりたいこと

ボタンを押すとランダムで設定したワードを通知させる
クリスマスが近いのでクリスマスっぽいワードを通知させたい

環境

M5Stack(ESP32)
ArduinoIDE 2.0.4
Windows 11

手順

  1. 開発環境の構築と初期セットアップ
  2. LineNotifyの公式ページでアクセストークンを発行
  3. 実装
  4. 実行

1.開発環境の構築と初期セットアップ

M5StackをPCに接続し、ドライバーを更新

ドライバーのダウンロードページでCP210x_VCP_Windowsをダウンロードし解凍しておく
スクリーンショット_20221214_211138.png
デバイスマネージャー内のほかのデバイスの中にあるM5Stackにダウンロードしたドライバーを更新する(画像を撮り忘れた)

ArduinoIDEにESP32のボードを認識させる

ArduinoIDEの左上にあるFileからPreferencesを開く
スクリーンショット_20221215_210519.png

下のほうにあるAdditional boards manager URLsのマークをクリック
スクリーンショット 2022-12-15 211821.png

Arduino-ESP32の公式ドキュメントのインストールページのStable release linkのリンクをコピーしてAdditional Boards Manager URLsに張り付けOKを押す
スクリーンショット 2022-12-15 214102.png

するとTools→BoardにESP32 が追加される。
どこかにあるM5Stack-Core-ESP32を選択できる。
スクリーンショット_20221215_214503.png

M5Stackのライブラリを入れる

ライブラリの検索欄にM5Stackと入力しインストールする。
スクリーンショット_20221215_202400.png

2.LineNotifyの公式ページでアクセストークンを発行

LineNotifyの公式ページを開く
右上に「ログイン」とあるので自身のLineアカウントでログインする。
無事ログインに成功すると右上にアカウント名が表示されるのでクリックする。
マイページという欄があるのでクリックする
スクリーンショット 2022-12-15 220233.png

マイページを開くとアクセストークンの発行というのがあるので「トークンを発行する」をクリック
スクリーンショット 2022-12-15 220326.png

トークン名はわかりやすいものを任意で設定し、
「1:1でLINE Notifyから通知を受け取る」を選択
スクリーンショット 2022-12-15 220436.png

トークンが発行されるので必ずコピーを取る
スクリーンショット 2022-12-15 220631.png

3.実装

ソースコード

#include <M5Stack.h>
#include <WiFiClientSecure.h>
#include <ssl_client.h>

//wifiの設定
const char ssid[] = "Wi-Fiのssid";
const char password[] = "Wi-Fiのパスワード";

//LineNotifyの設定
const char host[] = "notify-api.line.me";
const char token[] = "LineNotifyのトークン";

//通知する内容
char* topics[] = {
  "サンタさん","今日も一日,おつかれさま","今日は七面鳥が食べたいなー","メリークリスマス!","ケーキ楽しみ"
};

//topicsの最大数-1
int maxTopics=5;

WiFiClientSecure client;

void setup() {
  //M5Stackのセットアップ
  M5.begin();
  //M5Stackのスピーカー設定とミュートにしておく
  M5.Speaker.begin();
  M5.Speaker.mute();
  // 文字サイズを変更
  M5.Lcd.setTextSize(1); 
  WiFi.disconnect();
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  M5.Lcd.println("initialize...");
  //Wifiの状態を監視
  while(WiFi.status() != WL_CONNECTED){
    delay(500);
    //文字表示の左上位置を設定
    M5.Lcd.setCursor(0, 10);
    M5.Lcd.println("wifi_disconnected");
  }
    M5.Lcd.println("wifi_Connected!");
  delay(1000);
}

//LineNotifyにメッセージを送信する部分
void Line_notify(String msg) {
  client.setInsecure();
  if (!client.connect(host, 443)) {
    delay(500);
    M5.Lcd.print("Line Notify disconnect");
    return;
  }
  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);
  delay(500);
}

//Topicを抽選
char* randomTalk(){
   //ランダムで0~Topicsの最大数までの数字を生成
   int randNumber = random(0,maxTopics);
   return topics[randNumber];
}

//メインのloop部分
void loop() {
  M5.update();
  if (M5.BtnA.wasReleased()) {
    Line_notify(randomTalk());
  }  
}

この辺は人によって異なるので書き換えてください

//wifiの設定
const char ssid[] = "Wi-Fiのssid";
const char password[] = "Wi-Fiのパスワード";

//LineNotifyの設定
const char host[] = "notify-api.line.me";
const char token[] = "LineNotifyのトークン";

この辺の通知する内容をふやしたりしても面白いかも

//通知する内容
char* topics[] = {
  "サンタさん","今日も一日,おつかれさま","今日は七面鳥が食べたいなー","メリークリスマス!","ケーキ楽しみ"
};

//topicsの最大数-1
int maxTopics=5;

4.動作

wifi_Connected!と表示されている状態で一番左のボタンを押すと
スクリーンショット 2022-12-15 221424.png

ランダムで設定してあるメッセージが送ることができました!!!
スクリーンショット 2022-12-15 221553.jpg

課題

課題点としては
・LineNotifyとの接続が切れてしまう
・Wi-Fiがつながらないことがある
・ボタンのノイズが原因?で意図しないタイミングで通知が飛んでくる
・文字列の要素数を取得したい
の4点がありました。

今後やってみたいこと

ニュースと天気情報を通知、時間になったら今日の予定を教えてくれるモノとか作りたいなぁと思います。

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1