はじめに
ことの発端はカーテンの開け閉めを自動化したくなった。
Google Homeに話しかけるなり照度センサで全自動なりで。
とりあえずググってみると製品があった。
けどカーテン自動化ごときに4,000円は高い。
めざましカーテン mornin’
となると自作でWi-Fiモジュールにモーター繋いでガチャガチャやればいいのかなって安価なWi-Fiモジュールを探してみました。
Wi-Fiモジュールいろいろ
まずは「ラズパイゼロW」とか手頃で良かったんだけど現状国内入手が困難。
窓の数だけ用意する必要があるので量産できなきゃダメです。
あとちょっとリッチすぎ感ある。
「FlashAir」も面白そうだけどそこそこ値が張る。
そんな中見つけたのが「ESP-WROOM-32」です。
1円玉程度のモジュールにWi-FiとBluetoothもついて700円!
しかもArduino IDEで開発できるという。
これは熱い。
早速秋葉へチャリを飛ばしゲット。
秋月ナウ。
— 田中みそ (@miso_develop) 2017年11月24日
ESP32ゲット! pic.twitter.com/ryFeffwzzA
私が購入したのは秋月電子の開発ボードのやつです。
USB変換とピッチ変換とスイッチついてます。
これでプロトタイプ作って量産はモジュールのみので行う予定。
ちなみに「ESP-WROOM-02」っていう旧型もあって、こっちはBluetoothついてなくてスペックも落ちるけど150円安いです。
やってみよう
というわけで環境構築~Google HomeでLチカまで、以下の手順で進めて行こうと思います。
- 開発環境構築
- PCとUSB接続してLチカまで
- IoTのHallo World
- ESP32→サーバ通信
- Wi-Fi繋げてHTTPアクセス
- これができればGETやPOSTでESP32のセンサ情報取得できるよね
- サーバ→ESP32通信
- ESP32へPush
- ここまでくればGoogle Homeからの操作もおっけー
なお↑でやること、既に偉大な先達の方々が情報を公開してくれています。
なので参考情報を添えつつ実施手順を箇条書きでサラサラっとまとめてきます。
無心でなぞってけばGoogle HomeでLチカできるはずです。
必要なもの
以下のものが必要になります。
- ESP32開発ボード
- PC(私はWindows10 Proを使用)
- USBケーブル(ESP32開発ボードの口はmicroUSB)
- ブレッドボード
- LED
- 抵抗
- 定電流ダイオード
開発環境構築
こちらの記事で完璧です。
ESP32(ESP-WROOM-32)でLチカ (WindowsでArduino IDE使用)
ESP32開発ボードならソフトウェアのとこから進めてけばおっけーです。
以下実際の実施手順です。
- Arduino IDEダウンロード&インストール
-
https://www.arduino.cc/en/Main/Software
- ダウンロードにちょっと時間かかったのでESP32を買いに行く前にダウンロードボタンをポチってから家を出ましょう
-
https://www.arduino.cc/en/Main/Software
- arduino-esp32(Arduino IDEをESP32対応させるやつ)ダウンロード
-
https://github.com/espressif/arduino-esp32
- 「Clone or download」よりダウンロード
-
https://github.com/espressif/arduino-esp32
- スケッチブック保存場所に「hardware/espressif/esp32」とディレクトリ作成し、ダウンロードしたzipの「arduino-esp32-master」配下を展開
- スケッチブック保存場所はArduino IDEの「ファイル > 環境設定」から確認できます
- Windowsなら「C:/Users/%USERNAME%/Documents/Arduino」 がデフォルトのはず
- スケッチブック保存場所はArduino IDEの「ファイル > 環境設定」から確認できます
- 「hardware/espressif/esp32/tools/get.exe」を実行
- ちょっと時間かかります
- PCとESP32をUSB接続
- IDE起動し以下設定
- 「ツール > ボード」で「esp32 dev module」選択
- 「ツール > シリアルポート」で一番下のCOM選択
- 私の環境では「COM5」でした
- Lチカ回路を組む
- ここの写真のみたく組めばおっけーです
- IDEにスケッチ(ソース)を書く
- ここのソースをコピペ
- 「スケッチ > マイコンボードに書き込む」でLチカ!
Lチカで満足 pic.twitter.com/GMdCtQ3Tcp
— 田中みそ (@miso_develop) 2017年11月26日
ESP32→サーバ通信
こちらの記事で完璧です。
ESP32 で無線LANを使う
- なんでもいいからサーバ立ち上げとく
- 私はNode.jsにてexpressを使いました
-
ここのESP32側コードをIDEにコピペ
-
SSID
、PASSWORD
、URL
を書き換える
-
- 「ツール > シリアルモニタ」でシリアルモニタを立ち上げておく
- 右下の「xxxx bps」ってやつを「115200 bps」に変えておく
- 「スケッチ > マイコンボードに書き込む」
- シリアルモニタに「Response: 200」とか出ればおっけ!
- URLにGETパラメータつけてサーバ側でパラメ取得とかやってみて下さい
サーバ→ESP32通信
こちらの記事で完璧です。
Google Home Mini を使って、声で ESP32 の LED を光らせてみた
サーバ→ESP32の通信をどう行うかですが、ESP32上にサーバ立ち上げてアクセスとかだとシンプルですが、Google Homeといったインターネットからのアクセスが面倒です。
上記の記事では「Blynk」というクラウドサービスを使っており、簡単にインターネットから自宅のESP32への接続を実現しています。
ということで手順です。
- Blynkプロジェクトを作成
- スマホアプリをインストール
- アプリ起動してアカウント作成
- 「New Project」よりプロジェクト作成
- 「Project Name」はご自由に
- 「CHOOSE DEVICE」で「ESP32 Dev Board」選択
- するとアカウント作成時に登録したメアドへメールが送られます
- Blynkライブラリをインストール
- メールのライブラリリンクからzipをダウンロード
- スケッチブック保存場所に展開(「libraries」と「tools」)
- IFTTT Applet作成
- 「this」は「Google Assistant」の「Say a phrase with a number」あたりで数値を引数にします
- フレーズとかはよしなに。よくわからない方はこちら参照下さい
- 「that」は「Webhook」
- 「URL」に「http://188.166.206.43/xxxxxxxx/update/V1?value= {{NumberField}}」
- 「xxxxxxxx」はBlinkから届いたメールのAuth Tokenを
- 「Method」は「GET」、「Content Type」は「text/plain」、「Body」は空っぽで
- 「URL」に「http://188.166.206.43/xxxxxxxx/update/V1?value= {{NumberField}}」
- 「this」は「Google Assistant」の「Say a phrase with a number」あたりで数値を引数にします
- スケッチ作成
-
ここのソースをコピペ
-
auth
はメールのAuth Tokenを -
ssid
、pass
も書き換え
-
-
ここのソースをコピペ
- Lチカ回路を組む
- ここの図みたく組む
- スケッチ実行
- Arduino IDEにて「ツール > シリアルモニタ」でシリアルモニタを立ち上げておく
- 「スケッチ > マイコンボードに書き込む」で準備おっけ
- Google Homeに話かけてLチカしてみましょう
こんな感じ↓。
やたら震えてるの感動のせい。
Google HomeでESP32をLチカ pic.twitter.com/ZyvqukbVej
— 田中みそ (@miso_develop) 2017年11月26日
おわりに
電子工作慣れしてない私は最初ESP32の見てくれにビビりまくりでしたが、使ってみるとこんな簡単に通信できちゃうんだとびっくりでした。
まだまだ勉強することが沢山ありますが、カーテン自動化を実現できるよう挫けず進めていきたいと思います。