ESP8266 Урок 6. Подключаем кнопку



Продолжаем учиться писать код для микроконтроллера ESP8266.

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

Работать также мы будем с платой NodeMCU.

Поэтому для начала давайте глянем распиновку ножек данного модуля

 

 

Следить за уровнем мы будем на ножке порта GPIO4, которая подключена к контакту D2. Чтобы обеспечить уверенный уровень сигнала при отключенной кнопке, мы применим подтягивание резистора программным способом. Ножка через данный резистор подтянется к шине питания, поэтому кнопку мы одним контактом подключим к D2, а вторым — к общему проводу (GND)

 

 

Проект сделан из проекта прошлого занятия с именем BLINK01 и имя ему было присвоено BUTTON01.

Как делать проекты из других, мы знаем из курса уроков по C.

Откроем наш проект в Eclipse.

 

 

Чтобы не было проблем с поиском COM-порта, а также чтобы при его смене в системе и не пришлось его менять во всех проектов, мы создадим общий файл сценария уровнем выше, то есть, не в каталоге с проектом, а в том каталоге, в котором у нас лежат все наши проекты (у меня, например, это папка ECLIPSE). Назовём этот файл common.mk и объявим и проинициализируем там две переменные — одну для номера порта, другую — для скорости работы с портом

 

 

Оператор присваивания ?= говорит о том, что присваивание у нас условное. В этом случае значение присваивается не жёстко и не навсегда и оно может быть переопределено в дальнейшем коде. Это делается для того, чтобы мы могли в каждом отдельном проекте присваивать своё значение данным переменным.

Откроем Makefile нашего проекта и подключим данный файл там в самом верху файла

 

 

Теперь в цели flash нашего Makefile заменим параметры нашими переменными

 

@$(ESPTOOL) -p $(PORT) -b $(BAUDRATE) write_flash --no-compress -ff 40m -fm dio -fs 32m 0x00000 build/app.out-0x00000.bin 0x10000 build/app.out-0x10000.bin

 

Перейдём в файл main.c и добавим макрос для номера порта кнопки

 

 

В функции main() настроим нашу ножку на работу в режиме обычного GPIO

 

 

Данная настройка производится аналогично настройке ножки GPIO.

Мы пока особо не будем вдаваться в то, какие регистры МК за что отвечают, хотя посмотреть мы это можем, не совсем всё удобно, но тем не менее. Если мы посмотрим макрос для регистра, значение которого мы только что изменили, то мы увидим следующее

 

#define PERIPHS_IO_MUX_GPIO4_U (PERIPHS_IO_MUX + 0x3C)

 

В данном случае, чтобы узнать адрес данного регистра, мы должны знать значение PERIPHS_IO_MUX и прибавить к нему смещение 0x3C.

Поэтому посмотрим макрос для PERIPHS_IO_MUX

 

#define PERIPHS_IO_MUX 0x60000800

 

Поэтому адрес регистра для нашей ножки — 0x6000083C.

 

 

Существует также XLS-файл с назначением ножек портов на официальном сайте, в котором есть список альтернативных функций для ножек портов.

Подтянем резистор к нашей ножке

 

 

Установим направление работы ножки на вход

 

 

Теперь наша ножка настроена и уровень на ней будет высоким, пока мы не нажмём кнопку.

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

 

 

Также давайте нашу самодельную задержку заменим штатной в микросекундах. Для этого сначала подключим определённый заголовочный файл из SDK

 

 

Функцию delay удалим вместе с телом.

В бесконечном цикле функции main() заменим вызываемую функцию задержки в обоих местах, также убавив значение аргумента

 

ets_delay_us(100000);

 

Соберём проект, прошьём контроллер.

Теперь наша мигалка будет работать только при условии, что кнопка будет находиться в нажатом состоянии

 

 

Итак, в данном уроке мы научились использовать ножку GPIO на вход и тем самым смогли отследить нажатие кнопки, подключенной к ней с помощью обнаружения изменения логического уровня.

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование МК ESP8266 Следующий урок

 

Исходный код

 

 

Модуль ESP NodeMCU можно купить здесь: Модуль ESP NodeMCU

Различные модули ЕSP8266 можно приобрести здесь Модули ЕSP8266

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

Многофункциональный переходник CJMCU FT232H USB к JTAG UART FIFO SPI I2C можно приобрести здесь ftdi ft232rl

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

ESP8266 Подключаем кнопку

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*