身近な人たちが、みんなenebularを使い始めているので、私も少し触ってみることにしました(入門)。
普通であればLチカですが、今回はトイレを流します(何を言っているのか)。
#参考URL
完全に以下のリンク先の記事を参考にします。ほぼこちらの内容で、差分だけ後述します。
M5StackとFirebaseを使ってenebularとつないでみよう
https://blog.enebular.com/firebase/m5stack-firebase-enebular-collaboration/
#差分
##M5Stackのソースコード
M5Stackには以下のコードを書き込みます。
※別途、M5Stackに挿しているSDカードに待機中の画像とトイレを流した際の画像を入れておく必要があります。
#include <IOXhop_FirebaseESP32.h>
#include <M5Stack.h>
#include <WiFi.h>
#define WIFI_SSID "WIFI_SSID"
#define WIFI_PASSWORD "WIFI_PASSWORD"
#define FIREBASE_DATABASE_URL "XXXXXX.firebaseio.com"
// 赤外線LED
const int ledPin = 22;
//TOTOウォシュレットの流す赤外線信号データ
unsigned int data_nagasu[] = {601,297,59,50,64,160,69,45,67,45,64,45,64,48,66,48,67,44,59,50,59,53,66,47,62,159,64,48,61,50,61,53,64,45,64,47,64,48,61,53,67,43,66,45,64,48,69,44,67,156,61,48,61,164,67,154,61,51,61,50,64,50,61,48,61,162,61,52,64,157,61,162,61,53,64,45,64,48,61,50,61,3889,601,295,64,48,61,164,59,50,61,50,61,50,61,53,61,48,64,48,61,51,61,53,64,48,61,162,67,45,67,45,64,45,59,53,66,47,67,44,59,50,61,51,61,50,64,50,62,48,64,160,69,45,67,154,61,162,61,51,66,45,64,47,64,48,61,164,59,50,61,162,61,164,64,45,64,50,64,47,62,50,59};
unsigned long now;
unsigned long waitStartMicros;
void setup() {
M5.begin();
Serial.begin(115200);
M5.Lcd.fillScreen(BLACK);
M5.Lcd.setCursor(10, 10);
M5.Lcd.setTextColor(WHITE);
M5.Lcd.setTextSize(3);
M5.Lcd.printf("START");
pinMode(ledPin, OUTPUT);
// connect to wifi.
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("connecting");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println();
// WiFi Connected
Serial.println("\nWiFi Connected.");
Serial.println(WiFi.localIP());
M5.Lcd.println("WiFi Connected.");
M5.Lcd.println("");
Firebase.begin(FIREBASE_DATABASE_URL);
Firebase.setBool("/M5Stack/wash", false);
}
void loop() {
if(Firebase.getBool("/M5Stack/wash")) {
M5.Lcd.drawJpgFile(SD, "/wash.jpg");
M5.update();
sendSignal(data_nagasu,sizeof(data_nagasu)/sizeof(data_nagasu[0]));
delay(3000);
// Firebaseへ送信
Firebase.setBool("/M5Stack/wash", false);
delay(2000);
M5.Lcd.fillScreen(BLACK);
}
M5.Lcd.drawJpgFile(SD, "/wait.jpg");
M5.update();
}
/*
赤外線信号の送出
*/
void sendSignal(unsigned int *data, int dataSize) {
for (int i = 0; i < dataSize; i++) {
unsigned long dataLength = data[i] * 10;
now = micros();
do {
digitalWrite(ledPin, 1 - i % 2);
wait(8);
digitalWrite(ledPin, 0);
wait(7);
} while (long(now + dataLength - micros()) > 0);
}
}
void wait(signed long waitTime) {
waitStartMicros = micros();
while (micros() - waitStartMicros < waitTime) {};
}
赤外線LEDは以下のように22番とGNDに挿します。(長い方を22番に)
ちなみに、赤外線LEDの使い方は、蔵下さんの著書「センサーでなんでもできる おもしろまじめ電子工作」がすごく参考になります。
enebularのフロー
Deployボタンを押して設定完了です。
実際に動かしてみる
enebularからトイレを流してみた pic.twitter.com/JCPbhof2w0
— やまちょ (@yamacho1111) 2018年10月29日
現場からは以上です。