概要
ESP8266(ESP-WROOM-02 以下 WROOM02) を使って、温度、湿度、照度、振動の各センサーから値を取得する。
はじめに
WROOM02 は Wi-Fi 通信機能が内蔵された Arduino (として使える IC) です。
Arduino UNO より高性能で、かつ、格安。秋月で550円。
http://akizukidenshi.com/catalog/g/gM-09607/
ブレッドボードで使えるように端子を2.54mmピッチに展開したモジュールなら650円。
http://akizukidenshi.com/catalog/g/gK-09758/
開発環境の構築は、先達が詳しくまとめてくれているので、そちらを参照。
技適済み格安高性能Wi-FiモジュールESP8266をArduinoIDEを使ってIoT開発する為の環境準備を10分でやる方法
WROOM02 は、A/D 変換は 1ch [10bit] だけ内蔵しています。今回は多種類のセンサーを繋げたいので、A/D コンバータ(MCP3008 8ch [10bit])を別途で用意します。
A/Dコンバータとは SPI プロトコルで通信します。WROOM02 はハード的には SPI プロトコルを使用可能です。しかしまだ、ドライバ的に正式サポートでは無いようです。先達が開発(ESP8266_SPI_Driver)してくれてますので、今回はそれを使用することにします。
回路図
回路図の作成には Eagle を使いました。Eagle は無料で高機能ですが、部品(マクロ)がほとんど整備されていなく、自分で用意する必要があります。
WROOM02 と A/Dコンバータ 等のマクロを含む、Eagle プロジェクト全体はこちらの Github にアップしています。
https://github.com/exabugs/eagleSensorProject
実際の回路図は以下。
SPI インタフェース部分と A/Dコンバータを繋げばよいです。
タクトスイッチ S1 は 書き込み/実行 モードの切り替えです。タクトスイッチ S2 はリセットです。
リセットした瞬間のモードで WROOM02 が起動します。
[注意]
- WROOM02 は 3.3V 駆動です。電源回路は別途足してください。
- USB-シリアル変換 のインタフェースは、回路図から外していますので、TXD/RXD, GND に適切に接続してください。
スケッチ
スケッチは以下になります。
- A/Dコンバータ との SPI 通信プロトコルが若干怪しいですが、0〜1,023 の値をうまくとれているので、あっていると思います。
- 各センサーの値は、それぞれ、適切に変換する必要があります。
- 振動センサーは一瞬なので、5msec でポーリング。他は 1sec でポーリングしてます。
extern "C"{
#include <spi.h>
#include <spi_register.h>
}
#include <Ticker.h>
Ticker ticker;
Ticker ticker2;
void setup() {
Serial.begin(115200);
Serial.print("\n");
spi_init(HSPI);
ticker.attach_ms(1000, timer);
ticker2.attach_ms(5, Angularity);
}
void loop() {
}
volatile uint32 angularity = 0;
void Angularity() {
uint32 val = check(3);
if (val > angularity) {
angularity = val;
}
}
void timer() {
uint32 val0 = check(0);
uint32 val1 = check(1);
uint32 val2 = check(2);
//uint32 val3 = check(3);
uint32 val3 = angularity;
angularity = 0;
uint32 val4 = check(4);
Serial.print(" Temperature:");
Serial.print(val0);
Serial.print(" Illuminance:");
Serial.print(val1);
Serial.print(" Humidity:");
Serial.print(val2);
Serial.print(" Angularity:");
Serial.print(val3);
Serial.print(" Test:");
Serial.print(val4);
Serial.print("\n");
}
uint32 check(int channel) {
uint8 cmd = (0b11 << 3) | channel;
const uint32 COMMAND_LENGTH = 5;
const uint32 RESPONSE_LENGTH = 12;
uint32 retval = spi_transaction(HSPI, 0, 0, 0, 0, COMMAND_LENGTH, cmd, RESPONSE_LENGTH, 0);
retval = retval & 0x3FF; // mask to 10-bit value
return retval;
}
SPIライブラリを含む、Arduino スケッチ 全体はこちらの Github から。
https://github.com/exabugs/sketchSensorProject
制作
実際に作ってみると、こんな感じです。
まとめ
ESP8266(ESP-WROOM-02 以下 WROOM02) を使って、温度、湿度、照度、振動の各センサーから値を取得しました。
Eagle で回路図を作成しました。
部品代 1,000円 くらいで、ここまでできるとは WROOM02 バンザイです。
次は、取得した値をクラウドに飛ばして、IoT ですかね。