Всем привет! У платформы МТС Exolve есть сообщество, которое часто делится полезными гайдами от прокачки серверов до создания своих приложений. Наиболее интересные и подробные продолжаем размещать в нашем хабе.
Напомним, ESP8266 — это популярный микроконтроллер с поддержкой Wi-Fi, который широко используется в проектах Интернета вещей (IoT). Одним из интересных применений ESP8266 является взаимодействие с телекоммуникационными платформами для получения и отправки SMS-сообщений через протокол SMPP (Short Message Peer-to-Peer).
В этом гайде пользователь объяснил, как с помощью микроконтроллера NodeMCU (ESP8266) и кнопки отправлять SMS через HTTP POST-запросы. В этой статье же статье будет гайд о том, как настроить и реализовать приём SMS-сообщений на ESP8266 через платформу Exolve и SMPP.
Подготовка к работе
Для реализации проекта понадобятся:
ESP8266 — микроконтроллер с поддержкой Wi-Fi.
Аккаунт на МТС Exolve — для получения данных доступа к SMPP-серверу (IP-адрес, порт, системный идентификатор и пароль).
Базовые навыки работы с Arduino IDE и знание программирования на C++.
Настройка ESP8266 для работы с SMPP
Ниже код на языке C++, который демонстрирует подключение ESP8266 к SMPP-серверу и получение SMS-сообщений. Код также включает отправку SMS для тестирования подключения.
Подключение к Wi-Fi и SMPP-серверу
#include <ESP8266WiFi.h> // Ваши настройки WiFi const char* ssid = "YOUR_WIFI_SSID"; // Замените на SSID вашей Wi-Fi сети const char* password = "YOUR_WIFI_PASSWORD"; // Замените на пароль от вашей Wi-Fi сети // Адрес и порт вашего SMPP-сервера const char* smppServer = "YOUR_SMPP_SERVER_IP"; // Замените на IP-адрес вашего SMPP-сервера const int smppPort = YOUR_SMPP_SERVER_PORT; // Замените на порт вашего SMPP-сервера (обычно 2775) WiFiClient client; void setup() { Serial.begin(9600); delay(10); // Подключение к 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()); // Подключение к SMPP-серверу Serial.println("Connecting to SMPP server..."); if (client.connect(smppServer, smppPort)) { Serial.println("Connected to SMPP server"); // Отправка команды привязки (bind_receiver) sendBindReceiver("YOUR_SYSTEM_ID", "YOUR_SYSTEM_PASSWORD"); // Замените на ваш system_id и пароль для SMPP-сервера } else { Serial.println("Connection failed"); } // Пример отправки SMS sendSMS("SOURCE_NUMBER", "DESTINATION_NUMBER", "Hello, this is a test message!"); // Замените номера и текст на свои данные } void loop() { // Проверяем, есть ли доступные данные if (client.available()) { uint8_t data[1024]; int len = client.read(data, 1024); if (len > 0) { parsePDU(data, len); } } // Проверка подключения клиента if (!client.connected()) { Serial.println("Disconnected from SMPP server"); client.stop(); // Попробуйте переподключиться if (client.connect(smppServer, smppPort)) { Serial.println("Reconnected to SMPP server"); sendBindReceiver("YOUR_SYSTEM_ID", "YOUR_SYSTEM_PASSWORD"); // Замените на ваш system_id и пароль для SMPP-сервера } else { Serial.println("Reconnection failed"); } } // Небольшая задержка для стабильности работы delay(1000); }
Реализация функций для работы с SMPP
Отправка команды привязки (bind_receiver).
Функция sendBindReceiver отвечает за отправку команды привязки (bind_receiver) к SMPP-серверу. Это необходимо для регистрации вашего устройства как приемника SMS.
void sendBindReceiver(const char* system_id, const char* password) { // Формирование и отправка команды bind_receiver byte pdu[23 + strlen(system_id) + strlen(password)]; int pduLength = 0; // Заголовок PDU (длина, команда, статус, sequence_number) pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 23 + strlen(system_id) + strlen(password); // длина PDU pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x01; // bind_receiver pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; // command_status pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x00; pdu[pduLength++] = 0x01; // sequence_number // system_id for (int i = 0; i < strlen(system_id); i++) { pdu[pduLength++] = system_id[i]; } pdu[pduLength++] = 0x00; // password for (int i = 0; i < strlen(password); i++) { pdu[pduLength++] = password[i]; } pdu[pduLength++] = 0x00; // system_type pdu[pduLength++] = 0x00; // interface_version pdu[pduLength++] = 0x34; // версия интерфейса // addr_ton pdu[pduLength++] = 0x00; // addr_npi pdu[pduLength++] = 0x00; // address_range pdu[pduLength++] = 0x00; // Отправка PDU client.write(pdu, pduLength); Serial.println("Sent bind_receiver"); }
Отправка SMS
Отправка SMS осуществляется с помощью функции sendSMS. Она формирует PDU для отправки SMS и передает его на SMPP-сервер. Отправка в этот раз пройдёт не через API запрос, как было раньше. И это работает столь же прекрасно на SMPP, даже быстрее.
void sendSMS(const char* sourceAddr, const char* destAddr, const char* message) { byte pdu[200]; // Размер PDU зависит от длины сообщения и других параметров int pduLength = 0; // Заголовок PDU (длина, команда, статус, sequence_number) pdu[pduLength++] = ... // ... продолжение формирования PDU // Отправка PDU client.write(pdu, pduLength); Serial.println("SMS sent"); }
Теперь копируете весь код, подставляете свои данные.
—---
Когда мы рассмотрели, как настроить ESP8266 для получения SMS через SMPP с использованием Exolve, перейдём к реальным примерам применения этой технологии.
Управление устройствами через SMS-сообщения открывает новые автоматизации в различных сферах — от умного дома до промышленных систем. Рассмотрим, как можно использовать ESP8266 для удалённого управления устройствами через SMS, а также приведем примеры.
Управление устройствами через SMS
Одно из важнейших применений микроконтроллера ESP8266 — удаленное управление устройствами через SMS. Такой подход полезен в ситуациях, когда нет доступа к интернету или он ограничен, но есть стабильное покрытие сотовой сети. Использование ESP8266 в сочетании с SMS-командами позволяет эффективно управлять умным домом, сельскохозяйственными системами, промышленным оборудованием и даже автомобильными системами.
Примеры применения
Управление умным домом
Представьте, что вы находитесь в дороге до дома и хотите заранее включить отопление или кондиционер перед своим возвращением. Для этого отправляете SMS с командой, например: включить отопление. ESP8266, получив сообщение, выполнит соответствующее действие. Для реализации системы можно использовать реле, подключенное к ESP8266, которое будет управлять отоплением или системой кондиционирования.
Подобных примеров достаточно, например, на Newbiely и Random Nerd Tutorials.

Мониторинг и управление сельскохозяйственными системами
ESP8266 можно применять в сельском хозяйстве для мониторинга параметров окружающей среды, таких как влажность почвы. Если система обнаруживает, что уровень влажности почвы ниже нормы, она отправляет SMS-оповещение поливочной системе, например: включить полив. ESP8266 получит сообщение и активирует полив, без необходимости постоянного подключения к интернету.
Промышленное оборудование
В промышленных условиях ESP8266 может использоваться для мониторинга состояния оборудования. Например, если датчик фиксирует перегрев двигателя, система отправит SMS-сообщение с предупреждением. Система управления, получив уведомление, может отправить сообщение для остановки двигателя или изменения его режима работы. Такой механизм позволяет оперативно реагировать на потенциальные неисправности, минимизируя простои и предотвращая серьезные поломки.
В качестве заключительного слова, использование ESP8266 для получения и отправки SMS через SMPP открывает широкие возможности для создания умных устройств, работающих даже в условиях отсутствия интернета. Этот подход применим в различных сферах — от умного дома до промышленной автоматизации и других областей.
