開発】ESP8266を使って電池駆動の環境モニターを作っています。加えて照度を測定するようにしました。写真の左が1号機、真ん中が2号機、右が3号機です。RTCモジュール1~3号機のハードウェア構成を簡単に表にまとめました。DIP化キットを使いました。DeveloperはUSBシリアル通信モジュールやリセットスイッチなどが搭載され、コンパクトにまとめられています。価格は2,160円(2017年1月10日時点)。秋月電子さんのDIP化キットはUSBシリアル通信モジュールやリセットスイッチなどは外付けする必要がありますが、価格は650円(2017年1月10日時点)。Developerとあまり変わらない価格になります。USBシリアル通信モジュールはプログラムの書き込みやデバッグに必要ですが、同じものを複数台作るなら1台に搭載すればいいので、端末をたくさん作るならDIP化キットは有利です。1、2号機はリアルタイムクロック(RTC)モジュールを使いましたが、3号機は時刻をプログラムで管理し、空いたスペースに照度センサーNJL7502LとADコンバーターMCP3002を搭載しました。1号機は基盤むき出しでパゴダと呼ばれるカバーの中に入れました。2号機は温湿度・気圧センサーだけを外に出し、マイコン類は密閉ケースに入れました。3号機はブレッドボードと電池がぴったり入るケースが見つかったので、そのケースに入れ、ケースをパゴダの中に設置しています。5分間隔で測定しています。ESP8266はWi-Fiに接続する時に大きな電力を消費するので、データーは毎回送信せず、6回分まとめて30分に1回送信するようにしています。Ambientは複数回分のデーターをまとめて送るbulk_sendを提供しており、各回の測定時刻を引数として渡す必要があります。}時刻はsntpでネットから取得しますが、これも6回に1回、Wi-Fiに接続した時だけおこないます。sleepの前後で引き継げません。そこで、1、2号機はsntpで得た時刻をリアルタイムクロック(RTC)モジュールに保持し、Wi-Fiに接続しない回はRTCモジュールから測定時刻を取得しました。sleep時間を調べ、時刻をプログラムで管理することでRTCモジュールの使用をやめることができました。この件は「ESP8266で300秒deepSleepしたら実際に何秒眠るのか調べた」に書きました。3号機では、RTCモジュールを使わないことで生まれたスペースに照度センサーとADコンバーターを搭載しました。ADコンバーターのMCP3002がSPI通信でしかアクセスできないため、それまでI2C通信でアクセスしていたBME280もSPI通信でアクセスするように変更しました。センサーBME280をSPI通信でアクセスする」に書きました。1号機と3号機を比較した写真がこちらです。3号機の回路図はこちらになります。MCP3002は10ビットのADコンバーターで、3.3vで駆動しているので、1ビットの分解能は3.2mvになります。フォトトランジスターNJL7502Lのデーターシートには負荷抵抗を変えた時の出力電圧の特性があります。A」と書かれています。A」の定義が見つけられなかったのですが、自然光だとすると、負荷抵抗1kΩの場合は5Luxぐらいで3.2mvになるので、5Luxぐらい測定できることになりそうです。明るい方は4,000〜5,000Luxでサチりそうです。実際にはモニターを取り付ける位置やケースによる減光などの影響を受けますが、非常におおざっぱに言えば、一桁Luxから4,000〜5,000Luxまで測定できそうです。プログラムはGithubに公開しました。・https://github.com/TakehikoShimojima/SimpleWeatherStation1、2号機から送られるデーターは温度、湿度、気圧と電源電圧の四つです。3号機のデーターはこれに照度が追加されます。SQLのデーターベースを使っているため、データーベースの再構成などをしなくても、同じチャネルで途中からデーターの種類を増やすことができます。試行錯誤が必要な、プロトタイプ段階で使うIoTクラウドサービスとしては便利な機能だと思います。3号機は2017年1月15日に自宅のベランダに設置しました。データーはこちらのチャネルで公開しています。