#はじめに
このエントリは、以下のエントリの続きです
育てている盆栽の水やりのタイミングを見える化したかったので、ESP-WROOM-02、土壌湿度センサーを使って、土の中の水分を測ります
ひとまず、ESP-WROOM-02にスケッチ(プログラム)を書き込んで、ブラウザにアナログセンサーの値を表示させてみたいと思います
#電子部品
- ESP-WROOM-02開発ボード(ピンソケット実装済) スイッチサイエンスで購入
- 土壌湿度センサー aitendoで購入
- 100Ωと200Ωの抵抗をひとつずつ
#参考
#計測
##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関数を使う
#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連携をしたい