Обнаружение протечек воды на базе NodeMCU и Wi-Fi с отправкой уведомлений

от автора

Всем привет! У платформы МТС Exolve есть сообщество, которое часто делится полезными гайдами от прокачки серверов до создания своих приложений. Наиболее интересные и подробные продолжаем размещать в нашем хабе.

Напомним, ESP8266 — это популярный микроконтроллер с поддержкой Wi-Fi, который широко используется в проектах Интернета вещей (IoT). Продолжим изучение возможностей интеграции API Exolve для ESP8266 благодаря гайду нашего пользователя и дополнением про SIP-звонок.

Защита от протечек воды — важный аспект безопасности и комфорта в любом доме. Быстрая реакция на утечку может предотвратить серьезные повреждения и затраты на ремонт. В этом проекте мы создадим автономную систему уведомления о протечке воды с использованием микроконтроллера NodeMCU, которая будет отправлять SMS-сообщения при обнаружении утечки.

Для реализации проекта нам потребуются следующие компоненты:

  1. NodeMCU (ESP8266) — микроконтроллер с поддержкой Wi-Fi.

  2. Датчик протечки воды — для обнаружения утечек.

  3. Питание — аккумулятор или блок питания для NodeMCU.

  4. Проводка и разъемы — для соединения компонентов.

  5. Бредборд и провода — для удобства сборки и тестирования.

Подключите датчик протечки воды к одному из цифровых пинов NodeMCU (например, D1):

  • Один вывод датчика соедините с пином D1 на NodeMCU.

  • Второй вывод датчика соедините с GND (землей).

Подключите NodeMCU к источнику питания. Вы можете использовать аккумулятор или блок питания. Убедитесь, что напряжение питания соответствует требованиям вашего NodeMCU.

Приведенный ниже код на языке C++ подключает NodeMCU к Wi-Fi сети, проверяет состояние датчика протечки и отправляет SMS через сервис МТС Exolve при обнаружении утечки.

#include <ESP8266WiFi.h>        // Подключаем библиотеку для работы с Wi-Fi #include <ESP8266HTTPClient.h>  // Подключаем библиотеку для HTTP-запросов #include <WiFiClientSecure.h>   // Подключаем библиотеку для HTTPS-запросов  // Замените эти строки на SSID и пароль вашей Wi-Fi сети const char* ssid = "YOUR_SSID"; const char* password = "YOUR_PASSWORD";  // Bearer токен для авторизации const char* bearerToken = "YOUR_BEARER_TOKEN";  // Настройки датчика протечки воды const int waterSensorPin = D1; bool sensorState = HIGH;  // Состояние датчика  void setup() {   // Инициализируем последовательный порт для отладки   Serial.begin(9600);   delay(10);    // Настраиваем пин датчика как вход   pinMode(waterSensorPin, INPUT_PULLUP);    // Подключаемся к Wi-Fi сети   Serial.println();   Serial.println();   Serial.print("Connecting to ");   Serial.println(ssid);    WiFi.begin(ssid, password);    while (WiFi.status() != WL_CONNECTED) {     delay(500);     Serial.print(".");   }    Serial.println("");   Serial.println("WiFi connected");   Serial.println("IP address: ");   Serial.println(WiFi.localIP()); }  void loop() {   int currentState = digitalRead(waterSensorPin);      if (currentState == LOW && sensorState == HIGH) {     sensorState = LOW;     sendSMS();   } else if (currentState == HIGH) {     sensorState = HIGH;   } }  void sendSMS() {   if (WiFi.status() == WL_CONNECTED) {  // Проверяем соединение с Wi-Fi     WiFiClientSecure client; // Создаем объект WiFiClientSecure     client.setInsecure(); // Отключаем проверку сертификата (для простоты, не рекомендуется для production)      HTTPClient http;      // Устанавливаем URL для POST-запроса     http.begin(client, "https://api.exolve.ru/messaging/v1/SendSMS");     http.addHeader("Content-Type", "application/json");     http.addHeader("Authorization", String("Bearer ") + bearerToken);      // Формируем JSON-данные     String jsonPayload = "{\"number\":\"SENDER_NUMBER\",\"destination\":\"RECIPIENT_NUMBER\",\"text\":\"СМС отправленный из NodeMCU: Обнаружена протечка!\"}";      // Отправляем POST-запрос     int httpResponseCode = http.POST(jsonPayload);      if (httpResponseCode > 0) {       String response = http.getString();       Serial.println(httpResponseCode);       Serial.println(response);     } else {       Serial.print("Error on sending POST: ");       Serial.println(httpResponseCode);     }      // Завершаем запрос     http.end();   } else {     Serial.println("Error in WiFi connection");   } }

