Изначально на GPIO2 подается высокий уровень после включения модуля
В кратце, по протоколу MQTT пишется в topic сообщение определенное, ESP8266 (далее просто модуль) считывает и если там сообщение с командой, то он делает простую комбинацию
1. На GPIO2 подается низкий уровень, ждем 1 секунду
2. Подаем на GPIO0 высокий уровень ждем 2 секунды
3. Возвращаем все обратно на GPIO0 низкий
4. На GPIO2 высокий.
Собственно в чем проблема, так как низкий уровень на GPIO0 означает перевод в режим бута, то после того как подали на GPIO0 низкий уровень в UART выдается такая штука
Код: Выделить всё
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Собственно модуль переходит в режим бута
Если что таким образом работаю с 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);
}Может я что-то не так делаю
Собственно вопрос по ESP8266, как вообще работать правильно с GPIO ? Выходит что есть только 1 доступный GPIO для работы второй так только высокий уровень подавать ???
Знатоки по ESP8266 подскажите.
Собственно модуль после этого то работать продолжает и отвечать на команды, но GPIO нормально не работают, после того как подали низкий уровень на GPIO0
насколько я понимаю модуль возвращается из бут мода и выдает на GPIO рандоммные вещи.
Если эту проблему никак нельзя решить, то я вижу только 1 способ это через GPIO управлять другим устройством.
Так сказать делегировать управление
Вот решил посоветоваться как лучше сделать, может можно собрать схему без контроллера, по сути можно обойтись двумя состояниями только
Если взять выходы схемы OUT1, OUT2
То если на GPIO0 высокий уровень то OUT1 = 1 , OUT2 =0
если низкий то OUT1 = 0, OUT2 = 1 соответственно.
Скажите как можно это просто реализовать ? Понятное что с контроллером проще взять какой-то микро Atmel
Да, еще логика 3.3В на саму ESP8266, а на выходы OUT1 и OUT2 можно и 3.3В и 5В ( по сути диоды открываются)
Подскажите как лучше сделать ?