Как отправлять SMS с помощью ESP32


Хотите получать мгновенные SMS-уведомления с вашего ESP32 без использования громоздкого GSM-модуля? Будь то обнаружение движения, внезапное повышение температуры или несанкционированное открытие дверцы шкафчика, ваш ESP32 теперь может отправлять SMS-уведомления в режиме реального времени прямо на ваш телефон, используя только Wi-Fi и бесплатный API от Circuit Digest Cloud.

Как отправлять SMS с помощью ESP32

В большинстве проектов IoT требуется постоянно проверять приложение или веб-панель, чтобы оставаться в курсе событий. Но с этой интеллектуальной системой оповещений на основе SMS ваш ESP32 превращается в проактивного наблюдателя, отправляя важные обновления прямо в почтовый ящик вашего смартфона, даже когда вы не подключены к приложениям или панелям управления. И самое лучшее? Никаких ежемесячных платежей, никаких SIM-карт, только код и Wi-Fi.

В этой статье мы покажем вам, как считывать данные о температуре с датчика DHT11 и отправлять эти значения на смартфон в виде SMS-сообщений, используя плату ESP32. Итак, начнём.

Также на нашем сайте рассматривались и другие проекты по отправке SMS с помощью различных микроконтроллеров:

Как отправлять SMS без использования GSM?

Вместо того чтобы заставлять ESP32 напрямую зависеть от сотовых сетей, в этом проекте мы подключаем ESP32 к сети Wi-Fi и используем API Circuit Digest для отправки текстовых сообщений. Эти SMS API выступают в качестве посредника между ESP32 и сотовыми сетями. Вот как это работает:

Принцип отправки SMS с помощью ESP32 и API Circuit Digest 

ESP32 подключается к активной сети Wi-Fi — ESP32 подключается к точке доступа Wi-Fi для доступа в интернет, что позволяет ему взаимодействовать с API SMS.

ESP32 отправляет HTTP-запрос к API — всякий раз, когда ESP32 получает сигнал от датчиков, он отправляет HTTP-запрос к SMS API, содержащий номер телефона получателя, сообщение и действительный ключ API.

SMS API отправляет сообщение — SMS API проверяет, действителен ли ключ API. Если он действителен, то отправляет сообщение на номер телефона получателя через мобильную сеть, как обычное текстовое сообщение.

Таким образом, мы можем отправлять SMS с помощью ESP32 без необходимости использования GSM-модулей. Если вам интересно, как отправлять SMS с помощью GSM, ознакомьтесь с этим руководством по отправке SMS с ESP32 с использованием GSM.

Итак, на этом всё о работе устройства. Перейдём к компонентам, необходимым для отправки SMS-уведомлений с ESP32 через Интернет.

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Датчик температуры и влажности DHT11 (купить на AliExpress).
  3. Адаптер питания 5 В с кабелем для программирования.
  4. Макетная плата.
  5. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Внешний вид компонентов для нашего проекта представлен на следующем рисунке.

Внешний вид компонентов для нашего проекта

В качестве примера для демонстрации отправки SMS я использую датчик DHT11 для измерения температуры и заставляю ESP32 отправлять SMS-уведомления при возникновении определенного условия.

В зависимости от ваших задач, вы можете использовать любой датчик вместо датчика DHT11. Например, если вы хотите получать SMS-уведомления при обнаружении движения, вы можете выбрать PIR-датчик, используя в качестве примера это руководство по подключению PIR-датчика к ESP32.

Схема проекта

Настройка оборудования для отправки SMS с помощью ESP32 очень проста. Поскольку мы используем онлайн-API для отправки SMS, нам не нужно беспокоиться о сложных схемах подключения GSM. Вот принципиальная схема нашего SMS-отправителя на ESP32.

Принципиальная схема проекта для отправки SMS с помощью ESP32

Внешний вид аппаратной части схемы отправки SMS на ESP32 представлен на рисунке ниже. Выглядит просто, правда? Да, потому что ей не требуется никакого дополнительного оборудования, например, GSM-модуля. Для отправки SMS достаточно лишь подключения к интернету.

