Получение SMS через SMPP Exolve на ESP8266
Всем привет! У платформы МТС 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
// Ваши настройки 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 открывает широкие возможности для создания умных устройств, работающих даже в условиях отсутствия интернета. Этот подход применим в различных сферах — от умного дома до промышленной автоматизации и других областей.