Этот проект демонстрирует, как с использованием минимального набора компонентов и простого кода можно создать эффективное устройство для уведомления о протечке воды. С помощью NodeMCU и датчика протечки, а также сервиса отправки SMS через интернет, вы сможете своевременно обнаруживать утечки и предотвращать возможные повреждения имущества. 

Пара слов о способах обнаружения протечек

Протечки приводят к значительным финансовым затратам, появлению плесени и выходу из строя различных систем. Их можно разделить на явные и неявные, однако это разделение условно, так как неявные протечки со временем становятся явными, но могут принести больший урон.

Явные протечки

Простейший способ их обнаружения — визуальный осмотр, например, при регулярной проверке сантехнических узлов. Из плюсов: легко и просто реализуется. Минусы: неэффективно для выявления скрытых протечек и постоянная трата личного времени. Для этого типа протечек есть автоматические системы обнаружения.

Автоматизированные системы защиты от протечек

Они снабжены датчиками, которые фиксируют утечки и могут автоматически перекрывать воду.

Преимущества: высокая точность, возможность удаленного мониторинга и управления, автоматизация защиты от утечек.

Недостатки: высокая стоимость оборудования и его установки, необходимость настройки и обслуживания.

Скрытые протечки  

Для их выявления существуют простые методы косвенного определения через показания счетчиков:  

  1. Ручной — записывайте показания перед уходом и после возвращения. Если расход воды зафиксирован при отсутствии потребления (например, не использовались посудомоечная или стиральная машины), это может свидетельствовать о наличии скрытой протечки.  

  2. Автоматический с умными счетчиками. Аномальное потребление воды в режиме реального времени при отсутствии фактического расхода указывает на скрытую протечку.  

Также есть специализированные методы диагностики, которые требуют квалификации и недоступны обычным пользователям. Для их применения необходимо привлекать профессионалов:  

  1. Тепловизионный метод. Применяется для поиска утечек горячей воды или пара. Тепловизор фиксирует разницу температур и выявляет потенциальные места протечек.  

  2. Акустический метод. Чувствительные микрофоны улавливают шум, создаваемый протечкой, и могут обнаружить место утечки даже в подземных трубопроводах или внутри стен.  

  3. Корреляционный метод. Использует анализаторы вибраций, которые определяют точное место протечки даже в сложных условиях.  

  4. Измеритель влажности. Позволяет обнаружить зоны повышенной влажности в стенах или других конструкциях, что помогает определить место протечки без повреждения отделочных материалов.  

Уведомление через SIP-звонок

Ещё один вариант аварийного оповещения — звонок. Для реализации уведомления звонком о протечке понадобятся:

  1. ESP8266 — микроконтроллер с поддержкой Wi-Fi.

  2. Аккаунт на МТС Exolve — для получения данных доступа к SIP.

  3. Знание программирования на C++.

Для разработки SIP-клиента на базе ESP8266 вам потребуется использовать библиотеку для работы с SIP-протоколом и библиотеку для взаимодействия с аудио. К сожалению, ESP8266 имеет ограниченные возможности по сравнению с более мощными микроконтроллерами или платформами, такими как ESP32, поэтому создать полноценный SIP-клиент с голосовой связью на ESP8266 может быть сложно из-за ограничений по памяти и мощности.

Тем не менее, можно попробовать реализовать базовый SIP-звонок, который будет отправлять SIP-запросы и управлять соединением. Рассмотрим базовый пример кода на языке C++ с использованием библиотеки ESP8266WiFi для подключения к Wi-Fi и библиотеки SIP для работы с SIP-протоколом.

Подключите библиотеки для работы с Wi-Fi и SIP.

#include <ESP8266WiFi.h> #include <SIP.h>

Задайте параметры подключения к Wi-Fi сети.

