Всем привет! У платформы МТС 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/
Добавить комментарий