В даній статті описую як підключити датчик вологості грунту до мікроконтролера ESP8266 NodeMCU і налаштовую сповіщення через telegram бот у випадку зниження показників вологості.
Ідея
Задум полягає в тому, щоб розробити автономний 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/