NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()

Я не мог найти подходящего ответа в сети, поэтому пришел сюда в крайнем случае. Поэтому я хочу использовать кнопку FLASH в качестве входного сигнала в методе loop ().

Есть ли способ проверить, нажата она или нет?

ESP module with the flash button

, 👍14


5 ответов


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

17

Кнопка flash на NodeMCU подключена между io 0 и землей. Вы можете использовать его как кнопку. Установите pinMode(0, INPUT_PULLUP), и вы прочитаете io 0 LOW, если кнопка нажата.

Схема NodeMCU

Чтобы перевести модуль в режим мигания, сначала необходимо удерживать кнопку flash и нажать кнопку сброса, только затем отпустить кнопку flash. Обычно сброс в режим мигания выполняется esptool автоматически перед загрузкой через USB. При этом используется схема, подключенная к последовательным линиям RST и DTS.

,

2

Я часто использую его в качестве входного сигнала, если нужен кнопочный ввод на платах. После начальной последовательности загрузки это просто еще один вывод ввода-вывода.

,

3

Просто чтобы завершить другие ответы, вот пример кода Lua, который поможет вам начать работу

inpin=3 -- Select input pin - GPIO0 

function pressed()
    print("PRG Pressed")
end

gpio.mode(inpin,gpio.INT,gpio.PULLUP)
gpio.trig(inpin,"down",pressed)

При нажатии кнопки "Flash" или "PRG" выводится надпись "PRG Pressed". Вы можете выполнять дополнительную магию в этой функции.

Приведенный выше пример кода адаптирован из этого сообщения в блоге

Я использую эту плату от MakerFocus

,

7

Я рекомендую вам библиотеку EasyButton, вы можете использовать pin 0 (D3) в NodeMCU, если вы хотите использовать внешний модуль кнопки, вы можете подключить свою кнопку между контактом D3 и GND.

https://github.com/evert-arias/EasyButton

#include <EasyButton.h>

// Arduino pin where the button is connected to.
#define BUTTON_PIN 0

// Instance of the button.
EasyButton button(BUTTON_PIN);

// Callback function to be called when the button is pressed.
void onPressed() {
    Serial.println("Button has been pressed!");
}

void setup() {
    // Initialize Serial for debuging purposes.
    Serial.begin(115200);
    // Initialize the button.
    button.begin();
    // Add the callback function to be called when the button is pressed.
    button.onPressed(onPressed);
}

void loop() {
    // Continuously read the status of the button. 
    button.read();
}

,

2

Верхний ответ работает для меня только тогда, когда Nodemcu подключен через последовательный порт и включен "Последовательный монитор". (Это было неприятно, потому что он всегда работал всякий раз, когда я подключал последовательный монитор для отладки, а затем прекращал работать, когда я отключал его для автономной работы). Я думаю, это потому, что Nodemcu соединяет GPIO0 и GPIO16 с сигналами RTS и DTR UART. Кнопки работают только тогда, когда эти управляющие линии находятся в нужном состоянии, и это может быть не всегда так. См. третью страницу схемы по адресу https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF

,