• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

GPIO светодиод, маленькое сопротивление bootloader mode

CROSP

New member
Здравствуйте, почти закончил свой проект.
Вот под конец возникла такая проблема.
Как известно для того чтобы перевести контроллер в режим загрузки прошивки нужно замкнуть GPIO0 на землю кратковременно.
У меня в проекте нужно будет мигать светодиодом, точнее даже не мигать, а постоянно держать его включенным (диод, оптореле ...).
Собственно что я заметил и это вполне логично.
Так как при прямом падении напряжения на светодиоде достаточно маленькое сопротивление, то при включении светодиода который висит на GPIO0 контроллер переходит в режим бутлоадера
Вот лог

Код:
TCP: data received 76 bytes
MQTT: Received data on topic: /wh/home/hallway/communication/intercom
TYPE IS : command
Got COMMAND
NEXT IS PAIR VALUE
VALUE IS : on
OPEN INTERCOM
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 29356, room 16
Видно что после включения светодиода контроллер перешел в режим boot mode.
Резистор для светодиода использую 1.2кОм.
НО несмотря на это контроллер продолжает функционировать в нормально режиме, отвечает на команды.

Вот мой код инициализации GPIO

Код:
#define REED_GPIO 2
#define REED_GPIO_MUX PERIPHS_IO_MUX_GPIO2_U
#define REED_GPIO_FUNC FUNC_GPIO2

#define BUTTON_GPIO 0
#define BUTTON_GPIO_MUX PERIPHS_IO_MUX_GPIO0_U
#define BUTTON_GPIO_FUNC FUNC_GPIO0

void ICACHE_FLASH_ATTR
gpio_init() {
    // Configure reed (relay)
    PIN_FUNC_SELECT(REED_GPIO_MUX, REED_GPIO_FUNC);
    GPIO_OUTPUT_SET(REED_GPIO, 0);
    // Configure button
    PIN_FUNC_SELECT(BUTTON_GPIO_MUX, BUTTON_GPIO_FUNC);
    GPIO_OUTPUT_SET(BUTTON_GPIO, 0);
}

void ICACHE_FLASH_ATTR open_intercom() {
    GPIO_OUTPUT_SET(REED_GPIO, 0);
    os_delay_us(DELAY_CLICK);
    GPIO_OUTPUT_SET(BUTTON_GPIO, 1);
    os_delay_us(DELAY_CLICK*2);
    close_intercom();
}
void ICACHE_FLASH_ATTR close_intercom() {
    GPIO_OUTPUT_SET(REED_GPIO, 1);
    os_delay_us(DELAY_CLICK);
    GPIO_OUTPUT_SET(BUTTON_GPIO, 0);
    os_delay_us(DELAY_CLICK);
}
Собственно вопроса всего два.
1. Как сделать чтобы контроллер не переходил в режим бута ?
2. И еще очень важный вопрос, правильно ли я работаю с GPIO, потому что делал по примеру, вроде работает, но есть проблема, при управлении GPIO он произвольно мигать начинает во время установки или выключения, а потом уже нормально становится , поэтому где-то накосячил
Спасибо
 
Последнее редактирование:

CROSP

New member

Единственное что так подключить, может как-то можно на программном уровне это отключить на время ?
 
Сверху Снизу