(中央の基板がESP8266DEVkit、右側の小さい基板がBMP280。)
前書き:
2019年初めのころ?ebayをうろついていたら、ESP8266DEVkitなるものを発見。5cmx3cmくらいのESP8266というSoCが搭載されたDevelopment Kitのボード。面白そうなので、ぽちってみた。しばらく放置していたのだが、夏になると部屋の中が暑くなるので室内にいるうさぎさんが暑かろう、と、室温が上がったらエアコンを入れるようなことをしようと、センサ(BME280-を買ったはずがBMP280がebayから届く、という迷走あり)を買い求め、一応温度が取れるようになったので、ここまでの備忘録、まとめ。
ESP8266DEVkitとは:
ESP8266DEVkitの詳細は、他を参照してもらうとして、一言でいうとこいつは、非常にコンパクトに作られたCPUが載った制御用ボード。なので、外部デバイス(今回は温度センサです)を接続して、ソフトを書いてあげると所望?の動作をしてくれます。
また、このDEVkitは、microUSBコネクタがついていて、スマホ接続につかうケーブル一本でPCとUSBでシリアル通信ができ、それだけで開発ができる、というのが良いところです。開発用のソフトは後述しますが、たくさんあって、Aruduino開発環境を使う方法、LUAという組み込み用、高速?スクリプト言語を使う方法、Pythonを使う方法、、、、どれでもどうぞ、ですが、私は、あえてLUAで制御する方法を選択しました。
今回作ったものの概要:
システム構成は、
ハード:ESP8266DEVkitに、i2cでBMP280を接続、micro-USBでパソコンのUSBにSerial接続してソフト書込み
ソフト:ESP8266側でnodeMCU、パソコン上でLUAを書いてESP8266にダウンロード、i2cでBMP280を制御、wifiを接続、MQTTを制御
動作的には、ESP8266でMQTT Brokerのサーバへ温度と気圧を定期的にMQTTパブリッシャとして送信する、というものです。MQTTのBloker(データ中継する)と、データの受信は、MQTTサブスクライバ(データを受信する方)ができるソフトを使ってデータを確認しました。これも後述します。
以下、コアな部品(ハードウェア/ソフトウェア)について概要を記載します。
ESP8266DEVkit:実はこれにも種類があります。コアチップであるESP8266は同じでも、複数種類あるようです。私はAmica社製のものを購入しました。ボードの裏にでかでかとAmicaと書いてあります。電源は開発中はmicroUSB経由でPCから、単体動作の場合は、やはりmicroUSB経由、ないしは、電池(3.3VでOK)で動かします。
BMP280とBME280:Bosch社のセンサ。今回使ったのは1cmx1.5cmくらいの基板に乗っかった、i2cで制御できるモジュールです。BME280は温度、湿度、気圧が測れるデバイス、BMP280は温度と気圧のみが測れるデバイスですが、売る側でも混同して売っているところがあります(これに引っかかった)。デバイス自体の形状は、正方形→BME280、長方形→BMP280、価格はBME280>BMP280(数倍違う感じ)。大陸でお買い求めの場合は、100円程度のものはたぶんBMP280です。
LUA:ブラジルの大学で作られたスクリプト言語だそうです。組込み、軽量、高性能ということでゲーム機やら、ヤマハのルータ、面白いところではnyaosというwindows用のShellがあるのだが、それの制御用にLUAがインプリされている。詳しくは他の方に譲ります。
i2c:i2cはインタフェースの名称なので詳しくは他の方の記載を参照していただくとして、概要はハードウェア側面/ソフトウェア側面がありますが、ハードウェア側の特徴はクロックとデータとグランドの3本で通信できる、ソフトウェア側は、今回nodeMCUの一部としてモジュールが提供されているので、それを使いました。
MQTT:Message Queueing Telemetry Transport。少ないデータを効率よく送る仕組みだそうです。よく知るところでは、FacebookMessengerでこのプロトコルを使っているようです。これもnodeMCUのモジュールとして組込み利用しました。MQTTの詳細については同様、詳しくは他の方に譲ります。
システム全体の概略図を以下に示します。