ESP-IR+TPH Monitorをブラウザから制御 (温度/湿度/気圧/赤外線制御 ホームIoT)

概要

スマホやPCのブラウザからボードを制御

ESP-WROOM-02をWebサーバーとして動作させ、スマートフォンやPCのブラウザから 温度、湿度、気圧の取得、赤外線送信、動作ログの取得などを行うESP-IR+TPH Monitor用のアプリケーション例です。

リッチなWebインターフェース

Bootstrapを使用することで、少ないコードでリッチなWeb画面を実現しています。 インターネット上のBootstrapコードを参照しているので、インターネットに接続されているWiFiが必要です。

別途VPNなどを使えば外出先からもアクセス可能

家庭内LANに繋がっていればアクセスできるので、VPNなどで外出先から家庭内LANに接続すれば、 外から情報を確認したり、家電の制御が可能です。

特定時刻に実行するサンプルコードあり

決まった時刻に特定の動作をさせるサンプルコードも含まれているので、 就寝前にテレビやエアコンを自動でOFFする 消し忘れ防止機能や、朝気温が低かったら自動で部屋を暖めるような応用も可能です。

Arduino IDEソースコード

プログラムはArduino IDE形式です。以下よりダウンロードして、お使いのArduino IDEで プログラムを書き込んでください。

Version日付ESP8266core変更履歴
2019_9_082019/9/82.5.2 / 2.5.0TimelyTaskManagerを最新版へ更新しました。動作に変更はありません。
2022_11_072022/11/72.5.2 / 2.5.0赤外線のフレームサイズが一部機器で32バイト以上になる場合があったため、フレームサイズを最大64バイトに増やしました。

サードパーティライブラリ

以下のサードパーティArduinoライブラリを使用しています。 ArduinoIDEの”ツール” > “ライブラリを管理”で開いたダイアログから、目的のライブラリを検索し、 ”インストール”を選択してインストールして下さい。ライブラリのインストール方法についての解説も用意しています。

ライブラリVersion内容
SdFat1.1.0SDカードの読み書きに使用します。標準のSDライブラリと違って長いファイル名が扱えるため、 こちらを使用しています。



プログラムの準備

IR-TPH-Server-Sample.inoファイルの13行目にお使いのWiFi SSIDとパスワードを入れてください。 Bootstrapコードをインターネット上から取得しているのでインターネットに接続されたWiFiをご使用ください。

const String wifiSSID = "yourssid";      // お使いのWiFiのSSIDを入力してください
const String wifiPass = "yourpassword";  // お使いのWiFiのパスワードを入力してください

デフォルトではSDカードにログ情報を書き込むようになっています。SDカードをFAT32でフォーマットし、 常にスロットに入れた状態でご利用ください。アクセス時にSDカードが無いとフリーズすることがあります。 SDまたはSDHC規格のものをご使用ください。SDXCには対応しません。

SDカードを使用せず、内蔵フラッシュのSPIFFS領域に書き込むように変更することも出来ます。 その場合はStorage.hの10行目のコメントを外してdefineを有効にしてください。

//#define STORAGE_SPIFFS    // SDカードの代わりに内蔵フラッシュのSPIFFSを使用する場合にコメントを外す

使い方

電源を入れてシリアルモニタを開いてプログラムを書き込んでください。 起動して正常にWiFiに接続すると以下のようにIPアドレスが表示されます。 同じWiFi上のPCやスマホのブラウザを開いて、http://IPアドレス/sensor.php を開いてください。

-----------------------
Program Start

WiFi Connected IP : 192.168.2.21
2016/11/19 20:54 TimelyTaskManager Started
2016/11/19 20:54 Web Server Started

以下のようにセンサー情報のページが表示されます。センサーが接続されていれば 現在の温度、気圧、湿度が表示されます。上部ナビゲーションより、ログ管理、赤外線、システム情報 ページに移動できます。更新ボタンを押すとセンサー情報が最新のものに更新されます。

センサー情報ページ

以下はログ管理ページです。ログ開始ボタンを押すと1分おきに温度、気圧、湿度を ファイルに記録していきます。停止を押すと記録を中止します。 クリアを押すと記録していたファイルを消去します。 ダウンロードを押すと記録したファイルをcsv形式でダウンロードできます。 表計算ソフトなどでグラフ化することもできます。

ログ管理ページ

以下は赤外線登録、送信ページです。最初は登録データがありませんので送信ボタンは無効になっています。 オレンジ色の登録ボタンを押すと、ボードが赤外線受信待ち状態になりますので、お使いのリモコンの ボタンを押して登録したいデータを送信してください。正常に受信されるとデータがファイルに記録 され登録済になります。 登録済みの番号に対応した緑色の送信ボタンを押すと、登録済みデータがボードの赤外線LEDから送信されます。 登録ボタンを押してから十数秒たつとタイムアウトになり、受信待ち状態から抜けます。 登録済みの番号に再度登録すると、上書きされます。 赤外線はNECとAEHAフォーマットのみの対応でSONYフォーマットは対応していません。 また、機器によってタイミングなどが異なるため、プログラムの調整が必要になる場合がございます。

赤外線登録、送信ページ

以下システム情報のページです。ストレージ消去を押すと選択中のストレージ(SDカードか 内蔵フラッシュSPIFFS領域)を全て消去します。この動作にはしばらく時間がかかりますので 応答が戻るまでしばらくお待ちください。 また、デフォルトではシリアルモニタに表示する内容を動作ログとして保存しています。 動作ログ消去ボタンで消去、動作ログDLボタンでログファイルをダウンロード出来ます。 ボードの管理などにご利用いただけます。 動作ログを無効にするにはStorage.hファイルの28行目opLogStorageをfalseに設定してください。

システム情報ページ

デフォルトではIR-TPH-Server-Sample.inoファイル206行目のeveryMorning関数を毎朝6時、 212行目のeveryNight関数を毎晩23時に実行するようになっています。 内容を編集することで決まった時間にエアコンを止めるなどの応用ができます。

void everyMorning(){
  Storage::opLog(timelyTaskManager->getTimeStr() + " Every morning task\n");
  // 毎朝実行したい処理な記述 (気温が一定以下ならエアコンをつける、等)
}

void everyNight(){
  Storage::opLog(timelyTaskManager->getTimeStr() + " Every night task\n");
  // 毎晩実行したい処理を記述 (消し忘れ防止のためにエアコンOFF信号を送る、等)
}

定期実行処理の設定はIR-TPH-Server-Sample.inoファイル73行目で行っています。 値を変えることで時間などを変更できます。

  // TimelyTaskManager
  timelyTaskManager = new TimelyTaskManager(3);              // 初期化 最大3タスク登録
  timelyTaskManager->setDailyTask(1, 6, 00, everyMorning);   // 毎朝6時にeveryMorning関数を実行
  timelyTaskManager->setDailyTask(2, 23, 00, everyNight);    // 毎晩23時にeveryNight関数を実行