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

Вопрос помогите разобраться ESP8266+Arduino Nano

HarrySmith

New member
есть следующая схемка. Задача чтобы когда на GPIO1 появлялся 1 то на 4 выводе Arduino стала 1. Но суть даже не в этом. Когда на схему подается питание при отсоединенном 8 выводе Arduino, после чего подсоединяется восьмой вывод, то все работает хорошо. Но если схема включается с уже присоединенным выводом 8 Arduino то на нем появляется или 0 или 1 в хаотическом порядке не понятно откуда(Ниже приведен лог порта Arduino ) . Объясните куда копать чтобы при включении такого не происходило.chem.JPG Скетч для Arduino
//******входные порты*********
//порты для датчика WiFi
const int pinINWiFi1 = 8;

void setup() {
Serial.begin(9600);
pinMode(pinINWiFi1, INPUT);
}

void loop() {
bool inWiFi1 = digitalRead(pinINWiFi1);
Serial.println("/////////------" + String(inWiFi1) + "------/////////");
delay(500);
}

Скетч для ES8266
// Go to the Project Settings (nut icon).
char auth[] = "MyCharCode";

// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "MyNet";
char pass[] = "MyPass";
void setup()
{
Serial.begin(9600);
Blynk.begin(auth, ssid, pass);
}

void loop()
{
Blynk.run();
}

Лог порта Arduino
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
 

Сергей_Ф

Moderator
Команда форума
@HarrySmith ~скорее всего, это отладочный стартовый вывод с esp. избавится не удастся, можно только игнорировать. Поставьте задержку в setup у нано. Полсекунды должно хватить.~
Хотя нет. Не так.
При старте на всех выходах Ардуино низкий уровень до отработки загрузчика и esp воспринимает это как сигнал прошивки на своем 0-м пине. Надо менять пин у esp.
А где у Вас gpio1 используется, я не нашел ни по схеме, ни в коде.
Светодиоды к пинам 4 и 8 нано подключены неправильно - сгорит либо он, либо нано. Резистор нужен, и лучше его к плюсу питания и включать нулем.
Назначение резистора на пине 2 -вообще загадка. Зачем он?
Что делает пин 11, тоже непонятно.
А лучше выкиньте нано и сделайте все на esp.
 
Последнее редактирование:

tretyakov_sa

Moderator
Команда форума
Если это все (3 светодиода и одна кнопка), выбросите Arduino.
 

HarrySmith

New member
Сергей спасибо за ответ.
Прошу прощения за некоторые неточности в схеме Да светодиоды немножко не так стоят и резистор можно выкинуть. Только вместо HL4 должно стоять реле (включение 0) для управления светом. HL2 стоит только для того чтобы когда не включено реле было включен этот светодиод (подстветка выключателя). Да и в тексте написано gpio1 это ошибка надо читать gpio0. Но даже если менять gpio0 на gpio2 картинка лога порта не меняется. Резистор нужен, и лучше его к плюсу питания и включать нулем. - К сожалению прошивка Blynk ESP8266 дает 1 при включении и 0 при выключении. Поменять наверное можно но тогда надо отказаться от Blynk, а не хотелось бы. Задержки ставил какие никакие не помогало. Вообще это часть выключателя который должен работать как выключатель по кнопке на 2 порту, по датчику движения который на схеме не показан и через ES8266. На первом этапе хотелось бы добиться только соединения ARDUINO и ESP8266. Чтобы при включении питания не было такого бардака на порту 4. Упростим схему до невозможности!sc1.JPG
 

Сергей_Ф

Moderator
Команда форума
@HarrySmith зачем отказываться от Blynk? Кто Вам мешает инвертировать сигнал в коде на Ардуино, если не хотите от нее отказаться?
Откуда мусор на пине 1 esp, даже не могу представить. По схеме у Вас нет притяжки пин 0 к + питания, а значит режим esp неопределен. Поставьте резистор 10 кОм к + питания.
Для светодиодов резистор необходим всегда, хотя бы на 1 кОм последовательно со светодиодом. Но лучше, конечно посчитать. Не ленитесь ставить и показывать на схеме. На всякий случай резистор между входом Ардуино и выходом esp лучше поставить, Ом на 500.
Если на 4 пине Ардуино будет реле, то тем более сигнал надо инвертировать и подключать реле через транзистор. Очень рекомендую. И не забыть шунтирубщий диод на обмотке реле. А лучше взять готовый шилд. По схемотехники у Вас знаний явно недостает.
 
