【IoT】ホームモニタリングシステムをESP8266で構築する(クライアント編)

ESP8266

ESP8266でホームモニタリングシステム構築

こんにちは、くろべこです。

前回からだいぶ日が空いてしまいましたが引き続きESP8266を使用したホームモニタリングシステムを構築していきたいと思いますよ。

今回はTCPソケット通信のクライアント側を構築したいと思います。サーバー編で作ったプログラムではTCPソケット通信による1対1通信なので、実質クライアントをスイッチさせながら通信を行えばいくらでもクライアントの数を増やすことが可能です。

とりあえずホームをモニタリングするために、温湿度&気圧を測定できる【BME280】を積んだクライアントプログラムを作成していきたいと思います。

ESP8266クライアントの配線を行う

配線といってもESP8266とBME280を繋ぐだけの簡単なお仕事です。インジケータ用のLEDも結線していますが、その程度です。

※LEDインジケータはサーバーとコネクションを開設しているときを点灯とし、コネクションが閉じているときを消灯とするために取り付けています。

ESP8266ホームモニタリングシステムClientプログラム

ちなみに、TCPソケット通信の状態遷移図の中で今回のクライアントはサーバーに対してコネクションの開設要求を行うアクティブオープンという立ち位置にあります。状態遷移図の詳細についてはmogulla3がまとめている記事がとってもわかりやすいので参考に見てみてください。

TCPソケット通信状態遷移図

とりあえずクライアントプログラムを紹介します。

今回のホームモニタリングシステムは最終的に複数のクライアントの接続を想定しているので、クライアントのIPアドレスは静的アドレスで設定します。設定方法は、Wifi.beginの前にWifi.config(ip, gateway, subnetmask, DNS)で設定を行います。今回はSTAモードで静的IPを設定するので、IPアドレスやサブネットマスクはipconfigなどで確認して良い感じのやつを設定してみてください。

プログラムを上から追っていくと、、、

【セットアップ】

  1. WifiをSTAモード&静的IPアドレスで起動させる
  2. BME280のイニシャライズを行う

【LED点灯用関数:SocketLed(uint8_t led, uint8_t pwm)】

  • 光量を調整したかったのでanalogWriteを使用しています。

【BME280データ取得用関数:GetRoomState()】

BME280から温度/湿度/気圧をゲットして、デリミタ(カンマ)で結合させた文字列を返り値とする。

【ループ】

  1. サーバーに対してコネクション開設要求を行う。開設できなかった場合は出来るまでループする。この時LEDは消灯。
  2. コネクションの接続確認が出来たらLEDを点灯。
  3. GetRoomState()返り値をデータとして送信。
  4. サーバーからのACK待ち(タイムアウト管理)
  5. 受信データ読み取り
  6. コネクションクローズ&LED消灯
  7. 再接続まで10秒待機

ざっくり説明するとこんな感じですね。

そこまで難しくないでしょ?このプログラムを複数作ってサーバーに送ってあげればホームデータを収集するモニタリングシステムの完成です。

ちょっとブレイクタイム(ESP8266に最適な入れ物)

今回のようにスタンドアローンのクライアントを作るときにESP8266を何かしらに格納したいと思います。そこでお勧めしたい入れ物が、Daisoに売っている【透明ケース(ミッキー)2個】です。

これに、アマゾンで安価に売っているミニブレッドボードがジャストフィットなんです。

クライアントのテスト動画

では、最後に今回作成したクライアント動作を動画に取りましたので紹介いたします。サーバーも一緒に映っているので察しが付くと思いますが、クライアントを3つ繋げています(第4オクテットが10,20,30)。各クライアントに対して3つのLEDを割り当てていてコネクションを開設しているクライアントに対応するLEDを点灯させています。

 

コメント

タイトルとURLをコピーしました