Всем привет! У платформы МТС Exolve есть сообщество, которое часто делится полезными гайдами от прокачки серверов до создания своих приложений. Наиболее интересные и подробные продолжаем размещать в нашем хабе.
В 2024 году количество подключённых IoT-устройств в мире выросло на 13% и достигло почти 19 млрд. При этом большинство решений должно иметь систему надёжного информирования в случае неожиданных сценариев.
В этом гайде пользователь на простом примере рассматривает, как с помощью микроконтроллера NodeMCU (ESP8266) и кнопки отправлять SMS через HTTP POST-запросы. Это полезно для создания различных IoT-устройств — мониторинга и умных домов.
На каком языке писать
NodeMCU (ESP8266) — микроконтроллер с поддержкой Wi-Fi, который идеально подходит для IoT-проектов. Он может легко подключаться к беспроводным сетям и управлять интернет-соединением, поэтому его выбирают для создания различных проектов автоматизации и умных устройств. Этот микроконтроллер можно программировать на нескольких языках.
JavaScript (Espruino)
Упрощённая версия JavaScript, подходит для быстрого прототипирования. Программировать на Espruino можно с помощью Espruino Web IDE, которая представляет собой онлайн-инструмент для микроконтроллеров, поддерживающих JavaScript, в том числе ESP8266.
Lua
Простой и компактный язык, встроенный в прошивку NodeMCU, который обеспечивает лёгкость и удобство работы. Программирование на Lua можно выполнять прямо через NodeMCU-прошивку, загружая код в микроконтроллер с помощью последовательного соединения.
C и C++
Это языки с высоким уровнем контроля и стабильности, поэтому они подходят для более сложных проектов. Программировать на C и C++ можно с использованием Arduino IDE, классического решения для микроконтроллеров, а также PlatformIO — мощной платформы, интегрированной с Visual Studio Code. Espressif SDK также поддерживает C и C++, предоставляет доступ к дополнительным функциям и настройкам ESP8266.
Эмуляторы
Если микроконтроллера ещё нет, а приступить не терпится и устройство в доставке, можно использовать онлайн-эмуляторы, которые позволяют тестировать код и моделировать поведение устройства в виртуальной среде:
- Wokwi — один из лучших эмуляторов для работы с ESP8266 и другими микроконтроллерами, такими как Arduino и ESP32. Wokwi позволяет загружать и тестировать код, строить виртуальные схемы и проверять работу компонентов в режиме реального времени. Этот инструмент идеально подходит для полного цикла — от тестирования простого кода до работы со сложными проектами. 
- Tinkercad Circuits — онлайн-инструмент для моделирования и тестирования схем с микроконтроллерами, главным образом Arduino. Хотя Tinkercad не поддерживает ESP8266 напрямую, он подходит для создания прототипов на базе Arduino и типовых экспериментов. Этот эмулятор полезен в освоении работы с электронными компонентами, до перехода к более сложным проектам на NodeMCU. 
Онлайн-эмуляторы позволяют не только писать и тестировать код, но и моделировать работу электронных схем с датчиками, светодиодами и другими компонентами. Они дают возможность опробовать проект без оборудования.
Отправляем SMS
Рассмотрим простой код для отправки POST-запросов с использованием NodeMCU (ESP8266) и библиотеки HTTPClient. Нам нужно отправить SMS через API при нажатии кнопки. Запрос включает в себя авторизацию с использованием Bearer-токена, а также отправляется по HTTPS.
#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 buttonPin = D1;
bool buttonState = HIGH;  // Состояние кнопки
void setup() {
  // Инициализируем последовательный порт для отладки
  Serial.begin(9600);
  delay(10);
  // Настраиваем пин кнопки как вход
  pinMode(buttonPin, 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(buttonPin);
  if (currentState == LOW && buttonState == HIGH) {
    buttonState = LOW;
    sendSMS();
  } else if (currentState == HIGH) {
    buttonState = 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");
  }
}Объяснение кода
Пройдёмся по коду, чтобы точно понимать его составляющие.
Подключение библиотек:
- ESP8266WiFi.h для подключения к сети Wi-Fi. 
- ESP8266HTTPClient.h для выполнения HTTP-запросов. 
- WiFiClientSecure.h для выполнения HTTPS-запросов. 
Константы для Wi-Fi и авторизации:
- ssid и password: ваши SSID и пароль для подключения к Wi-Fi. 
- bearerToken: ваш Bearer-токен для авторизации. 
Настройки кнопки:
- buttonPin определяет пин, к которому подключена кнопка. 
- buttonState отслеживает состояние кнопки. 
Функция setup():
- Инициализация последовательного порта для отладки. 
- Настройка кнопки как вход с подтягивающим резистором. 
- Подключение к сети Wi-Fi и вывод IP-адреса. 
Функция loop() проверяет состояние кнопки и вызывает sendSMS(), когда кнопка нажата.
Функция sendSMS():
- Проверяет соединение с Wi-Fi. 
- Создаёт объект WiFiClientSecure для HTTPS-запроса и отключает проверку сертификата (для простоты). 
- Создаёт объект HTTPClient, устанавливает URL и добавляет необходимые заголовки. 
- Формирует JSON-payload и отправляет POST-запрос. 
- Выводит код и тело ответа в последовательный монитор. 
- Завершает запрос. 
Не забудьте заменить SENDER_NUMBER и RECIPIENT_NUMBER на актуальные номера. Теперь при нажатии кнопки, подключённой к пину D1, NodeMCU отправит POST-запрос и выведет результат в последовательный монитор. Таким образом, вы можете настроить любые сценарии отправки SMS из NodeMCU, будь то уведомления, оповещения или другие автоматические сообщения. Если что, код на GitHub.
Что ещё
NodeMCU (ESP8266) — универсальный инструмент, и на его базе можно реализовать множество полезных проектов для дома. Например, систему, которая моментально уведомляет вас об утечке воды в ванной или кухне. Вы устанавливаете датчики протечки в стратегических местах, подключаете их к микроконтроллеру, который отслеживает сигналы и при срабатывании отправляет SMS с указанием проблемы.
Ещё одна идея — умная система орошения комнатных растений. Здесь датчики измеряют уровень влаги в почве, и если он падает ниже заданного порога, NodeMCU активирует насос или клапан для полива. Система также может отправлять вам сообщения с отчётом о том, когда был запущен полив и в каком состоянии находятся растения.
Для обеспечения безопасности дома можно создать систему уведомления об открытом окне или двери. С помощью контактных датчиков, установленных на дверях и окнах, NodeMCU обнаруживает подозрительную активность и отправляет сообщение на ваш телефон. Это особенно удобно, если вы часто бываете вне дома.
И наконец, интересный вариант — система управления освещением. NodeMCU подключается к осветительным приборам через реле и отправляет уведомления о включении или выключении света. При желании можно добавить функцию удалённого управления через SMS-команды или подключить Telegram-бота, чтобы включать свет перед возвращением домой или отключать его, если забыли сделать это при выходе.
Каждый из проектов улучшает удобство, безопасность или эффективность использования ресурсов в доме. NodeMCU даёт гибкость для добавления новых функций, позволяет создавать решения, идеально подходящие именно для ваших нужд. Экспериментируйте, пробуйте новые подходы, и ваш дом станет ещё умнее.
Заключение
Создание устройств с возможностью отправки SMS открывает широкие возможности для удалённого мониторинга и управления. NodeMCU (ESP8266) в сочетании с простыми компонентами, такими как кнопки и сенсоры, позволяет запускать множество проектов — от систем безопасности до умных домов. Надеюсь, этот материал был полезен и вдохновил вас на создание собственного решения в мире IoT.
Спасибо за внимание! И заходите в сообщество на форуме Exolve.
Подписывайтесь на наш Хаб, следите за новыми гайдами и получайте приз
Каждый понедельник мы случайным образом выбираем победителей среди новых подписчиков нашего Хабр-канала и дарим крутые призы от МТС Exolve: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.
Комментарии (9)
 - msdmsd24.12.2024 11:42- Столько ненужного текста, а про bearerToken, на котором все держится, где и как с ним, ни слова 
 - sansar24.12.2024 11:42- если бы отправка sms шла через копеечный sim800 и т.п. альтернативным каналом - могла быть польза. А при использовании wifi доступа есть mqtt и tg 
 - Cib0rg24.12.2024 11:42- Что я только что прочитал? SMS - резервный способ оповещения! То есть если интернет есть - лучше слать через какой-то tg, а если его нет (о чем, в целом, и надо быью послать оповещение) - то и смс не уйдут. Так что коллега выше прав полностью. 
 - alekseypro24.12.2024 11:42- Статья, ради пиара платного сервиса, который в наше время, мало кому нужен.  - telecomgod24.12.2024 11:42- Достаточно напомнить, что рынок смс-рассылок достигает около 40 млрд руб. Поэтому так или иначе есть те, кому похожие сервисы нужны  - alekseypro24.12.2024 11:42- Судя по тому, что примеры приводятся для NodeMCU, рассчитывают именно на простолюдин (всяких ардуинщиков), иначе было бы, что-нибудь более профессиональное, для бизнеса. 
 
 
 
           
 
sav13
А разве там бесплатный сервис СМС?
В наше время нужно в TG канал отправлять
michabramov Автор
Нет, но бесплатно проверить работу можно, с помощью тестового баланса. SMS или TG, это уже зависит от задач пользователя