В даній статті описую як підключити датчик вологості грунту до мікроконтролера ESP8266 NodeMCU і налаштовую сповіщення через telegram бот у випадку зниження показників вологості.
Table of Contents
Ідея
Задум полягає в тому, щоб розробити автономний IoT пристрій, який буде мати доступ до мережі інтернет та може моніторити покази датчика вологості грунту домашньої рослини, і при необхідності надсилатите повідомлення мені в telegram, нагадуючи про те, що потрібно полити рослинку. Моя реалізація це компіляція кількох проектів, посилання на які можна знайти в кінці публікації.
Компоненти для проекту
ESP8266 NodeMCU
ESP8266 NodeMCU – це популярна платформа для розробки проектів Інтернету речей (IoT) на базі мікроконтролера ESP8266. Вона призначена для підключення пристроїв до Wi-Fi мереж та Інтернету. Основні переваги цієї платформи:
- Вбудований Wi-Fi: Наявність вбудованого Wi-Fi дозволяє легко підключати пристрої до мереж та керувати ними віддалено через Інтернет.
- Компактний розмір: Невеликий розмір плати NodeMCU дозволяє використовувати її в малих пристроях та вбудованих системах.
- Підтримка Arduino IDE: Платформа підтримує Arduino IDE, що робить розробку програмного забезпечення зручною та доступною.
- Низька вартість: ESP8266 NodeMCU – це бюджетний варіант для створення IoT-проектів, що робить його доступним для широкого кола розробників.
- Широкі можливості: Платформа має велику кількість цифрових та аналогових входів/виходів, що дозволяє підключати різноманітні датчики, виводити інформацію на дисплеї та керувати актуаторами.
ESP8266 NodeMCU є популярним інструментом для розробки різноманітних IoT-проектів завдяки своїм функціональним можливостям, легкості використання та доступності.
Датчик вологості грунту
Датчик Capacitive Soil Moisture Sensor v1.2 – це електронний датчик, призначений для вимірювання вологості ґрунту за допомогою ємнісного методу. Він широко використовується в сільському господарстві, садівництві, тепличних умовах та інших додатках, де важливо контролювати рівень вологості ґрунту для оптимального зростання рослин.
Основні характеристики датчика Capacitive Soil Moisture Sensor v1.2:
- Принцип роботи: Датчик вологості грунту використовує принцип зміни ємності конденсатора, що утворюється між двома металевими пластинами. Чим більше вологи у ґрунті, тим більше ємність конденсатора.
- Аналоговий вихід: Датчик має аналоговий вихід, який може бути підключений до мікроконтролера, такого як Arduino або ESP8266 NodeMCU, для зчитування значень вологості та подальшої обробки даних.
- Низька енергоспоживання: Датчик використовує невелику кількість енергії, що дозволяє йому працювати довгий час від батарейного живлення.
- Проста установка: Його можна легко встановити у ґрунт або контейнер для рослин, і він почне надсилати дані про вологість.
- Калібрування: Датчик може бути калібрований для конкретних типів ґрунту, що дозволяє отримати більш точні результати вимірювань.
- Надійність: Датчик вологості грунту Capacitive Soil Moisture Sensor v1.2 відомий своєю надійністю та стабільністю в роботі.
Цей датчик є корисним інструментом для тих, хто займається вирощуванням рослин та хоче забезпечити їх оптимальну вологість для здорового росту. Завдяки його простоті використання та надійності вимірювань, він знаходить широке застосування у сільському господарстві та садівництві.
Підключаємо датчик вологості грунту
Схема підключення датчика вологоств грунту до мікроконтролера є простою і наведена нижче.

Програмне забезпечення
Створення телеграм-бота
Для початку нам потрібно створити чат-бот і отримати його токен. Як це зробити я описував у публікації по Rarspberry Pi і ви можете знайти деталі тут. Потім підставимо токен у програмному коді для параметра BOTtoken.
Також нам потрібен ідентифікатор свого користувача у телеграм. Для цього в пошуку додатка telegram напишіть IDBot і в чаті напишіть /start та /getid.

Цей ідентифікатор підставимо у параметр CHAT_ID в програмному коді.
Необхідні бібліотеки
Я використовував Universal Telegram Bot Library створену Brian Lough. Бібліотека надає простий інтерфейс до Telegram Bot API. Після завантаження бібліотеки імпортував її у Arduino IDE за допомогою Sketch > Include Library > Add.ZIP Library... Також нам необхідна ArduinoJson. Інсталювати її можна в Arduino IDE: Sketch > Include Library > Manage Libraries, набрати в пошуку “ArduinoJson” та інсталювати бібліотеку.
Програмний код
/*
* This ESP8266 NodeMCU code was developed by newbiely.com
*
* This ESP8266 NodeMCU code is made available for public use without any restriction
*
* For comprehensive instructions and wiring diagrams, please visit:
* https://newbiely.com/tutorials/esp8266/esp8266-soil-moisture-sensor
*/
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>
#define AOUT_PIN A0 // The ESP8266 pin ADC0 that connects to AOUT pin of moisture sensor
#define THRESHOLD 530 // CHANGE YOUR THRESHOLD HERE
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Initialize Telegram BOT
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" // your Bot Token (Get from Botfather)
// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
// message you
#define CHAT_ID "XXXXXXXXXX"
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
void setup() {
Serial.begin(115200);
configTime(0, 0, "pool.ntp.org"); // get UTC time via NTP
client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
// Attempt to connect to Wifi network:
Serial.print("Connecting Wifi: ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
bot.sendMessage(CHAT_ID, "Bot started up", "");
}
void loop() {
int value = analogRead(AOUT_PIN); // read the analog value from sensor
if (value > THRESHOLD) {
Serial.print("The soil is DRY (");
bot.sendMessage(CHAT_ID, "The soil is DRY!! Please water Me!", "");
}
else {
Serial.print("The soil is WET (");
bot.sendMessage(CHAT_ID, "The soil is WET. I'm good, thanks :)", "");
}
Serial.print(value);
Serial.println(")");
delay(20000);
}
Результат




Наступним етапом може бути автоматичне поливання рослини, але це вже тема для нової статті 🙂
Мені були дуже корисними публікації:
https://newbiely.com/tutorials/esp8266/esp8266-soil-moisture-sensor
https://randomnerdtutorials.com/telegram-esp8266-nodemcu-motion-detection-arduino/