• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Отправка смс с сервиса SMS.RU

Alexey1

New member
Кто сталкивался с задачей отправки СМС модулем ESP8266NodeMCU. Помогите!!! Зарегистрировался на SMS.RU. Там можно отправить смс сообщение HTTP запросом в таком виде:
https://sms.ru/sms/send?api_id=4B378CF7-9789-EFA6-DDCF-5DDAD1E73E1B&to=79086899809,74993221627&msg=hello+world&json=1

Как этот запрос прописать в скетче?
Или может кто знает другой способ.
 
Последнее редактирование:

NeoroN

Member
http - NodeMCU Documentation
Код:
http.get("https://sms.ru/sms/send?api_id=4B378CF7-9789-EFA6-DDCF-5DDAD1E73E1B&to=79086899809,74993221627&msg=hello+world&json=1", nil, function(code, data)
    if (code < 0) then
      print("HTTP request failed")
    else
      print(code, data)
    end
  end)
 

NeoroN

Member
Сам значит код не дает, а ты ему весь дай.
А нету его - прото запрос в пример вставил.

Хотя для LUA прошивки собранной с нужными библиотеками(модулями) на NodeMCU custom builds этого кода достаточно.

На C++ код будет другой и его будет больше, намного а мне лень писать много.
 

Сергей_Ф

Moderator
Команда форума
@Alexey1 кто вам мешает его посмотреть по ссылке? Вам же дали готовый пример. Работающий.
 

NeoroN

Member
Для начала всегда делают структурную схему программы а потом уже подгоняют код под языки и API библиотек.
Если ты понимаешь как должна работать программа - то язык вообще не важен и сводится к чтению документации по синтаксису языка.
В этой отправке смс думаю что нужна функция фоматирования и urlencode для конвертации текста сообщения(а то не все может отправиться) или вообще использовать метод post с JSON содержимым в utf-8.
 

gregvel

New member
void peredachasms(){

Serial.println("GoTo Funktion peredachasms...");
Serial.print("peredacha na otpravky v SMS: "); Serial.println(massage);

const char* host = "sms.ru";
String IDkey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String phone = "380xxxxxxxxxxxxx";

if(WiFi.status() == WL_CONNECTED){

if (client.connect(host, 80))
{
Serial.println("connect sms server");
client.print( "GET /sms/send?");
client.print("api_id="+IDkey+"&to="+phone+"&msg="+massage+"&json=1");
client.println( " HTTP/1.1");
client.print( "Host:" );
client.println(host);
client.println( "Connection: close" );
client.println();
client.println();
Serial.println("send sms");

//----- Ответ сервера
Serial.println("[Response:]");
while (client.connected())
{
if (client.available())
{
String line = client.readStringUntil('\n');
Serial.println(line);
}
}
client.stop();
Serial.println("\n[Disconnected]"); // "Отключено"
//-----------------
Serial.println("___________________________TABLE status_code__________________________");
Serial.println("Smotri na https://sms.ru/api/send");
Serial.println("______________________________________________________________________");


} else Serial.println("Error connect sms.ru");
} else Serial.println("Error connect WiFi");


}


Добрый день сообщество :)
Алексей, лови кусок кода....раньше работал без проблем.
Вроде все понятно, забей переменную massage, свой ID и телефон.
Пробуй, удачи.
 

Rovki

New member
Не будет работать ,сейчас защищенное соединение https , порт 443
 

gregvel

New member
Возможно не будет, я годик назад писал...тогда работало.
Решил поделится....для старта человеку так сказать :)
 

Rovki

New member
Так в видео есть ссылка на проект ,провер ,работает сейчас
 

Rovki

New member
В любом случае спасибо ,что откликнулись ,а ТС что то молчит ...
 

gregvel

New member
Добрый день, сообщество :)
Не знаю актуально или нет, но скину пример проверенного кода для отправки смс
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>

void setup() {
Serial.begin(115200);
Serial.println(F("\n\r* * * ESP BOOT * * *"));
Serial.println(F("WiFi begin!"));
WiFi.mode(WIFI_STA);
WiFi.begin("сеть??????", "пароль??????");

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

Serial.println(F("\n\rWiFi connected!"));
}

void getpr24h() {
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
client->setInsecure();
HTTPClient https;

if (https.begin(*client, "https://sms.ru/sms/send?api_id=????...????&to=???телефон????&msg=hello+world&json=1")) { // HTTPS
Serial.println("[HTTPS] GET...");
int httpCode = https.GET();

// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
// file found at server?
if (httpCode == HTTP_CODE_OK) {
String payload = https.getString();
Serial.println(payload);

}
} else {
Serial.printf("[HTTPS] GET... failed, error: %s\n\r", https.errorToString(httpCode).c_str());
}

https.end();
} else {
Serial.printf("[HTTPS] Unable to connect\n\r");
}
}

void loop() {
getpr24h();
Serial.println("Wait 20s before next round to not get banned on API server...");
delay(20000);
}


Подставляйте свои значения сети, ID и телефона и все будет :)
может кому поможет, удачи
 
Сверху Снизу