Простая схема ключей для управления 1 сигналом или GPIO ESP

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
CROSP
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Пн мар 07, 2011 00:45:38

Простая схема ключей для управления 1 сигналом или GPIO ESP

Сообщение CROSP »

Здравствуйте, сейчас доделываю проект один простенький используя ESP8266.

Изначально на 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В ( по сути диоды открываются)

Подскажите как лучше сделать ?
mas123
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Re: Простая схема ключей для управления 1 сигналом или GPIO

Сообщение mas123 »

Сразу задам простой вопрос: документация на ESP-чип и на ихнюю ОС изучалась?
CROSP писал(а):1. На GPIO2 подается низкий уровень, ждем 1 секунду
2. Подаем на GPIO0 высокий уровень ждем 2 секунды
А ничего, что в доке английским по белому сказано, что пользовательских процесс не должен захватывать управление более чем на.... мммм... порядка 15 мс?
А за ТРИ секунды - уж гарантировано отрабатывает WDT таймер!
CROSP писал(а):Выходит что есть только 1 доступный GPIO для работы второй так только высокий уровень подавать ???
У меня оба вывода включены как выходы, и сигналы выдаются для внешней схемы.
Ессно, мы же о модуле ESP-01 говорим, у которого всего 2 GPIO выведены наружу?
CROSP писал(а):Собственно модуль после этого то работать продолжает и отвечать на команды, но GPIO нормально не работают, после того как подали низкий уровень на GPIO0
Если модуль перешел в boot-режим, то какая там может быть нормальная работа?
CROSP писал(а):насколько я понимаю модуль возвращается из бут мода и выдает на GPIO рандоммные вещи.
Да, в момент запуска по обоим ногам GPIO-0 и GPIO-2 выдаются "ненужные импульсы". Там, имхо, всякая отладочная инфа от Експессива по UART выдается.
CROSP писал(а):Вот решил посоветоваться как лучше сделать,
Документацию почитать, на esp8266.ru её достаточно.
CROSP писал(а):Да, еще логика 3.3В на саму ESP8266, а на выходы OUT1 и OUT2 можно и 3.3В и 5В
Кто сказал что "можно"? Как раз все говорят, что ESP нетолерантна к 5В!
CROSP
Нашел транзистор. Понюхал.
Сообщения: 166
Зарегистрирован: Пн мар 07, 2011 00:45:38

Re: Простая схема ключей для управления 1 сигналом или GPIO

Сообщение CROSP »

Извините, что так поздно отвечаю, никак не было свободного времени доделать.
mas123 писал(а):А ничего, что в доке английским по белому сказано, что пользовательских процесс не должен захватывать управление более чем на.... мммм... порядка 15 мс?
А за ТРИ секунды - уж гарантировано отрабатывает WDT таймер!

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

mas123 писал(а):Ессно, мы же о модуле ESP-01 говорим, у которого всего 2 GPIO выведены наружу?

Да именно о нем
mas123 писал(а):Кто сказал что "можно"? Как раз все говорят, что ESP нетолерантна к 5В!

Никто не сказал, я про 5В логику говорил, что это не принципиально, так как скорее всего мне нужно будет использовать конвертер уровней в любом случае для устройства.

Спасибо
mas123
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Re: Простая схема ключей для управления 1 сигналом или GPIO

Сообщение mas123 »

CROSP писал(а):Я это понял, скажите в моем случае, без дополнительной схемы не обойтись насколько я понял ? Правильно ?
Неправильно. Никакая дополнительная схема не нужна.
Правильно напиши код, и сможешь удерживать сигнал в нужном состоянии хоть часами.

Взять текущее время, установить нужное состояние вывода.
Далее периодически вызывать свой процесс и проверять - истекло ли время. Если да - снять сигнал с вывода.
Ответить

Вернуться в «Разные вопросы по МК»