Для питания всей схемы через USB-порт ESP32 можно использовать источник питания 5 В. Далее мы рассмотрим, как сгенерировать ключ API для отправки SMS-сообщений.

Генерация ключа API

Прежде чем перейти к программированию, нам сначала нужно сгенерировать действительный SMS API от поставщика услуг облачных SMS-сообщений Circuit Digest, чтобы мы могли использовать возможности интернета для отправки SMS с нашего ESP32.

ШАГ 1:  Перейдите на сайт Circuit Digest Cloud по адресу « https://www.circuitdigest.cloud/ ». Затем нажмите кнопку login («Войти»). Вы будете перенаправлены на страницу входа, где вам нужно будет ввести свои учетные данные. Если у вас нет учетной записи, создайте новую, используя страницу регистрации.

Страница регистрации и входа на сервис Circuit Digest Cloud

ШАГ 2: После входа в систему вы найдете кнопку “My Account” («Мой аккаунт») в правом верхнем углу. Нажмите на нее, и вы будете перенаправлены на страницу генерации ключа API.

Главная страница сервиса Circuit Digest Cloud

ШАГ 3: На странице генерации ключа API вам будет предложено ввести капчу. После проверки капчи будет сгенерирован новый ключ API с лимитом в 100 SMS в месяц. Даже после истечения срока действия вы можете бесплатно его продлить.

Страница генерации ключа API на сервисе Circuit Digest Cloud

ШАГ 4: После этого просто прокрутите страницу вниз. Там вам будет предложено привязать номер мобильного телефона получателя для отправки SMS-уведомлений, а затем пройти проверку капчи и OTP-кода. Здесь вы можете привязать несколько номеров мобильных телефонов получателей для получения SMS-уведомлений.

Привязка номера телефона и ввод капчи на сервисе Circuit Digest Cloud

ШАГ 5: После привязки всех мобильных номеров получателей вы сможете проверить список привязанных телефонных номеров, как показано на изображении ниже.  

Список привязанных номеров телефонов на сервисе Circuit Digest Cloud

Встроенный шаблон SMS от Circuit Digest Cloud

Ранее мы рассмотрели как сгенерировать ключ API для отправки SMS из Circuit Digest Cloud для ESP32. Теперь мы узнаем о предопределенных шаблонах SMS и о том, как выбрать тот, который подходит для нашего конкретного приложения.

Идентификатор шаблона Тип шаблона Сообщение
101 Device Status Alert

Оповещение о состоянии устройства

