M5StackからLINEに投稿する

関東地方の梅雨があけたようです。
クソ暑い・・・


この間、Line notifyというのを導入したので、
M5Stackから投稿するテストをしてみました。

tmegane.hatenablog.com

Micropythonだとrequestモジュールがそのまま使えなかったので、
Arduino言語を使いました。どうも開発環境を統一できていない・・・

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

void setup() {
  M5.begin();
  wifi_connect();
  send_bot();

}

void loop() {
  M5.update();
}

void wifi_connect() {
  const char* ssid = "SSID"; //Wifi SSID
  const char* passwd = "password"; //Wifi passwd
  WiFi.begin(ssid, passwd);

  while (WiFi.status() != WL_CONNECTED) { //Wifi 接続待ち
    delay(500);
  }

  M5.Lcd.println(WiFi.localIP());

}



void send_bot() {

  const char* host = "notify-api.line.me"; // line_notifyのURL
  const char* token = "token"; //トークンキー
  const char* message = "from M5stack"; //送るmessage

  WiFiClientSecure client;
  if (!client.connect(host, 443)) {
    M5.Lcd.print("WiFi connection error");
    return;
  }
  String query = String("message=") + "\n" + 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;
    }
  }

  M5.Lcd.print(request);


}

特に便利なライブラリもないので、Line notifyにhttps通信でダイレクトに叩いてます。
requestの内容はLine notifyの公式APIを参照。
目視でも確認できるように、送ったらLCDへ表示させるようにしています。

M5Stackが起動したらWifiに接続するまで待機し、LCDに接続したIPアドレスを表示。
そしてLineへとmessageを送ります。 f:id:Tmegane:20190730135749p:plain:w400

よし。