• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос NodeMCU V3 ESP8266 Вопрос про gpio

sasha294

Member
Я только знакомлюсь с NodeMcu v3. Когда делал дистанционное управление проветриванием парника, то в скетче указал предустановку двух GPIO в "1".
Потому что для релейного шилда активным сигналом был "0". Прочитав эту тему, понял что не ошибся.:)
Ты бред написал
 

Moseich

Member
Уточняю. Без программной предустановки в "1", при перезагрузке, реле включались без моей команды. ставить инверторы после GPIO не стал. Перезагрузки . постоянно связаны с мобильным интернетом 3G - дача очень далеко от цивилизации и антенн.
Так в чем я неправ? Уточни свое категоричное утверждение. Я новичек в программировании, но радиолюбитель с 1960г.
 

Сергей_Ф

Moderator
Команда форума
@Moseich не обращайте внимание. В принципе, вы написали всё верно, но @sasha294 наверное вас не понял. Бывает.
То что вы сделали - это программная инверсия.
Позвольте дать несколько рекомендаций, что бы в следующий раз всё сделать немного изящнее и понятнее.
В начале скетча глобально определите значения
Код:
#define RELEY_GPIO 2
#define RELEY_ON 0
#define RELEY_OFF 1
или
Код:
const uint8_t RELEY_GPIO=2;
const uint8_t RELEY_ON=0;
const uint8_t RELEY_OFF=1;
последнее считается предпочтительнее, но по сути будет одно и тоже.

в секции init() обязательно инициируйте все задействованные gpio и присвойте им значение, которые хотите получить при старте. Никогда не надейтесь на значения по умолчанию.
Код:
pinMode(RELEY_GPIO, OUTPUT);
digitalWrite(RELEY_GPIO, RELEY_OFF);
в теле программы loop(), где надо включить
Код:
digitalWrite(RELEY_GPIO, RELEY_ON);
А ещё лучше сразу определить функцию
Код:
inline void reley(uint8_t status){
   digitalWrite(RELEY_GPIO, status);
}
и пользоваться
Код:
reley(RELAY_ON);
или
Код:
reley(RELAY_OFF);
тогда программа будет более читаемой и не надо будет ломать голову, а что же реле сейчас должно сделать? Включиться или выключиться? А такие вопросы через месяц, другой точно возникнут :). Успехов.
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
Уточняю. Без программной предустановки в "1", при перезагрузке, реле включались без моей команды.
Чтобы реле не включалось без вашей команды, обычно достаточно добавить в схему подтягивающий резистор.
А вот перегружаться есп, если пропал интернет, не должна.
 

Сергей_Ф

Moderator
Команда форума
Чтобы реле не включалось без вашей команды, обычно достаточно добавить в схему подтягивающий резистор.
Чем поможет подтягивающий резистор, если по умолчанию значение выхода устанавливается в логический 0, а логический 0 - это команда включения модуля реле?
 

Сергей_Ф

Moderator
Команда форума
@CodeNameHawk конечно настроены, и реле при этом сработать не должно. У модуля реле обычно есть своя подтяжка к +, если они включаются от логического 0.
А вот внутри программы @Moseich этот пин инициализирует на выход и реле срабатывает. Я так понял. Тут нужна программная инверсия, что он и сделал. Написал немного непонятно, но по сути верно. Если не ошибаюсь, @Moseich более 60 лет уже (если не 70), можно понять и простить :). Конечно, программа его перегружаться не должна при потери связи, но... Что сделано, то сделано. Если опубликует и попросит помощь - поможем?
 
Последнее редактирование:

CodeNameHawk

Moderator
Команда форума
А вот внутри программы @Moseich этот пин инициализирует на выход и реле срабатывает.
Возможно, что назначение вывода на выход он не считает своей командой, а только установку вывода в единицу.

А так сперва дается команда установки "нужного" уровня на выводе и только после этого назначают вывод на выход.
 
Последнее редактирование:

Moseich

Member
Сергей_Ф, CodeNameHawk, Спасибо за пояснения! Да, мне 73, и я взялся обучать электронике своего младшего внука заочно - по скайпу. Надеюсь, этим отдалить наступающий склероз.:) . Кстати в 80 году вел радиокружок в доме пионеров. ESP очень понравилось своим возможностями и уже пользуюсь.
Так вот, я сначала сам изучаю, собираю, испытываю девайс, а потом рассказываю и показываю внуку. Естественно что я пользуюсь чужими скетчами. Простые скетчи на ардуине конечно сочиняю, хотя мне проще сделать на логике ИС.
Установку в единицу я сделал не задумываясь и оно заработало. Переделаю как Вы рекомендовали. Насчет подтяжки -я считал, что если NodeMcu отладочная плата - значит gpio все распаяны. Видимо в дешевых китайских платах не все идеально с наводками. ИМХО.
У меня есть еще пара девайсов для включения питания камер наблюдения и насоса для даче -там я релейный блок 220В сделал сам, поэтому выводы не переназначал.
20190316_131407.jpg работает надежно.
 