Ваш {#var#} в данный момент находится по адресу {#var#}.
102 Temperature Alert

Предупреждение о перепаде температуры

Температура в {#var#} достигла {#var#}°C. Пожалуйста, примите необходимые меры.
103 Motion Detected

Обнаружено движение

Обнаружено движение в {#var#}. Немедленно проведите расследование.
104 Battery Low Alert

Предупреждение о низком заряде батареи

Уровень заряда батареи {#var#} критически низкий — {#var#}%. Немедленно зарядите.
105 Periodic Reminder

Периодическое напоминание

Ваш {#var#} в данный момент находится по адресу {#var#}.
106 Service Reminder

Напоминание об обслуживании

Пришло время провести техническое обслуживание вашего {#var#}. Последнее обслуживание проводилось на {#var#}.
107 Error Notification

Уведомление об ошибке

В {#var#} обнаружена ошибка {#var#}. Пожалуйста, немедленно устраните неполадку.
108 Door/Window Status

Состояние двери/окна

В данный момент переменная {#var#} заменена на {#var#}. Пожалуйста, обеспечьте безопасность.
109 System Reboot

Перезагрузка системы

Система {#var#} была перезагружена в {#var#}. Проверьте работоспособность.
110 Location Tracking

Отслеживание местоположения

Устройство {#var#} в настоящее время находится по адресу {#var#}.
111 Task Completion

Завершение задачи

Задача {#var#} успешно выполнена в {#var#}.
112 Connection Lost Alert

Предупреждение о потере соединения

Соединение с {#var#} было потеряно в {#var#}. Пожалуйста, проверьте сеть или устройство.
113 Maintenance Needed

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

Переменная {#var#} требует технического обслуживания. Обнаружена проблема: {#var#}.
114 Overload Alert

Предупреждение о перегрузке

Перегрузка сети {#var#}. Текущая нагрузка: {#var#}. Пожалуйста, сократите использование.
115 Unauthorized Access

Несанкционированный доступ

Обнаружен несанкционированный доступ в {#var#} по адресу {#var#}. Немедленно проверьте.

Здесь вы найдете список шаблонов SMS-сообщений, каждый из которых предназначен для конкретного сценария оповещения. Поскольку я использую датчик DHT11 для запуска SMS-оповещения на основе порогового значения температуры, я выберу «Шаблон оповещения о температуре с ID 102».

102 Предупреждение о перепаде температуры Температура в {#var#} достигла {#var#}°C. Пожалуйста, примите необходимые меры.

Итак, давайте обратим внимание на шаблон с ID 102, который понадобится в предстоящей части программирования ESP32. В приведенном выше шаблоне температуры вы можете заметить два параметра «#var#», которые пользователь может настроить.

Например, если я инициализирую глобальные переменные var1 и var2, присутствующие в предстоящем коде для ESP32, значениями «WAREHOUSE» и «30» соответственно, то SMS-уведомление при получении должно выглядеть примерно так.

Пример SMS уведомления предупреждения о перепаде температуры

Обзор кода Arduino

Прежде чем углубляться в подробное объяснение кода, давайте разберемся в основной логике этого кода на C++. Этот код заставляет ESP32 искать авторизованную точку доступа Wi-Fi и устанавливать соединение, используя учетные данные. Затем он инициализирует датчик температуры DHT11 для непрерывного получения данных о температуре.

Если температура достигает 30 градусов Цельсия или выше, ESP32 отправляет SMS-уведомление, используя SMS API. Хорошо, надеюсь, теперь вам всё понятно. Перейдём к программированию.

Заголовочные файлы:

Здесь,

  • WiFi.h — это специальная библиотека WiFi для платы ESP32, используемая для обработки задач, специфичных для WiFi, таких как подключение к авторизованной сети и отправка HTTP-запросов клиенту через WiFi.

  • DHT.h и DHT_U.h — это файлы, упрощающие процесс связи ESP32 с датчиком DHT11 по фирменному протоколу One-Wire.

Обратите внимание, что нам не нужно устанавливать файл «WiFi.h» отдельно, как мы это делаем для «DHT.h», поскольку он уже входит в состав платы ESP32, устанавливаемой через менеджер библиотек Arduino IDE.

Библиотеку «DHT11 Sensor» можно легко получить, щелкнув по имени ее заголовочного файла, как я упоминал выше. После загрузки ZIP-файла из репозитория GitHub вы можете установить ее либо через Arduino IDE, перейдя в Sketch -> Include Library -> Add ZIP Library и выбрав загруженный ZIP- файл, либо просто распаковав ZIP-файл в папку библиотек Arduino.

Макрос для определения контакта:

Здесь я использую макрос для определения того, к какому контакту датчика DHT11 будет подключен вывод данных ESP32. Мы также можем использовать переменную для хранения этих данных, но предпочтительнее использовать макросы вместо переменных, чтобы сэкономить место в памяти, особенно во встраиваемых системах.

Создание экземпляра класса DHT_Unified:

Это создает объект с именем «dht» для класса «DHT_Unified», который инициализирует датчик DHT11 для получения температуры, передавая в качестве параметра значение макроса «Temp_SensorPin», чтобы ESP32 мог получать данные с этого конкретного контакта.

Объявление глобальных переменных для хранения ценных данных

Эти переменные «ssid» и «password» используются для хранения учетных данных точки доступа Wi-Fi, к которой будет подключаться ESP32.

// Учетные данные API и информация для SMS
const char* apiKey = "xxxxxxxxxxxxxxx"; // Замените на ваш ключ API   
const char* templateID = "102"; // Замените на ваш ID шаблона
const char* mobileNumber = "91xxxxxxxxxx"; // Замените на номер мобильного телефона получателя с кодом страны (например: 91XXXXXXXXXX)
const char* var1 = "WAREHOUSE"; // Замените на вашу пользовательскую переменную
const char* var2 = "30"; // Замените на вашу пользовательскую переменную

Указанные выше переменные используются для хранения учетных данных SMS API, номера мобильного телефона получателя, а также идентификатора шаблона SMS и настраиваемых переменных. Убедитесь, что вы заменили «apikey» на сгенерированный вами новый ключ.

Здесь я также инициализирую значения «var1» и «var2» как «WAREHOUSE» и «30» , что отразится на итоговом SMS-сообщении, как я уже упоминал ранее.

Эта переменная используется для хранения данных о температуре, поступающих от датчика DHT11. В данном случае я изначально установил её значение равным нулю, чтобы избежать хранения некорректных данных.

Функция read_temperature() для получения данных о температуре:

Эта функция используется для считывания текущих данных о температуре с датчика DHT11 с помощью его предопределенных функций и сохраняет это значение в переменной «temperature». Затем она также выводит его на последовательный монитор для целей отладки.

Функция sensSMS() для запуска SMS-уведомлений через SMS API:

Эта функция SMS специально разработана для отправки SMS-уведомлений при вызове другими функциями. Сначала она проверяет, подключена ли сеть Wi-Fi, а затем создает Wi-Fi-клиент для установления соединения с сервером.

Затем программа формирует HTTP POST-запрос с необходимыми заголовками и JSON-данными, содержащими информацию об SMS-сообщении. После отправки запроса она ожидает код ответа сервера, чтобы определить статус отправки SMS.

Функция setup()

Прежде всего, программа подключает ESP32 к существующей сети Wi-Fi, используя свои учетные данные, а затем проверяет, подключена ли она к сети. Если да, то выводит IP-адрес ESP32.

Наконец, вызывается функция dht.begin(), чтобы подготовить датчик DHT11 к получению данных о температуре окружающей среды и отправке их на входной контакт ESP32.

Функция loop()

Функция loop() используется для непрерывного получения данных о температуре с датчика DHT11 и проверки, превышает ли она 30 градусов Цельсия или равна им. Если да, то запускается SMS-уведомление, и дальнейшие SMS-уведомления прекращаются до тех пор, пока температура не вернется к 28 градусам Цельсия.

Загрузка кода

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

Выбор платы ESP32 в Arduino IDE

После этого убедитесь, что в Arduino IDE правильно выбран последовательный порт ESP32. Иногда опция выбора порта недоступна (заблокирована), что означает, что в вашей системе не установлен необходимый драйвер USB-UART. Убедитесь, что он установлен.

Выбор последовательного порта в Arduino IDE

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

Кнопка загрузки программы в Arduino IDE

Тестирование работы проекта

Мы вступаем в самую захватывающую часть, да! Вы всё правильно поняли, мы находимся на заключительном этапе тестирования, чтобы наш ESP32 мог отправлять SMS-уведомления без необходимости использования сложных и дорогостоящих GSM-модулей.

Давайте проверим это.

Здесь вы можете увидеть, что ESP32 отправляет SMS-уведомление на мой телефон, когда температура достигает 30 градусов Цельсия.

Репозиторий GitHub с кодом и схемой


(Проголосуй первым!)
Загрузка...
117 просмотров

Комментарии

Как отправлять SMS с помощью ESP32 — 4 комментария

  1. Уж лучше использовать российские гейты, что бы на любой +7 можно было отправлять.

    • Если не сложно посоветуйте здесь в комментариях такие гейты. Я просто таких не знаю.
      А индийский сайт, сервис которого упоминается в данной статье, я с него очень много просто уже полезных статей перевел и ко многим есть слова благодарности в комментариях. Заслужил он, так сказать, доверие и мое, и пользователей моего сайта. А с этой вот статьей такая неувязочка вышла, к сожалению

    • Ну у всего бесплатного есть недостатки. Установите себе eSIM, которая может работать в Индии. Сейчас много разных акций по eSIM, можно взять бесплатный пакет с несколькими десятками Мб трафика

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

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