toyoshi

日記です

ESP32でBluetoothデバイスを作る(ドアの開閉チェッカーを作る)

2階建ての家に住んでいるのですが、自宅の2階に1人でいる時に1階で物音がして「あれ、誰か家に入ってきたかな?気のせいかな?」と不安になることがあります。なので家のドアが開いたかどうか簡単に知れる方法があるといいなと思っていました。

今日ちょうど知り合いの会社にいったら近接センサーの不用品があるということでもらえたので、上記の課題を解決してみることにしました。

全体像

  • ESP32と近接センサー(ドアセンサー)でドアの開閉をチェックする
  • MacとESP32をBluetoothで接続して状態を通知する

できた物

f:id:toyoshi:20200310185150p:plain

ESP32のコード

4番ピンに近接センサーをつけて入力があればBluetoothに出力するというコードにしました。

#include <Arduino.h>
#include "BluetoothSerial.h"

BluetoothSerial SerialBT;
//const char *pin = "0000";

int value;

void setup() {
  //SerialBT.setPin(pin);
  SerialBT.begin("DOOR-CHECKER");

  pinMode(4, INPUT);
}

void loop() {
  value  = digitalRead(4);
  if(value == 0){
    SerialBT.println(value);
  }
  delay(1000);
}

このコードを書き込むとBluetoothバイスとして認識され接続されます。感動。接続時に番号を要求されるときはSerialBT.setPin(pin);を使ってできるっぽいです。今回は0000でやったら接続できて、1度ペアリングするとそのあとは要求されなくなった。この辺りの仕様はよくわからないままになっています。

f:id:toyoshi:20200310175447p:plain

Mac側のコード

io.getsで入力を待って、入力があればAppleScriptで通知する感じです。Rubyで書きました。

serial_port = '/dev/cu.DOOR-CHECKER-ESP32SPP'

io = File.open(serial_port,'r')
loop{
  if io.gets
    `osascript -e 'display notification "玄関のドアが開きました"'`
  end
}

今後の課題

  • ESP32をdeep sleepなどを使って省電力化する
  • 今だとドアが開いている間は1秒毎に通知がくるので1度通知したら10分は通知しないとかにする

参考サイト