Встроенные светодиоды HIGH и LOW кажутся перевернутыми

На плате ESP32 я пытаюсь использовать этот простой код для управления встроенным светодиодом.

Но если я установлю его на ВЫСОКИЙ, светодиод погаснет, если я установлю его на НИЗКИЙ, светодиод загорится (полностью яркий). Что может быть причиной этого ?

На плате есть один красный и один синий светодиоды, синим из которых можно управлять.

#define onboard_led 2

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

void loop() {
    digitalWrite(onboard_led, HIGH);
    // digitalWrite(onboard_led, LOW);
}

ОТРЕДАКТИРОВАНО: это была такая плата (я думаю, "Geekcreit"):

, 👍1

Обсуждение

Чтобы знать наверняка, вам нужно будет показать дизайн платы. Но нередко светодиоды расположены в цепи таким образом, что для их включения вы пропускаете ток через микросхему. Например, светодиод подключен примерно к 3,3 В --- РЕЗИСТОР --- СВЕТОДИОД --- GPIO_PIN. Когда GPIO становится НИЗКИМ (по направлению к земле), ваш ток течет и светодиод загорается. Также возможно, что вывод MCU подключен к транзистору, который инвертирует логику в дополнение к разгрузке текущей обработки на транзистор., @timemage

С вашей платой все в порядке. Ваша путаница вызвана тем, как подключен встроенный светодиод, как объяснил @timemage. Многие платы ESP имеют такое расположение встроенного светодиода, и вы также можете найти другое (внешнее) оборудование с активным низким уровнем управления. Если вы измерите вывод ввода-вывода, который подключен к внутреннему светодиоду, вы увидите, что когда он “ВЫСОКИЙ”, он находится на уровне 3,3 В (или близко к нему), как и должно быть., @StarCat

Я знаю, для новичка это звучит странно, но в этом нет ничего необычного. Некоторые микросхемы лучше пропускают ток (при подключении к земле), чем ток источника (при подключении к Vcc). Аналогичная инвертированная логика часто используется с кнопками, где входной вывод имеет подтягивающий резистор. В результате считывается НИЗКИЙ уровень при нажатии кнопки и ВЫСОКИЙ, когда кнопка не нажата. Если это немного запутывает вашу голову, вы можете инвертировать значение в коде, что может сделать его более интуитивно понятным для чтения. Например, digitalWrite(onboard_led, !HIGH);, где значение HIGH указывает на то, что вы хотите его включить, а ! автоматически инвертирует его., @Gerben

Хорошо, я понимаю, что это обычное дело. У меня нет подробных схем платы, но я добавил фотографию и название платы., @adrianTNT

@adrianTNT, к сожалению, есть много досок / подобных / этому. В той мере, в какой изображение может быть полезным, оно должно быть либо изображением вашей платы, либо тем, которое, как вы уверены, идентично. В противном случае это просто еще одна переменная., @timemage

@timemage Я обнаружил, что нередко светодиоды горят в обоих направлениях (ВЫСОКИЙ / НИЗКИЙ), так что для меня это достаточно хороший ответ :), @adrianTNT


1 ответ


Лучший ответ:

4

Как показано на этом изображении со страницы Okdo, посвященной управлению светодиодами, существует два способа управления светодиодом от выходного вывода GPIO:

https://www.okdo.com/project/gpio-led/?ok_ts=1605113937103

В случае активного ВЫСОКОГО напряжения высокая мощность GPIO включит светодиод, поскольку это приведет к выходу тока из контакта и через светодиод в землю.

В случае активного НИЗКОГО уровня НИЗКИЙ выходной сигнал GPIO будет пропускать ток от источника питания + V на вывод.

В вашем случае светодиод подключен в активной НИЗКОЙ конфигурации, и поэтому, чтобы включить его, вы должны установить пин на НИЗКИЙ уровень.

Я добавлю, что эти платы ESP32 производятся многими разными производителями, и не все они идентичны.

,