ESP8266 работа с GPIO
Для работы с периферией ESP8266 Espressif предоставляет SDK в котором сделана «обертка» для регистров в виде defines а также задефайнены некоторые функции, в последующем когда говорится «функция» имеется в виду дефайн/задефайненная функция.
ВАЖНО!
По умолчанию в esp8266 включен WDT таймер, необходимо или сбрасывать его или остановить (не рекомендуется)
system_soft_wdt_feed(void);
system_soft_wdt_stop(void);
Примечание: желательно использовать system_soft_wdt_feed(); как выяснилось при использовании system_soft_wdt_stop(); периодически может происходить сброс/ресет.
Функция настройки пинов:
Если открыть файл eagle_soc.h, то мы увидим что у GPIO2 есть несколько возможных функций сама GPIO и альтернативные (Uart0_Tx и Uart1_Tx)
Используем функцию инициализации пинов:
PIN_FUNC_SELECT(PIN_NAME, FUNC);
Настроем GPIO2 как пин ввода/вывода
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
Настройка порта:
gpio_output_set(uint32 set_mask, uint32 clear_mask, uint32 enable_mask, uint32 disable_mask);
Где:
Если мы хотим настроить пин на ЛОГ.1 — должны передать в set_mask номер маски пина
Если мы хотим настроить пин на ЛОГ.0 — должны передать в clear_mask номер маски пина
Если мы хотим настроить пин на ВЫХОД — должны передать в enable_mask номер маски пина
Если мы хотим настроить пин на ВХОД — должны передать в disable_mask номер маски пина
Пример:
Сделаем GPIO2 как логический ВЫХОД
gpio_output_set(0, 0, (1 << 2), 0);
Сделаем GPIO3 как логический ВХОД
gpio_output_set(0, 0, 0, (1 << 3));
Сделаем GPIO2 = лог.1
gpio_output_set((1 << 2), 0, 0, 0);
Сделаем GPIO2 = лог.0
gpio_output_set(0, (1 << 2), 0, 0);
Примечание: при работе с пинами можно использовать макросы и вместо (1 << 2) писать BIT2.
Включение/выключение подтягивающего резистора (для ВХОДА)
PIN_PULLUP_EN(PIN_NAME);
PIN_PULLUP_DIS(PIN_NAME) :
Функция для изменения состояния ПИНА:
GPIO_OUTPUT_SET(gpio_no, bit_value); //bit_value =0 или 1
Считывание состояния с ПОРТА:
uint32 gpio_input_get(void);
Считывание состояния с ПИНА:
GPIO_INPUT_GET(gpio_no); (по факту uint32 GPIO_INPUT_GET(gpio_no);)
______________________________
Примечание: gpio_no — номер пина, например 0,1,2,3…
Для использования встроенной функции задержки надо подключить
#include «osapi.h»
Функция задержки:
void ets_delay_us(uint32_t us);
также есть дефайн #define os_delay_us ets_delay_us
Но т.к. функция блокирующая — я буду использовать формат ets_delay_us.

Здравствуйте, что-то картинки у вас не отображаются. Очень интересный цикл статей.
Добрый день, спасибо что указали на картинки, видимо эти при переносе сайта потерялись…
Извиняюсь, что долго не мог исправить ошибку и ответить — немного аврал)
Спасибо за оценку сайта, правда делал скорее для себя.