Последнее редактирование:

Юрий Ботов

Moderator
Команда форума
Меня лично напрягает использование светодиодов без токоограничительных резисторов... мало того что перегревают проц, а еще и работают как стабилитроны с напряжением стабилизации 1.4-1.8 вольта в зависимости от цвета. И соответственно держат сигнал на уровне "слепой зоны" - не то 0 не то 1...
 

Сергей_Ф

Moderator
Команда форума
@HarrySmith прошу прощения, резистор на пине 2 Ардуино был нужен, иначе кнопка работать при таком подключении не будет. Я посчитал его лишним, потому, что так кнопку не подключают обычно и есть большой шанс спалить Ардуино, если в момент включения Ардуино кнопка будет нажата. Обычно кнопку вешают на землю, а резистор притягивают пин к + питания, или используют встроенную подтяжку.
 

HarrySmith

New member
и так схему упрощаем по самые уши scr.JPG
scr.JPG
скетч для ARDUINO выглядит следующим образом
//******входные порты*********
//порты для датчика WiFi
const int pinINWiFi1 = 8;

void setup() {
Serial.begin(9600);
digitalWrite(pinINWiFi1,0);
pinMode(pinINWiFi1, INPUT);
}

void loop() {
bool inWiFi1 = digitalRead(pinINWiFi1);
Serial.println("/////////------" + String(inWiFi1) + "------/////////");
delay(500);

но самое самое смешное что при этом лог пина 8 выглядит следующим образом
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------///////// -подача 1 с ESP8266
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------///////// - и снова подача 1 с ESP8266
/////////------1------///////// - и снова подача 1 с ESP8266
/////////------1------///////// - и снова подача 1 с ESP8266
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
единицы вначале это начальное состояние пина 8. При однократной подаче единицы с ESP8266 получаем стабильное состояяние 0 на пине 8, после этого все работает как надо. Подаешь 1 на пин 8 - она там видна, перестаешь подавать на пине 8 становится 0. А вот как сделать чтобы и начальное состояние на пине 8 было 0 а не 1. Именно в этом и вся проблема!
 

HarrySmith

New member
изменим схему в очередной раз
scr.JPG
изменим прошивку ардуино
//******входные порты*********
//порты для датчика WiFi
const int pinINWiFi1 = 8;
void setup() {
Serial.begin(9600);
digitalWrite(pinINWiFi1,0);//можно исключить эффект нулевой
pinMode(pinINWiFi1, INPUT);
}
void loop() {
bool inWiFi1 = digitalRead(pinINWiFi1);
Serial.println("/////////------" + String(inWiFi1) + "------/////////");
delay(500);
}
имеем лог порта 8
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------1------/////////
/////////------1------/////////
/////////------0------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
/////////------1------/////////
/////////------0------/////////
мало того ESP8266 не загрузилсь - не отвечает на запросы
 

tretyakov_sa

Moderator
Команда форума
изменим схему в очередной раз
Вы бы нарисовали конечную задачу, какие вам нужны входы и выходы, что в итоге хотите получить и как это должно работать. Так сказать от общего к частному. Скорее всего после этого arduino вам не потребуется.
 

Сергей_Ф

Moderator
Команда форума
@HarrySmith да уберите уже hl3. Нельзя его так включать. Вам уже говорили, именно он создает неопределенность на входе Ардуино. Так никогда не будет надежной 1 на нем.
Если ESP не загрузилась - то скорее всего Вы продолжаете использовать пин 0 на нем, а не пин 2, как показываете. Либо Вы его сожгли своим digitalWrite(pinINWiFi1,0).
Кстати, притягивать пин ESP , работающий на выход, к земле - абсолютно бесполезное занятие. А зачем Вы убрали резистор с подтяжки Пина 0 на +3.3в , непонятно. Он нужен, как раз для запуска ESP.
В коде ESP пин выхода надо проинициализировать на выход и установить нужное Вам исходное состояние LOW. От мусора на нём до инициализации не избавитесь никак, только задержкой на Ардуино. И только после этого запускаете Blynk()
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
@HarrySmith вот набросал Вам схему как МОЖНО подключить. Так должно работать. Светодиод HL3 включайте в скетче Нано по инвертированному состоянию входного пина 8.

Код:
прошивка ардуино
//******входные порты*********
//порты для датчика WiFi
const byte pinINWiFi1 = 8;
const byte pinHL3 = 9;
const byte pinButton = 2;

void setup() {
Serial.begin(9600);

pinMode(pinINWiFi1, INPUT);
pinMode(pinHL3, OUTPUT);
pinMode(pinButton, INPUT);
digitalWrite(pinHL3, HIGH);

}
void loop() {
bool inWiFi1 = digitalRead(pinINWiFi1);
digitalWrite(pinHL3, !inWiFi1);

Serial.println("/////////------" + String(inWiFi1) + "------/////////");
delay(500);
}
 

Вложения

Последнее редактирование:
@Сергей_Ф, я не согласен с Вами по схеме включения ESP. То, что Вы притянули GPOI0 к +3,3 - это правильно. Но Вы забыли подтянуть к +3,3 пин CH_PD, а на сколько я помню - это обязательное условие. Я бы ещё RST и GPOI2 притянул бы к +3,3 (стабильность работы улучшается). И ещё один вопросик: объясните назначение R1. Вообще непонятно зачем Вы его прилепили. Какое на нем падение напряжения при работе схемы, Вы считали? Да, и резистор R3 великоват по номиналу. Я бы поставил около 390 Ом. Там есть зависимость от цвета светодиода.
 
Последнее редактирование:

Сергей_Ф

Moderator
Команда форума
Вы забыли подтянуть к +3,3 пин CH_PD,
Да, Вы правы, забыл. Набросал впопыхах.
при отсутствии питания и до инициализации Нано, его выводы закорочены на землю. Резистор служит ограничителем тока с вывода esp в этом случае. При нормальной работе влияния не оказывает. Можно и больше поставить, но не меньше. А то можно вывод esp , работающий на выход, пожечь.

По остальным резисторами - не считал. Все ориентировочно. Современные светодиоды и при 2 кОм светят нормально. По хорошему, конечно, надо брать справочник и считать.
 
Последнее редактирование:
@Сергей_Ф
при отсутствии питания и до инициализации Нано, его выводы закорочены на землю. Резистор служит ограничителем тока с вывода esp в этом случае. При нормальной работе влияния не оказывает. Можно и больше поставить, но не меньше. А то можно вывод esp , работающий на выход, пожечь.
позволю себе усомниться, т.к. вход ардуино D8, назначенный для работы с ESP и определенный как вход, имеет сам по себе достаточно большое входное сопротивление и не позволит току достичь критических значений. Иначе бы большинство логических схем были бы утыканы подобными "токоограничивающими" резисторами как ёжик иголками. А вот протекающий по нему, пусть и небольшой, ток создаст дополнительное падение напряжение. В результате чего непосредственно на D8 уровень сигнала может попасть в зону неопределенности. Ведь для того что бы на резисторе 500 Ом упал 1 В напряжения нужен ток всего в 2 мА. 3,3В - 1В = 2,3В, а это уже зона неопределенности для TTL.
 

Сергей_Ф

Moderator
Команда форума
@Андрей Вакулин Вы невнимательно прочли, что я написал. При обесточеной Нано, ее входы закорочены на землю и остаются в таком состоянии до первоначальной инициализации. Поскольку питание у устройства раздельное возможны ситуации когда Есп работает, а Нано нет. Вот тогда резистор спасёт Есп. Впрочем, Вы можете подключать как считаете нужным. Кстати, рабочие токи между входом Нано и выходом Есп не превышают нескольких микроА, падение там не более 0.1В.
 
Сверху Снизу