Как стать автором
Поиск
Написать публикацию
Обновить
43.5
Exolve
Конструктор омниканальных диалогов для бизнеса

Получение SMS через SMPP Exolve на ESP8266

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров3.7K

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

Напомним, ESP8266 — это популярный микроконтроллер с поддержкой Wi-Fi, который широко используется в проектах Интернета вещей (IoT). Одним из интересных применений ESP8266 является взаимодействие с телекоммуникационными платформами для получения и отправки SMS-сообщений через протокол SMPP (Short Message Peer-to-Peer).

В этом гайде пользователь объяснил, как с помощью микроконтроллера NodeMCU (ESP8266) и кнопки отправлять SMS через HTTP POST-запросы. В этой статье же статье будет гайд о том, как настроить и реализовать приём SMS-сообщений на ESP8266 через платформу Exolve и SMPP.

Подготовка к работе

Для реализации проекта понадобятся:

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

  2. Аккаунт на МТС Exolve — для получения данных доступа к SMPP-серверу (IP-адрес, порт, системный идентификатор и пароль).

  3. Базовые навыки работы с 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 открывает широкие возможности для создания умных устройств, работающих даже в условиях отсутствия интернета. Этот подход применим в различных сферах — от умного дома до промышленной автоматизации и других областей.

Теги:
Хабы:
Всего голосов 9: ↑9 и ↓0+10
Комментарии7

Публикации

Информация

Сайт
exolve.ru
Дата регистрации
Дата основания
Численность
501–1 000 человек