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

почему скетч отправляет 2 смс?

привет. помогите пожалуйста. почему скетч отправляет 2 смс? использую программный и аппаратный (резистор+конденсатор) антизвон из этой статьи https://arduinomaster.ru/datchiki-arduino/ustranenie-drebezg-kontaktov-knopki/#i-5 и всё равно esp отправляет 2 смс. с промежутком 20с. алгоритм отправки смс взят отсюда https://esp8266.ru/forum/threads/otpravka-sms-s-servisa-sms-ru.3869/page-2 платка esp-01

Код:
    #include <Bounce2.h>;
    #include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
    #define PIN_BUTTON 2
  
    
    // Создаем объект
    Bounce debouncer = Bounce();

    
    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!"));

      // Устаовили тип пина
      pinMode(PIN_BUTTON, INPUT_PULLUP);
      // Даем бибилотеке знать, к какому пину мы подключили кнопку
      debouncer.attach(PIN_BUTTON);
      debouncer.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
      //Setup the LED :
      //pinMode(PIN_LED, OUTPUT);
    }

    
    void loop() {
      // Даем объекту бибилотеки знать, что надо обновить состояние - мы вошли в новый цкил loop
      debouncer.update();
      // Получаем значение кнопки
      int value = debouncer.read();
      // Теперь мы точно знаем, в каком состоянии находится наша кнопка
      if ( value == LOW ) {
        sendsms();
      }
      else {
        delay(200);
      }
    }



    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=1111&to=7111&msg=111&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 sendsms() {
getpr24h();
Serial.println("Wait 20s before next round to not get banned on API server...");
delay(20000);
}
 

gregvel

New member
не силен в библиотеке
#include <Bounce2.h>;
но здается мне лажа с переменной value
Можно попробовать выкинуть в порт состояние value и посмотреть что происходит.
 

nikolz

Well-known member
привет. помогите пожалуйста. почему скетч отправляет 2 смс? использую программный и аппаратный (резистор+конденсатор) антизвон из этой статьи https://arduinomaster.ru/datchiki-arduino/ustranenie-drebezg-kontaktov-knopki/#i-5 и всё равно esp отправляет 2 смс. с промежутком 20с. алгоритм отправки смс взят отсюда https://esp8266.ru/forum/threads/otpravka-sms-s-servisa-sms-ru.3869/page-2 платка esp-01

Код:
    #include <Bounce2.h>;
    #include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
    #define PIN_BUTTON 2
 
   
    // Создаем объект
    Bounce debouncer = Bounce();

   
    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!"));

      // Устаовили тип пина
      pinMode(PIN_BUTTON, INPUT_PULLUP);
      // Даем бибилотеке знать, к какому пину мы подключили кнопку
      debouncer.attach(PIN_BUTTON);
      debouncer.interval(5); // Интервал, в течение которого мы не буем получать значения с пина
      //Setup the LED :
      //pinMode(PIN_LED, OUTPUT);
    }

   
    void loop() {
      // Даем объекту бибилотеки знать, что надо обновить состояние - мы вошли в новый цкил loop
      debouncer.update();
      // Получаем значение кнопки
      int value = debouncer.read();
      // Теперь мы точно знаем, в каком состоянии находится наша кнопка
      if ( value == LOW ) {
        sendsms();
      }
      else {
        delay(200);
      }
    }



    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=1111&to=7111&msg=111&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 sendsms() {
getpr24h();
Serial.println("Wait 20s before next round to not get banned on API server...");
delay(20000);
}
предположу, что неправильно обрабатывается нажатие кнопки
надо обнаруживать один фронт, а у вас возможно оба, либо уровень
 
Сверху Снизу