Как отправлять 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 // Подключаем библиотеку для работы с Wi-Fi
#include // Подключаем библиотеку для HTTP-запросов
#include // Подключаем библиотеку для 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, ";");
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 и авторизации:
Настройки кнопки:
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: стильные рюкзаки, лонгсливы и мощные беспроводные зарядки. Победители прошлых розыгрышей и правила.