const char* ssid = "your_SSID"; const char* password = "your_PASSWORD";  void setup() {   Serial.begin(115200);   delay(10);    // Подключение к Wi-Fi сети   WiFi.begin(ssid, password);   while (WiFi.status() != WL_CONNECTED) {     delay(500);     Serial.print(".");   }   Serial.println("");   Serial.println("WiFi connected");   Serial.println(WiFi.localIP()); }

Создайте объект SIP и настройте параметры SIP-сервера и пользователя. Данные берем из вкладки SIP на dev.exolve.ru.

void makeCall(const char* destination) {   if (sip.call(destination)) {     Serial.println("Call initiated through exolve.ru");   } else {     Serial.println("Call failed through exolve.ru");   } }

Добавьте код для выполнения исходящего звонка.

void makeCall(const char* destination) {   if (sip.call(destination)) {     Serial.println("Call initiated");   } else {     Serial.println("Call failed");   } }

В основном цикле вы можете реализовать проверку входящих звонков или выполнение исходящих звонков.

void loop() {   // Пример исходящего звонка   makeCall("sip:destination_user@sip.exolve.ru");    // Вы можете добавить код для обработки входящих звонков или других SIP-событий   delay(10000); // Задержка перед следующим звонком }

Замечания

  1. Аудио: этот пример не включает поддержку аудио, так как у ESP8266 нет встроенной поддержки аудио. Для реализации голосового звонка потребуется внешний аудио-модуль, например, VS1053, и более сложная реализация.

  2. Мощность: возможно, ESP8266 не справится с задачей полноценного SIP-клиента, особенно если потребуется обработка RTP потоков (реального времени). В этом случае лучше использовать ESP32, которая имеет больше ресурсов.

  3. Библиотеки: Возможно, вам потребуется поискать или адаптировать существующие библиотеки для работы с SIP и аудио.

Этот пример представляет базовую структуру для работы с SIP на ESP8266. Реализация полнофункционального SIP-клиента потребует значительных усилий и использования других платформ или дополнительных модулей.

Применение SIP-звонков через ESP8266

Микроконтроллер ESP8266, несмотря на свои ограничения, можно использовать для реализации базовых SIP-звонков для уведомлений о протечках и в других областях. Рассмотрим основные из них:

Управление устройствами по звонку

ESP8266 позволяет удаленно управлять устройствами через SIP-звонки. Например, открывать шлагбаум или включать свет в гараже при звонке на определенный номер.

Оповещения и уведомления

ESP8266 может инициировать SIP-звонки для отправки голосовых уведомлений. Примеры использования:

  • охранные системы: при срабатывании датчика движения устройство автоматически звонит на указанный номер;

  • уведомления о завершении работы: например, станка или другого оборудования.

Базовая голосовая связь

С использованием внешних аудиомодулей (например, VS1053) на ESP8266 можно организовать простую голосовую связь. Это подходит для домофонов и систем связи с минимальными требованиями.

Реализация сложных процессов

С помощью API Exolve можно интегрировать ESP8266 с облачными сервисами для расширения функциональности. Например, управления через голосовые команды и интеграции с умным домом.

Кроме того, ESP8266 позволяет отправлять и принимать SMS.

Сравнение ESP8266 и ESP32 для реализации SIP-звонков

ESP8266, популярный микроконтроллер с поддержкой Wi-Fi, уже давно зарекомендовал себя как доступное и надежное решение для IoT-проектов. Однако с появлением его аналога — ESP32 — разработчики получили более мощную и функциональную альтернативу. ESP32 сохранил все преимущества ESP8266, такие как поддержка Wi-Fi и простота интеграции, но при этом добавил новые возможности.

Основные различия между ESP8266 и ESP32 можно описать следующим образом:

  1. Производительность: ESP32 быстрее, чем ESP8266, благодаря более мощному процессору.

  2. Оперативная память: ESP32 имеет больше оперативной памяти, что позволяет эффективнее обрабатывать SIP-протокол и RTP-потоки (голосовые данные).

  3. Bluetooth: ESP32 поддерживает Bluetooth, а ESP8266 — нет.

  4. Процессор: ESP32 двухъядерный, а ESP8266 — одноядерный. Двухъядерная архитектура позволяет разделять задачи: одно ядро может заниматься обработкой SIP-протокола, а второе — обработкой аудио, что повышает стабильность системы.

  5. Встроенная поддержка аудио: ESP32 оснащен встроенным I2S-интерфейсом, что упрощает подключение аудиомодулей и обработку звука. ESP8266 требует внешних модулей для работы с аудио.

  6. Стоимость: ESP8266 дешевле, чем ESP32.

  7. Поддержка сообщества: У ESP8266 более широкая поддержка сообщества, хотя разрыв между ними сокращается.

  8. Энергоэффективность: ESP32 более энергоэффективен.

Оба устройства предоставляют широкие возможности для реализации SIP-звонков и IoT-проектов. ESP8266 станет отличным выбором для базовых задач, в то время как ESP32 подойдет для более сложных. В зависимости от ваших требований и бюджета, вы можете выбрать оптимальное решение для автоматизации, связи и творческих проектов.


ссылка на оригинал статьи https://habr.com/ru/articles/898228/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *