Arduino
IoT
Eagle
ESP8266
ESP-WROOM-02

ESP8266 (ESP-WROOM-02) でセンサーを扱う

More than 3 years have passed since last update.


概要

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

実際の回路図は以下。

imagee.png

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


制作

実際に作ってみると、こんな感じです。

IMG_0255.JPG

スクリーンショット 2016-01-01 18.31.03.png


まとめ

ESP8266(ESP-WROOM-02 以下 WROOM02) を使って、温度、湿度、照度、振動の各センサーから値を取得しました。

Eagle で回路図を作成しました。

部品代 1,000円 くらいで、ここまでできるとは WROOM02 バンザイです。

次は、取得した値をクラウドに飛ばして、IoT ですかね。