nikolz

Well-known member
Сергей_Ф, CodeNameHawk, Спасибо за пояснения! Да, мне 73, и я взялся обучать электронике своего младшего внука заочно - по скайпу. Надеюсь, этим отдалить наступающий склероз.:) . Кстати в 80 году вел радиокружок в доме пионеров. ESP очень понравилось своим возможностями и уже пользуюсь.
Так вот, я сначала сам изучаю, собираю, испытываю девайс, а потом рассказываю и показываю внуку. Естественно что я пользуюсь чужими скетчами. Простые скетчи на ардуине конечно сочиняю, хотя мне проще сделать на логике ИС.
Установку в единицу я сделал не задумываясь и оно заработало. Переделаю как Вы рекомендовали. Насчет подтяжки -я считал, что если NodeMcu отладочная плата - значит gpio все распаяны. Видимо в дешевых китайских платах не все идеально с наводками. ИМХО.
У меня есть еще пара девайсов для включения питания камер наблюдения и насоса для даче -там я релейный блок 220В сделал сам, поэтому выводы не переназначал.
Посмотреть вложение 7273 работает надежно.
 

Сергей_Ф

Moderator
Команда форума
Переделаю как Вы рекомендовали. Насчет подтяжки -я считал, что если NodeMcu отладочная плата - значит gpio все распаяны.
то что я рекомендовал - это только для человеческого восприятия. Код по сути останется тот же, что был у вас. А подтяжки распаяны на плате только те, которые нужны для старта. Никто же не может знать какие подтяжки вам будут нужны в вашем устройстве.
 

Moseich

Member
nikolz, Спасибо за схемы.Уже получил такие модули ., один Wemos попробовал - заработал , но при загрузке никакой индикации не было. ЕСП -32 даже подключить не смог к МАС. Буду пробовать дальше.
 

Moseich

Member
то что я рекомендовал - это только для человеческого восприятия. Код по сути останется тот же, что был у вас. А подтяжки распаяны на плате только те, которые нужны для старта. Никто же не может знать какие подтяжки вам будут нужны в вашем устройстве.
Возможно я интуитивно использовал те пины, которые без подтяжек. Когда подключал одинаковые платы они вели себя по- разному, имели разные уровни. Я в схему и не смотрел . теперь буду осуществлять входной контроль.
 

Moseich

Member
CodeNameHawk,
........
А вот перегружаться есп, если пропал интернет, не должна.
Это я прошу уточнить. Дома, в Москве, ничего подобного не происходит. Появился интернет - плата . сразу готова к работе. А на даче у меня мобильный интернет, Антенна от земли 10м, прием крайне затруднен - вокруг густые леса , низина. Покрыти там только 2G но у меня все же принимает 3G. Очень часто , примерно каждые пол-часа происходит сбой. И без ресета по питанию нельзя было восстановить связь с облаком BLYNK,
Я пробовал разные рекомендации но это не помогало. Потом вопрос решился очень просто -надо было ограничить частоту передачи данных с датчиков температуры. Кроме того я добавил ресет от ардуино 1 раз в сутки.
 

nikolz

Well-known member
CodeNameHawk,
Это я прошу уточнить. Дома, в Москве, ничего подобного не происходит. Появился интернет - плата . сразу готова к работе. А на даче у меня мобильный интернет, Антенна от земли 10м, прием крайне затруднен - вокруг густые леса , низина. Покрыти там только 2G но у меня все же принимает 3G. Очень часто , примерно каждые пол-часа происходит сбой. И без ресета по питанию нельзя было восстановить связь с облаком BLYNK,
Я пробовал разные рекомендации но это не помогало. Потом вопрос решился очень просто -надо было ограничить частоту передачи данных с датчиков температуры. Кроме того я добавил ресет от ардуино 1 раз в сутки.
в настройках wifi в ESP есть опция autoconnect
посмотрите ее. Она обеспечивает автоматическое восстановление соединения при потере
посмотрите данный вопрос в инете
ESP8266/ESP32 Connect WiFi Made Easy - Hackster.io
WiFiManager with ESP8266 - Autoconnect, Custom Parameter and Manage your SSID and Password
и т д
 
Сверху Снизу