[ESP-WROOM-02]ESP-WROOM-02+土壌湿度センサーでブラウザにアナログセンサーの値を表示させる


はじめに

このエントリは、以下のエントリの続きです

育てている盆栽の水やりのタイミングを見える化したかったので、ESP-WROOM-02、土壌湿度センサーを使って、土の中の水分を測ります

ひとまず、ESP-WROOM-02にスケッチ(プログラム)を書き込んで、ブラウザにアナログセンサーの値を表示させてみたいと思います

電子部品

参考

計測

1.計測部品の接続

ESP-WROOM-02の記事のanalogRead()の項目にある接続を参考に、ESP-WROOM-02と土壌湿度センサーを接続した

アナログ入力を行うにはTOUTピンを使う

それぞれの参考にあるように、TOUTピンには1V付近の電圧かけてあげる必要があるので、ESP-WROOM-02から出力される3.3Vを抵抗を使って分圧して、1Vくらいになるようにした
(200Ωと100Ωを使うことで3分の1の1.1Vになる想定)

手書きですが、回路図は以下

2.スケッチの作成

[ESP-WROOM-02]ブラウザにHelloWorldを表示させるで使ったスケッチを、アナログセンサーの値を読み込めるように修正する
(ArduinoIDEのメニューのファイル>スケッチの例>ESP8266WebServer>HelloServerを選択して、サンプルスケッチを使う)

Device Plus 第34回にあるように、analogRead関数ではなく、system_adc_read関数を使う

arduino
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* ssid = "自分のwifi環境のSSID";
const char* password = "自分のwifi環境のパスワード";

ESP8266WebServer server(80);

const int led = 13;

int analog_value = 0; // アナログセンサーの値を格納する変数の初期化

//ESP-WROOM-02でアナログ入力をするために必要
extern "C" {
#include "user_interface.h"
}

void handleRoot() {
  digitalWrite(led, 1);

  // アナログセンサーの値を取得するためsystem_adc_read関数を使う
  // センサーを水につけていない状態で1024を返すので、1024との差を水分の値とする
  analog_value = 1024 - system_adc_read();

  // 画面に表示するため、String型にキャストする
  String analog_value_str = String(analog_value);

  // htmlで出力 第三引数にhtmlタグを書ける
  server.send(200, "text/html", "<center><h1>soil solid sensor value is...</h1><font size='36'>" + analog_value_str + "</font></center>");
  digitalWrite(led, 0);
}

修正後、ESP-WROOM-02にスケッチを書き込む

ブラウザにIPアドレスを入力して土壌湿度センサーの値を表示する

水中から出した状態

水中に入れた状態

まとめ

RaspberryPi+ADコンバータで取得するよりも、関数ひとつで値が取得できるので、非常に楽。
次回は、twitter連携をしたい