NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
Я не мог найти подходящего ответа в сети, поэтому пришел сюда в крайнем случае.
Поэтому я хочу использовать кнопку FLASH в качестве входного сигнала в методе loop ()
.
Есть ли способ проверить, нажата она или нет?
@sOnt, 👍14
5 ответов
Лучший ответ:
Кнопка flash на NodeMCU подключена между io 0
и землей. Вы можете использовать его как кнопку. Установите pinMode(0, INPUT_PULLUP)
, и вы прочитаете io 0
LOW, если кнопка нажата.
Схема NodeMCU
Чтобы перевести модуль в режим мигания, сначала необходимо удерживать кнопку flash и нажать кнопку сброса, только затем отпустить кнопку flash. Обычно сброс в режим мигания выполняется esptool автоматически перед загрузкой через USB. При этом используется схема, подключенная к последовательным линиям RST и DTS.
Я часто использую его в качестве входного сигнала, если нужен кнопочный ввод на платах. После начальной последовательности загрузки это просто еще один вывод ввода-вывода.
Просто чтобы завершить другие ответы, вот пример кода 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
Я рекомендую вам библиотеку 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();
}
Верхний ответ работает для меня только тогда, когда Nodemcu подключен через последовательный порт и включен "Последовательный монитор". (Это было неприятно, потому что он всегда работал всякий раз, когда я подключал последовательный монитор для отладки, а затем прекращал работать, когда я отключал его для автономной работы). Я думаю, это потому, что Nodemcu соединяет GPIO0 и GPIO16 с сигналами RTS и DTR UART. Кнопки работают только тогда, когда эти управляющие линии находятся в нужном состоянии, и это может быть не всегда так. См. третью страницу схемы по адресу https://github.com/nodemcu/nodemcu-devkit-v1.0/blob/master/NODEMCU_DEVKIT_V1.0.PDF
- Какие входные контакты я могу использовать на ESP8266 NodeMCU
- Можно ли запитать ESP8266E-12 любым из контактов 3,3 В?
- Обнаружение прерывания питания на NodeMCU
- NodeMCU - Vin контакт как выход 5V?
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- Как определить размер Flash?