Изчитане на бутон с ESP8266: Два примера с Arduino IDE

Управление на бутон с ESP8266: Два примера с Arduino IDE

ESP8266 е популярен модул за интернет на нещата (IoT), който предлага голямо разнообразие от възможности за свързване и контрол на електронни устройства. В тази статия ще разгледаме два примера за изчитане на бутон и управление на светодиод (LED), използвайки ESP8266 и Arduino IDE. Ще предоставим схеми на свързване и пълни обяснения на кода, за да можете лесно да ги възпроизведете и да разберете как работят.

Изчитане на състоянието на бутон

Този първи пример е прост и демонстрира как да четем състоянието на бутон, свързан към ESP8266. Когато бутонът е натиснат, ще се отпечата съобщение на серийния монитор.

В нашия случай ще използваме ESP8266 D1 mini, като може да разгледате ревюто за него в статията ни: ESP8266 D1 Mini – Малък, но Мощен Wi-Fi Микроконтролер

Примерен код за изчиатне на бутон с ESP8266:

int button = D1;               // Пин D1 се използва за бутон
int button_state = 0;           // Променлива за състоянието на бутона

void setup() {
  Serial.begin(9600);           // Стартираме серийната комуникация
  pinMode(button, INPUT_PULLUP); // Конфигурираме пина за бутон с вграден PULLUP резистор
}

void loop() {
  button_state = digitalRead(button);  // Четем състоянието на бутона

  if (button_state == false) {         // Проверяваме дали бутонът е натиснат (логическа ниско)
    Serial.println("бутона е натиснат"); // Печатаме съобщение в серийния монитор
    delay(250);                         // Закъснение, за да се избегнат нежелани повторни натискания (debouncing)
  }
}

Обяснение на кода:

  • button: Определяме пин D1 като вход за бутона.
  • pinMode(button, INPUT_PULLUP): Конфигурираме пина на бутона като вход с вграден pull-up резистор. Това означава, че пинът ще е логическа “1” (HIGH), когато бутонът не е натиснат, и “0” (LOW), когато бутонът е натиснат.
  • digitalRead(button): Извикваме функцията, която чете състоянието на бутона – дали е натиснат или не.
  • Serial.println(): Когато бутонът е натиснат, отпечатваме съобщение на серийния монитор.
  • delay(250): Добавяме малко закъснение, за да избегнем нежелани двойни отчети при бързо натискане и отпускане на бутона.

Схема на свързване:

Изчитане на бутон с ESP8266 Схема
  • Button: Свързваме един извод на бутона към D1 и другия към GND.
  • ESP8266: D1 е конфигуриран като вход, който чете състоянието на бутона.

Използване на бутон за контрол на светодиод

Във втория пример ще използваме бутона, за да управляваме светодиод. Натискането на бутона ще включи или изключи светодиода.

Примерен код за изчиатне на бутон с ESP8266 и управление на LED диод:

int button = D1;                // Пин D1 се използва за бутон
int button_state = 0;            // Променлива за състоянието на бутона
int button_count = 0;            // Брояч за следене на броя на натисканията

int led = D2;                    // Пин D2 се използва за светодиод

void setup() {
  Serial.begin(9600);            // Стартираме серийната комуникация
  pinMode(button, INPUT_PULLUP);  // Конфигурираме пина за бутон като вход с pull-up резистор
  pinMode(led, OUTPUT);           // Конфигурираме пина за светодиод като изход
}

void loop() {
  button_state = digitalRead(button);  // Четем състоянието на бутона

  if (button_state == false) {         // Проверяваме дали бутонът е натиснат
    button_count++;                    // Увеличаваме брояча при натискане на бутона
    
    if (button_count == 1) {           // Ако броячът е 1
      Serial.println("button_count = 1 || LED IS ON");
      digitalWrite(led, HIGH);         // Включваме светодиода
      delay(250);                      // Забавяне за да се избегне многократно отчитане
    }
  
    if (button_count == 2) {           // Ако броячът е 2
      Serial.println("button_count = 2 || LED IS OFF");
      digitalWrite(led, LOW);          // Изключваме светодиода
      button_count = 0;                // Нулираме брояча
      Serial.println("button_count = 0");
      delay(250);                      // Забавяне за да се избегне многократно отчитане
    }
  }
}

Обяснение на кода:

  • button_count: Използваме брояч, който следи колко пъти бутонът е натиснат. При първото натискане включваме светодиода, а при второто го изключваме.
  • pinMode(led, OUTPUT): Конфигурираме пин D2 като изход за управление на светодиода.
  • digitalWrite(led, HIGH) и digitalWrite(led, LOW): Управляваме състоянието на светодиода. HIGH го включва, а LOW го изключва.
  • button_count == 2: След като броячът достигне 2, светодиодът се изключва и броячът се нулира.

Схема на свързване:

Изчитане на бутон с ESP8266 с Arduino IDE и управление на LED диод
  • Button: Свързване на един извод на бутона към D1 и другия към GND.
  • LED: Катодът (късият крак) на светодиода се свързва към GND, а анодът (дългият крак) се свързва към пин D2 чрез резистор от 220Ω.

Заключение

Тези два примера илюстрират основните начини за изчитане на бутон и използването му за управление на устройства като светодиоди с ESP8266. В първия пример разгледахме как да четем състоянието на бутон, а във втория – как да използваме бутона за включване и изключване на светодиод. И двата примера могат лесно да се модифицират за други цели, като управление на релета или други електронни устройства.