Светодиод: подключение к ESP32 и Arduino

Светодиод

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

Как работает

Светодиод проводит ток только в одну сторону: от анода (длинная ножка, «+») к катоду (короткая ножка, срез на корпусе). Сам ток он не ограничивает — последовательно всегда ставят резистор. Для вывода 3,3 В и красного светодиода — 100–220 Ом, для 5 В — 220–330 Ом (точнее — калькулятором).

Включение — digitalWrite(вывод, HIGH), яркость — ШИМ: analogWrite(вывод, 0..255).

Выводы

ВыводНазначение
Aанод, плюс — длинная ножка
Cкатод, минус — короткая ножка, срез на корпусе

Подключение к ESP32

СветодиодESP32
AGPIO2 через резистор 220 Ом
CGND

Схема из примера «Мигание светодиодом».

Мигание светодиодом

Открыть пример целиком
Код скетча
// Мигание светодиодом на выводе D2.
const int LED = 2;

void setup() {
  pinMode(LED, OUTPUT);
}

void loop() {
  digitalWrite(LED, HIGH);
  delay(500);
  digitalWrite(LED, LOW);
  delay(500);
}

Подключение к Arduino Uno

СветодиодArduino Uno
AD8 через резистор 220 Ом
CGND

Схема из примера «Arduino Uno: таймер 1 ровно раз в секунду».

Arduino Uno: таймер 1 ровно раз в секунду

Открыть пример целиком
Код скетча
// Ровно одна секунда на аппаратном таймере.
//
// Проверка millis() в цикле опаздывает ровно настолько, насколько цикл
// был занят. Обычно это доли миллисекунды и никого не волнует; в часах
// за сутки набегает заметно, а в измерении частоты врёт сразу.
//
// Таймер считает сам и в момент совпадения вызывает прерывание. Цикл
// при этом может быть занят чем угодно.
//
// Откуда число 15624. Кварц 16 МГц, предделитель 1024:
//
//     16000000 / 1024 = 15625 тактов в секунду
//
// Счёт идёт с нуля, поэтому в регистр сравнения кладётся на единицу
// меньше. Ошибка на единицу здесь — это 64 микросекунды в секунду, то
// есть пять секунд в сутки.
//
// Таймер 1 выбран не случайно: таймер 0 обслуживает millis() и
// delay(), и трогать его нельзя.

const int LED = 8;
volatile bool tick = false;

ISR(TIMER1_COMPA_vect) {
  tick = true;
}

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);

  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  OCR1A = 15624;
  TCCR1B |= (1 << WGM12);                 // CTC: считать до OCR1A и обнуляться
  TCCR1B |= (1 << CS12) | (1 << CS10);    // предделитель 1024
  TIMSK1 |= (1 << OCIE1A);                // разрешить прерывание по совпадению
  interrupts();

  Serial.println("таймер пошёл");
}

void loop() {
  if (tick) {
    tick = false;
    digitalWrite(LED, !digitalRead(LED));
    Serial.println("секунда");
  }
}

В железе

Вывод ESP32 даёт 3,3 В: синему и белому светодиоду (около 3 В) на резистор остаётся мало, и они светят тускло. Для них — 5 В через транзистор или меньший резистор с оглядкой на ток.

Частые ошибки

Другие детали