1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Arduino初心者メモ】Bootボタンを押すとLINEに通知

Posted at

はじめに

プログラミングとはほぼ無縁な職業についているのですが、学生のころからプログラミングに興味があり、少しずついろいろなものをかじってきました。
最近、「インターホンが押されたらDiscordに通知を送る」装置の記事を何かで読み、これなら私でも作れそうかも、と思い立ってESP32開発ボードを購入しました。
最終的な目標は「設定された時刻にDHT22で温度と湿度を計測し、LINEで通知する」ものの作成です。
まずは手始めに「BOOTボタンを押したらLINE通知」を作成してみました。

その1 環境設定

これについては省略します。Windowsとmacの両方で環境を作りました。
macでやっているとなんだかかっこよく思えたためです。

その2 コード設計

これも、いろいろなサイトを巡回して使えそうなものをかき集め、あとは少しだけ手を加えただけで完成しました。
便利な時代になったものです。

#include <WiFi.h>
#include <WiFiClientSecure.h>

// WiFi設定
const char* ssid     = "YOUR_SSID";
const char* password = "YOUR_PW";

// Bootボタンを設定
const int swPin = 0; 

// LINE Notify設定
const char* host = "notify-api.line.me";
const char* token = "YOUR_TOKEN";
const char* message = "押されたぜ!";

// もろもろ設定
void setup()
{
    Serial.begin(115200);
    delay(10);

    // WiFi接続
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());

    // Bootボタンを入力状態にする
    pinMode(swPin, INPUT_PULLUP);
}

// line通知
void send_line() {

  // HTTPSへアクセス(SSL通信)するためのライブラリ
  WiFiClientSecure client;

  // サーバー証明書の検証を行わずに接続する場合に必要
  client.setInsecure();
  
  Serial.println("Try");
  
  //LineのAPIサーバにSSL接続(ポート443:https)
  if (!client.connect(host, 443)) {
    Serial.println("Connection failed");
    return;
  }
  Serial.println("Connected");

  // リクエスト送信
  String query = String("message=") + String(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;
    }
  }
  
  String line = client.readStringUntil('\n');
  Serial.println(line);
}

// スイッチの変数宣言
int sw_val = 0;

void loop()
{
  // put your main code here, to run repeatedly:
    int sw_state = digitalRead(swPin);

  if (sw_state==LOW){ 
    send_line();  
  }
}

その3 書き込み

とりあえず、これを書き込んでからBOOTボタンを押すと、設定したLINEの宛先にメッセージが飛ぶはずです。

あとは、これを「設定した時刻に」「DHT22で計測した温度と湿度を」送信するように直せば当初の思惑通りのものができるはず、です。

その4 謎

  • 通信速度?を115200に設定するのはなぜ?文字化けするから?
1
0
2

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?