LoginSignup
33
36

More than 1 year has passed since last update.

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

Last updated at Posted at 2016-01-01

概要

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 ですかね。

33
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
36