Форум

Отправляем SMS через NodeMCU (ESP8266)

Привет всем!

Я хотел бы поделиться с вами своим опытом отправки 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-запрос.
  • Выводит код ответа и тело ответа в последовательный монитор.
  • Завершает запрос.

Не забудьте заменить YOUR_SSID, YOUR_PASSWORD, и YOUR_BEARER_TOKEN на актуальные данные вашей сети и токена, а также SENDER_NUMBER и RECIPIENT_NUMBER на актуальные номера. Теперь при нажатии кнопки, подключенной к пину D1, NodeMCU отправит POST-запрос и выведет результат в последовательный монитор.

Таким образом, вы можете настроить любые сценарии отправки SMS из NodeMCU, будь то уведомления, оповещения или другие автоматические сообщения.

Надеюсь, это поможет кому-то, кто столкнулся с похожей задачей. Если у вас есть вопросы или предложения по улучшению, не стесняйтесь делиться!

Удачи!

Проект на Gihub

ar_master
ar_master
19 июля 2024 в 18:24
3
199
Открытая тема
0 баллов

Для того, чтобы оставлять комментарии, необходимо пройти авторизацию

Авторизоваться
Отличный проект!

Отдельная благодарность что отредактировали и добавили ссылку на Github:) Ждем еще от вас интересных решений :like:  
moderator
moderator
0 баллов
22 июля 2024 в 11:28
А ведь хорошо!

Надо тоже поиграть с микроконтроллерами, а то валяется ардуинка  ;)  
kali
kali
0 баллов
25 июля 2024 в 00:13