Всем привет! У платформы МТС 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: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.

Комментарии (6)


  1. sav13
    24.12.2024 11:42

    А разве там бесплатный сервис СМС?

    В наше время нужно в TG канал отправлять


    1. michabramov Автор
      24.12.2024 11:42

      Нет, но бесплатно проверить работу можно, с помощью тестового баланса. SMS или TG, это уже зависит от задач пользователя


  1. msdmsd
    24.12.2024 11:42

    Столько ненужного текста, а про bearerToken, на котором все держится, где и как с ним, ни слова


  1. Jury_78
    24.12.2024 11:42

    На каком языке писать

    А где micropython?


  1. sansar
    24.12.2024 11:42

    если бы отправка sms шла через копеечный sim800 и т.п. альтернативным каналом - могла быть польза. А при использовании wifi доступа есть mqtt и tg


  1. Cib0rg
    24.12.2024 11:42

    Что я только что прочитал? SMS - резервный способ оповещения! То есть если интернет есть - лучше слать через какой-то tg, а если его нет (о чем, в целом, и надо быью послать оповещение) - то и смс не уйдут. Так что коллега выше прав полностью.