Как отправлять SMS из NodeMCU (ESP8266)

от автора

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


ссылка на оригинал статьи https://habr.com/ru/articles/869242/