Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@MikH

M5StickVとM5StickCでお知らせ機能付きエッジAIカメラにパトランプでお知らせする機能を追加した

More than 1 year has passed since last update.

パトランプでお知らせする機能を追加した

「M5StickVとM5StickCでお知らせ機能付きエッジAIカメラを作った」の続きの記事となります。
前回の記事では、M5StickVとM5StickCを接続して、Brownie Learn(@ksasaoさんの作品)の機能で学習させた画像を認識したら、LINE Notifyでお知らせするカメラでした。
このカメラに、パトランプでお知らせする機能を追加しました。実際のユーザーの要望により追加しました。現場の声を大切にします。

動画はこれ
image.png

IFTTTで設定したWebhooksを叩く

パトライトのONは、tp-LinkのHS105のスマートコンセントを使う。
https://www.tp-link.com/jp/home-networking/smart-plug/hs105/
image.png

iPhone上でtp-Link用アプリKasaを立ち上げ、iphoneをtp-link名のwifiにつないで、その後、tp-linkが接続するwifiの設定(wifiSSID, password)をKasaアプリ内で行い、Kasaアプリ内でHS105が制御できる環境にする。HS105の名前もこの時に命名することができる。

IFTTTの設定

IFTTTの詳細設定は省略します。

最後に、Event Nameの設定とYour keyの確認の手順のみ以下の画面に示します。

My Appletsをクリック
image.png

image.png

image.png

image.png

Event Nameは、LacCam_tplink という名前に設定したので、LacCam_tplinkを入れる。

image.png

コマンドプロンプトから

curl -X POST https://maker.ifttt.com/trigger/LabCam_tplink/with/key/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
を入力すると、HS105が電源オンになることが確認できた。

M5StickCからIFTTTで設定したWebhooksを叩く

M5StickCからIFTTTで設定したWebhooksを叩くプログラムは以下の部分

attack_webhook.ino

 /* IFTTTで設定したWebhooksを叩く */
void attack_webhook() {
  WiFiClientSecure https;
  if (!https.connect("maker.ifttt.com", 443))
  {
    Serial.println(F("ERROR: https connect"));
  }
  else
  {
    https.printf("GET /trigger/%s/with/key/%s?"
                 "value1=%f&value2=%f&value3=%f HTTP/1.1\r\n"
                 "Host: maker.ifttt.com\r\n"
                 "Connection: close\r\n\r\n"
                 , IFTTT_EVENT, IFTTT_KEY);
    https.flush();
    while (https.connected())
    {
      while(https.available())
      {
        String line = https.readStringUntil('\n');
        Serial.println(line);
      }
    }
    https.stop();
  }
}

M5StickCに書き込むプログラムは以下の通り

M5StickC2IFTTT.ino

//LINE Notifyでお知らせ と IFTTTでtp-link HS-105をONにする

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

const char* ssid = "XXXXXXXXXX";   //INPUT your wifi ssid
const char* passwd = "XXXXXXXXXXXXXXX";  //INPUT your wifi password
const char* token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";  //INPUT your LINE notify token
const char* host = "notify-api.line.me";

const char* IFTTT_EVENT = "XXXXXXXXXXXXX"; //INPUT IFTTT_Event_Name
const char* IFTTT_KEY = "XXXXXXXXXXXXXXXXXXX"; //INPUT IFTTT_Your_key


HardwareSerial serial_ext(2);

void setup_wifi() ;
void setup() {
  M5.begin();
  setup_wifi();
  send("WIFI connected");
  M5.Lcd.setRotation(1);
  M5.Lcd.setCursor(2, 4, 2);
  M5.Lcd.println("Wifi_Connected");
  serial_ext.begin(115200, SERIAL_8N1, 32, 33);
}

void loop() {
  M5.update();
  delay(500);
  if (serial_ext.available()>0) {
    String str = serial_ext.readStringUntil('\n');
    int data = str.toInt();
    Serial.print("data:");
    Serial.write(data);
    if (data == 1) {
    M5.Lcd.print('1');
    send("画像1が現れた。");  // 画像1認識時のメッセージを書く.
    attack_webhook();
  } else if (data == 2) {
    M5.Lcd.print('2');
    send("画像2が現れた。");  // 画像2認識時のメッセージを書く.
    attack_webhook();
  } else if (data == 3) {
    M5.Lcd.print('3');
    send("画像3が現れた。");  // 画像3認識時のメッセージを書く.
    attack_webhook();
    }
  }
  vTaskDelay(1000 / portTICK_RATE_MS);
}

 /* IFTTTで設定したWebhooksを叩く */
void attack_webhook() {
  WiFiClientSecure https;
  if (!https.connect("maker.ifttt.com", 443))
  {
    Serial.println(F("ERROR: https connect"));
  }
  else
  {
    https.printf("GET /trigger/%s/with/key/%s?"
                 "value1=%f&value2=%f&value3=%f HTTP/1.1\r\n"
                 "Host: maker.ifttt.com\r\n"
                 "Connection: close\r\n\r\n"
                 , IFTTT_EVENT, IFTTT_KEY);
    https.flush();
    while (https.connected())
    {
      while(https.available())
      {
        String line = https.readStringUntil('\n');
        Serial.println(line);
      }
    }
    https.stop();
  }
}

 /* Wifiに接続する */
void setup_wifi() {
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, passwd);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


 /* LINE Notifyに送る */
void send(String message) {
  WiFiClientSecure client;
  Serial.println("Try");
  //LineのAPIサーバに接続
  if (!client.connect(host, 443)) {
    Serial.println("Connection failed");
    return;
  }
  Serial.println("Connected");
  //リクエストを送信
  String query = String("message=") + 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');
    Serial.println(line);
    if (line == "\r") {
      break;
    }
  }

  String line = client.readStringUntil('\n');
  Serial.println(line);
}

コードを書くのに参考にした記事
Wi-FiがないM5StickVを、M5StickCと繋ぎLINEに投稿してみるまでの手順(@nnn112358 さん)
https://qiita.com/nnn112358/items/5efd926fea20cd6c2c43

作って1週間後に気づいた点

tp-linkコンセントをONにするプログラムでオンになった後、スマートフォンアプリKasaを立ち上げてOFFにしていたが、スマートコンセントの横にあるボタンを押したらON時はOFFに、OFF時はONになるボタンであることに気づいた。

image.png

こんなに大きなボタンがあるのに、wifiによるON/OFFのプラグである先入観があり、このボタンを押さなかった。
これでスマートプラグ設定・設置者と現場ユーザーが異なっていても実用に耐える。

反省点:しっかり、見ましょう。ボタンは、まず押してみましょう。説明書読みましょう。

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
MikH
まず作って試してみるプロトタイプ派。 ProtoOut Studio 1期生,  Call for Code 2019 Regional Finalist, Call for Code 2020 Regional Finalist, IBM Chamipon 2021 ,  医学博士,   実験室と医療現場をAI・IoT化することミッションに、xMedGear株式会社を設立。
protoout-studio
プロトアウトスタジオは日本初のプロトタイピング専門スクールです。プログラミングだけではなく、企画力と発信力を身に付けて”自分で課題を見つけて実装し、発信し続ける人”を育成しています。 圧倒的なアウトプット力を身に付けましょう。 学生募集中です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?