#376中級IoT

ESP32 IoT植物水やり(土壌センサー+ポンプ)

鉢の土が乾くとポンプがひとりでに動き、土の湿り具合をスマホでリアルタイムに確認できます。このプロジェクトは、アプリのIoTテンプレート土壌水分 + ポンプの手順ガイドです。ESP32、土壌水分センサー、リレー、小型水中ポンプで組み立てます。マイ工房 › デバイス › デバイスを追加から始めると、Ohmiがあなたのデバイスキーでコードを用意します。このページのコードは見本で、キーとWi-Fi情報は仮の値です。

0.0(0)
ESP32 IoT植物水やり(土壌センサー+ポンプ)
旅行中に植物を水切れにさせたくない人にぴったりのプロジェクトです。センサーが土の湿り具合を測り、あなたが決めたしきい値を下回るとリレーがポンプを動かし、土が十分に湿ったら止めます。値はスマホのグラフにたまっていき、しきい値の変更やポンプの操作もスマホからできます。ポンプはボードではなく専用の電池で動くので、水と電子回路を分けておくことや安全な配線も身につきます。
IoT · リモート操作最初のデバイスは無料

このデバイスをアプリから操作しよう

ESP32 または Raspberry Pi Pico W を Wi-Fi につなげば、スマホからオン/オフでき、計測値をリアルタイムで見られます。コードは Ohmi が用意するので、Wi-Fi 情報を入力して書き込むだけです。

アプリのテンプレート:土壌水分 + ポンプ

  • アプリのどこにある?ツールタブ、またはマイ工房 › デバイスから新しいデバイスを追加し、このテンプレートを選びます。
  • Arduino ライブラリArduino IDE でライブラリマネージャを開き、BlueGraysIoT を検索してインストールします。
アプリを無料でダウンロード

無料プランは 1 デバイス、1 グラフ、24 時間の履歴。プレミアムならデバイスとグラフを増やし、履歴も長く残せます。

回路図

ESP32 IoT植物水やり(土壌センサー+ポンプ) - Circuit

ソースコード

