26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebアプリからWi-Fi物理スイッチを操作してみる

Last updated at Posted at 2017-12-31

はじめに

前回記事で作成したお手軽Wi-Fi物理スイッチをFirebase経由で操作することでGoogle Homeからだけでなく、Webアプリからも簡単に操作できるようにしてみます。

前回はESP32を使用しましたが、今回はESP8266が手元に届いたのでこちらで組んでみました。
ESP8266なら開発ボードが300円程度で入手できるので大幅なコストダウンができ、トータル500円ほどで作成することができました。

実際の動作

処理の流れ

image

いるもの

いるもの 価格(¥) 備考
ESP8266開発ボード 292  
サーボモーター 125 SG90
電池ケース 31 単3×2本
基盤 15 使わなくてもいいかも
ケース 34 100均で3箱セットのタッパーとかで適当に
合計 497  

前回のESP32構成の半額程度で済んじゃいました。

作り方

以下の流れで作っていきます。

  • Firebase Realtime Databaseの作成
  • Webアプリをデプロイ
  • 開発環境構築
  • 回路作成
  • ESP8266へソース書き込み
  • IFTTT Applet作成

Firebase Realtime Databaseの作成

Firebaseコンソールにてプロジェクトを作成し、以下のようにRealtime Databaseを作成して下さい。

プロジェクト名-xxxxx
 └ googlehome
   └ word: ""

そしてルールタブよりセキュリティルールを以下のように書き換えて下さい。
※プロジェクトIDを知ってれば誰でも読み書き自由のガバガバルールのなので管理に気をつけて下さい。

{"rules": {".read": true, ".write": true}}

Webアプリ

以下の過去記事の「作り方」を「デプロイ」まで実施してみて下さい。
WebからGoogle Homeを喋らせたり家電操作したりしてみる(作り方)

やることは単純で、ソース落としてFirebase Hostingへデプロイするだけです。

data.jsへ追記

上記の記事でGitHubからダウンロードした状態のdata.jsに物理スイッチ用のタブとボタンを追加します。
以下のコードを追記してみて下さい。

data.js
	{
		"name": "スイッチ", 
		"buttons": [
			{"name": "お風呂沸かし", "command": "esp8266 bath", "column": "1"},
		],
	},

command部のesp8266 bathという文字列が先程作成したFirebaseのRealtime Databaseへ書き込まれるとESP8266が反応し、サーボモーターを動かしてスイッチを押します。

また、その他既存のコードは必要に応じて削除したりカスタマイズしちゃって下さい。

開発環境構築

以下の2ステップを行います。
環境構築というと重い気分になりますが、結構さっくり終わります。

  • Arduino IDEとESP8266ライブラリのインストール
  • Firebaseライブラリのインストール

Arduino IDEとESP8266ライブラリのインストール

こちらの記事(Arduino IDE に Stable ( Staging )版 ESP8266 ボードをインストールする方法)の、
「1.Arduino IDE インストール」
「2.Arduino IDEのボードマネージャーにStable版ESP8266ボードをインストール」
を実施してみて下さい。
とても丁寧に解説されています。

「3.Arduino IDEの設定」は行わず、代わりにArduino IDEにて「ツール > ボード」より「NodeMUC 1.0(ESP-12E Module)」を選択して下さい。
シリアルポートもESP8266に相当するのを選択して下さい。
他の設定はデフォルトでおっけーです。

Firebaseライブラリのインストール

こちらの記事(ArduinoからFirebase(データベース)にアクセスする)より抜粋です。

ArduinoからFirebaseのAPIを叩くためのFirebaseArduinoというライブラリが公開されています。これをArduinoIDEに取り込みます。
まずzipファイルでダウンロードします。

次にArduinoIDEから「スケッチ-ライブラリをインクルード-.zip形式のライブラリをインストール...」と選択して、さきほどダウンロードしたzipファイルを選択します。

↑だけです。簡単です。

以上で開発環境構築は完了です。

ESP8266へソース書き込み

以下のソースをArduino IDEに貼っつけてESP8266へ書き込んで下さい。
FIREBASE_HOSTWIFI_SSIDWIFI_PASSWORDは自身の環境のものに書き換えて下さい。

# include <ESP8266WiFi.h>
# include <FirebaseArduino.h>
# include <Servo.h>

//Firebase情報
# define FIREBASE_HOST "xxxxxxxx-xxxxx.firebaseio.com"

//Wi-Fi情報
# define WIFI_SSID "xxxxxxxx"
# define WIFI_PASSWORD "xxxxxxxx"

//Firebase Realtime Database
# define PATH "googlehome/word"
String prefix = "esp8266 ";

//サーボ用のオブジェクト
Servo servo;

//15番PIN(D8)
int pin = 15;

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

  // connect to wifi.
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  Serial.print("connecting");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.println();
  Serial.print("connected: ");
  Serial.println(WiFi.localIP());

  //firebase
  Firebase.begin(FIREBASE_HOST);

  //servo
  servo.attach(pin);
}

//
void loop() {
  //Realtime Databaseの情報取得
  String word = Firebase.getString(PATH);
  if (word.indexOf(prefix) > -1) {
    //`esp8266 `を除いた文字列を取得
    String value = word.substring(prefix.length());
    if (value == "bath") {
      //サーボモーターを動かす
      servo.write(85);
      delay(500);
      servo.write(70);  //サーボモーターの押し込み具合はここで調節
      delay(500);
      servo.write(85);
      
      //Firebaseの情報クリア
      Firebase.setString(PATH, "");
    }
  }
  delay(1000);
}

回路作成

こんな感じに組みます。
201712311341160557.JPG

サーボモーターからは3色のケーブルが出ています。
それぞれのケーブルを以下のようにESP8266へ繋ぎます。

サーボモーター ESP8266 備考
茶色 GND GND
3.3V 電源
オレンジ D8(GPIO15) 信号

あとはGNDと電源に電池繋げて完成です。

ちなみにGPIOが基盤にプリントされてなくぱっと見どれがどこか分かないので、こちらの図を参考にしてみて下さい。
(今見返してみるとD4(GPIO02)、3.3V、GNDの並びに繋いだ方が配線すっきりですね…)

ここまで来ればWebアプリのボタンを押してESP8266と繋いだサーボモーターを動かすことができるようになります。

IFTTT Appletの作成

ついでにGoogle Homeからも音声操作できるようにしちゃいましょう。
IFTTTで以下のようにAppletを作成します。

「this」のレシピ

「Google Assistant」の「Say a simple phrase」で以下のように設定します。
image

「that」のレシピ

「Webhook」の「Make a web request」で以下のように設定します。
URLの「xxxxxxxx-xxxxx」の部分はFirebaseのプロジェクトIDに書き換えて下さい。
image

これでGoogle Homeに話しかけて物理スイッチを音声操作できるようにもなりました。

おわりに

Wi-Fi装置がワンコインで買えちゃうなんてやばいですね。
サーボモーター制御を応用してスマートロックなんかもそのうち作ってみようと思います。

さてもうすぐ2017年も終わりですね。
みなさま良いお年を。

26
25
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
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?