👌

M5Stack Nano C6とLINE Notifyでボタン操作を通知!

2024/07/19に公開

M5Stack Nano C6は、コンパクトながらWi-FiやBLEを搭載した、IoT開発に最適なデバイスです。本記事では、M5Stack Nano C6とLINE Notifyを連携させて、ボタン操作をLINEに通知する方法を解説します。

この仕組みを活用すれば、例えば、離れた場所にある装置のボタンが押されたことをリアルタイムで把握したり、簡単な操作で家族にメッセージを送ったりすることができます。

準備

必要なもの

  • M5Stack Nano C6
  • USB Type-Cケーブル
  • Wi-Fi環境
  • LINEアカウント
  • Arduino IDE

事前準備

https://docs.m5stack.com/en/arduino/arduino_ide

https://docs.m5stack.com/en/arduino/m5nanoc6/program

コードの解説

以下のコードをArduino IDEにコピー&ペーストし、M5Stack Nano C6に書き込んでください。

#include <M5NanoC6.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <Adafruit_NeoPixel.h>

#define NUM_LEDS 1
Adafruit_NeoPixel strip(NUM_LEDS, M5NANO_C6_RGB_LED_DATA_PIN, NEO_GRB + NEO_KHZ800);

const char* ssid = "your_ssid";
const char* password = "your_password";
const char* line_token = "your_line_token";

void setup() {
  NanoC6.begin();
  Serial.begin(115200);

  // RGB LEDのセットアップ
  pinMode(M5NANO_C6_RGB_LED_PWR_PIN, OUTPUT);
  digitalWrite(M5NANO_C6_RGB_LED_PWR_PIN, HIGH);
  strip.begin();
  strip.show();

  Serial.println("Connecting to WiFi...");
  
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    // 青色点滅:WiFi接続中
    setColor(0, 0, 255);
    delay(250);
    setColor(0, 0, 0);
    delay(250);
  }
  
  Serial.println("\nWiFi connected");
  // 緑色:WiFi接続成功
  setColor(0, 255, 0);
  
  Serial.println("Ready for button press");
}

void loop() {
  NanoC6.update();

  if (NanoC6.BtnA.wasPressed()) {
    Serial.println("Button pressed");
    sendLineNotify("Button was pressed on M5Stack Nano C6!");
  }

  delay(10);
}

void sendLineNotify(String message) {
  Serial.println("Sending LINE Notify...");
  // 黄色:LINE Notify送信中
  setColor(255, 255, 0);
  
  HTTPClient http;
  http.begin("https://notify-api.line.me/api/notify");
  http.addHeader("Content-Type", "application/x-www-form-urlencoded");
  http.addHeader("Authorization", "Bearer " + String(line_token));
  
  String postData = "message=" + message;
  int httpCode = http.POST(postData);
  
  if (httpCode > 0) {
    String payload = http.getString();
    Serial.println("HTTP Response: " + payload);
    // 緑色:送信成功
    setColor(0, 255, 0);
  } else {
    Serial.println("Error on HTTP request");
    // 赤色:送信失敗
    setColor(255, 0, 0);
  }
  
  http.end();
  Serial.println("LINE Notify sent");
  
  // 3秒後に緑色(準備完了状態)に戻る
  delay(3000);
  setColor(0, 255, 0);
}

void setColor(int r, int g, int b) {
  strip.setPixelColor(0, strip.Color(r, g, b));
  strip.show();
}

コードのポイント

  • ssidpasswordline_token には、それぞれ自分の環境に合わせて設定してください。
  • setup()関数では、M5Stack Nano C6とWi-Fiの初期設定、RGB LEDの設定を行います。
  • loop()関数では、ボタンAが押されたかどうかを常に監視し、押された場合はsendLineNotify()関数を呼び出します。
  • sendLineNotify()関数では、HTTP POSTリクエストを使ってLINE Notify APIにメッセージを送信します。
  • setColor()関数は、RGB LEDの色を設定します。

まとめ

本記事では、M5Stack Nano C6とLINE Notifyを使って、ボタン操作をLINEに通知する方法を紹介しました。

今回紹介した方法を応用すれば、例えば、

  • センサーの値をLINE Notifyで定期的に通知する
  • ボタンごとにメッセージを用意しておいて、お手軽IOTを実現する

といったことも可能になります。ぜひ、自分だけのIoTシステムを作ってみてください!

Discussion