C++ (Arduino IDE)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 IoT植物水やり(土壌センサー+ポンプ)
4// ─────────────────────────────────────────
5// BlueGraysアプリのIoTテンプレート「土壌水分 +
6// ポンプ」です。土壌水分センサーが2秒ごとに測った値をアプリへ送り、水分が水やりのしきい値を下回るとリレーがポンプを動かし、しきい値より10ポイント上がると止めます。ポンプとしきい値はスマホからも操作できます。本物のコードは、アプリの中でOhmiがあなたのデバイスキーを使って用意します(マイ工房›デバイス›デバイスを追加)。ここにあるコードは見本で、デバイスキーとWi-Fi情報は仮の値です。ライブラリマネージャ:BlueGraysIoT(依存ライブラリも一緒に)。ボードは2.4GHzのWi-Fiにだけつながります。リレーはLOWでオンになります。安全のために:ポンプはボードからではなく専用の電池ボックス(単3形4本)から給電し、ボード、リレー、電池は水から離してふたのある箱に入れ、ポンプを空運転させないでください。
7//
8// ピン:
9//   GPIO34 -> 土壌水分センサー AO
10//   3V3, GND -> 土壌水分センサー VCC, GND
11//   GPIO26 -> リレーモジュール IN
12//   5V, GND -> リレーモジュール VCC, GND
13//   リレー COM -> 電池ボックス(+)、NO -> ポンプ(+)、ポンプ(-) -> 電池ボックス(-)。ポンプは専用の単3形4本で動かします
14//   Pico W:水分センサー AO GP26、リレー IN GP15
15
16/*
17 * 土壌水分 + ポンプ · BlueGrays IoT
18 * BlueGrays · bluegrays.com
19 * このコードは共有しないでください。デバイスキーとWi-Fiのパスワードが含まれています。
20 */
21
22#include <BlueGraysIoT.h>
23
24const char *DEVICE_KEY = "デバイスキー";
25const char *WIFI_NAME = "Wi-Fiの名前";
26const char *WIFI_PASSWORD = "Wi-Fiのパスワード";
27
28BlueGraysIoT bg(DEVICE_KEY);
29
30const int RELAY_PIN = 26;
31const bool RELAY_ACTIVE_LOW = true;  // 多くのリレーモジュールはLOWでオンになります
32void setRelay(bool on) { digitalWrite(RELAY_PIN, (on != RELAY_ACTIVE_LOW) ? HIGH : LOW); }
33const int SOIL_PIN = 34;
34const int SOIL_DRY = 3200;  // 乾いた土での読み取り値
35const int SOIL_WET = 1300;  // 湿った土での読み取り値
36int threshold = 30; bool pump = false; unsigned long lastReadMs = 0;
37
38void setup() {
39  Serial.begin(115200);
40  pinMode(RELAY_PIN, OUTPUT);
41  setRelay(false);
42  analogReadResolution(12);
43  bg.onSwitch("pompa", [](bool on) { pump = on; setRelay(on); });
44  bg.onNumber("esik", [](float v) { threshold = (int)v; });
45  bg.setDeadband("toprak", 1.0);
46  bg.setDebug(Serial);
47  bg.setLanguage(BG_LANG_EN);
48  bg.begin(WIFI_NAME, WIFI_PASSWORD);
49}
50
51void loop() {
52  bg.loop();  // ここで長いdelay()は使わないでください
53  if (millis() - lastReadMs >= 2000) {
54    lastReadMs = millis();
55    int pct = constrain(map(analogRead(SOIL_PIN), SOIL_DRY, SOIL_WET, 0, 100), 0, 100);
56    bg.send("toprak", pct);
57    // しきい値を下回ったらポンプをオン、10ポイント上回ったらオフ
58    if (pct < threshold && !pump) { pump = true; setRelay(true); bg.send("pompa", true); }
59    if (pct > threshold + 10 && pump) { pump = false; setRelay(false); bg.send("pompa", false); }
60  }
61}
62

よくある質問

このページのコードをそのままボードに書き込めますか?

書き込めますが、接続はできません。コードの中のデバイスキーとWi-Fi情報は仮の値です。アプリでマイ工房 › デバイス › デバイスを追加を開き、土壌水分 + ポンプのテンプレートを選ぶと、Ohmiがあなたのキー、ネットワーク名、パスワードでコードを用意します。そのコードをコピーして書き込みましょう。コード全体はあとからデバイス › コードとキーでも見られます。

Pico Wでも使えますか?

使えます。デバイスを追加するときにボードとしてPico Wを選んでください。コードは同じで、ピンと校正値だけが変わります。水分センサーはGP26(アナログ入力)、リレーはGP15です。Arduino IDEのボードマネージャで「pico」パッケージをインストールします。このページの回路と写真はESP32で作りました。

なぜポンプには専用の電池を使うのですか?

ポンプが流す電流とモーターの出すノイズで、ボードが再起動してしまうことがあるからです。そのためポンプは単3形4本の電池ボックスから給電し、リレーのCOMとNOだけを通します。ボードとは線でつながっていません。ボード、リレー、電池ボックスは水から離してふたのある箱に入れ、線のつなぎ目もぬらさないでください。ポンプは水の中でだけ動かします。空運転させると数分で熱くなって壊れます。ホースをつけるときやポンプを水から出すときは電池を外しましょう。

ポンプはいつ動きますか?手で操作するとどうなりますか?

ボードは2秒ごとに水分を測ります。アプリの水やりのしきい値(最初は30%)を下回るとポンプがオンになり、しきい値より10ポイント上がるとオフになります。この差があるので、ポンプが細かくオン・オフをくり返しません。ポンプのスイッチは手でも操作できますが、自動のルールが優先されます。土がしきい値より乾いているときにオフにしても2秒以内にまたオンになり、しきい値より10ポイント以上湿っているときにオンにしてもすぐオフになります。しきい値は鉢に合わせて調整してください。