ESP, IoT ESP8266 броски на выходах при включении (инициализации)

ilya7zz

✩✩✩✩✩✩✩
16 Мар 2021
19
1
Суздаль
www.drive2.ru
Приветствую!
Подскажите по оптимизации ESP8266-7.
После подключения к серверу Blynk происходит кратковременное зажигание светодиодов.
Причина - инициализация кнопки в приложении. Если кнопка не добавлена, светодиоды при подключении к серверу после включения не моргают.
Добавил строку для GPIO5:
digitalWrite(RELAY, HIGH);
после чего, этот светодиод (GPIO5) стал гаснуть в 2 раза быстрее. Как избавиться от этих плевков на выходе после включения питания?

Снимок экрана 2021-03-21 в 14.24.32.png
--------
Не программист, изучаю платформу всего 3й день, просьба отнестись с пониманием :)
 
Изменено:

PiratFox

★★★★★✩✩
13 Фев 2020
1,706
473
@ilya7zz, совсем непонятно, что Вас не устраивает в данной ситуации. Моргание светодиодов? А на работу это влияет? К тому же из Вашей схемы неясно, как работаем оптопара М3, чем и как она управляется. Опять же, выложите весь скетч. Неизвестно ведь, чего ещё там происходит.
 

ilya7zz

✩✩✩✩✩✩✩
16 Мар 2021
19
1
Суздаль
www.drive2.ru
@PiratFox, оптопара M3 -- индикатор наличия питания, остальные оптопары будут подключены после отладки на светодиодах.
Не устраивают броски, т.к. при подаче питания нажмётся кнопка, которая нажиматься не должна и произойдёт нежелательное: вкл/выключится освещение, откроются ворота, перезагрузится/выключится комп... вобщем не должен правильный контроллер формировать сигналы на выходе самопроизвольно :)

Скетч:
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#define BLYNK_PRINT Serial  

char auth[] = "xxxxxxxxxxxxxxxxxx";

char ssid[] = "Wi-Fi";
char pass[] = "Pass";

#include <SimpleTimer.h>
SimpleTimer timer;

#include <OneWire.h>
#include<DallasTemperature.h>
#define STAT 3
#define RELAY 4
#define ONE_WIRE_BUS 0

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);
int temp_0, int temp_1;
uint16_t v_led;

void setup()
{
  Serial.begin(115200);
  Blynk.begin(auth, ssid, pass);
  digitalWrite(RELAY, HIGH); //Запись "1" чтобы не плевался при включении???
  pinMode(STAT, INPUT); //объявляем пин STAT Входом, Статус включённости
  pinMode(RELAY, OUTPUT); //объявляем пин relay Выходом, Оптрон управления включением
  DS18B20.begin();
  timer.setInterval(1000L, getSendData);
  Serial.println(" ");
  Serial.println("Testing Dual Sensor data");
}

  BLYNK_CONNECTED()
  {
    Blynk.syncAll(); 
  }
void loop()
{
  timer.run();
  Blynk.run();
}

void getSendData()
{
  DS18B20.requestTemperatures();
  temp_0 = DS18B20.getTempCByIndex(0); //показания для датчика 1 в цельсиях
  temp_1 = DS18B20.getTempCByIndex(1); //показания для датчика 2 в цельсиях
  v_led = analogRead(STAT); //записываем в переменную v_led статус Индикатора питания

  Blynk.virtualWrite(10, temp_0); //вывод данных на виртуальный пин V10
  Blynk.virtualWrite(11, temp_1); //вывод данных навиртуальный пин V11
  Blynk.virtualWrite(12, v_led); //Отправляем в Blynk на виртуальный пин V12 значение Индикатора питания
}
EF7D2B5F-6B7A-4A55-999C-6B5905CFAC64_1_201_a.jpeg 436A5658-1757-48D4-9035-997D3E973B23_1_201_a.jpeg 9C9F23A9-2382-4176-92F4-9DA656A37B80_1_201_a.jpeg 0A55E8DF-35BE-4332-8535-BF34C30F98AA_1_201_a.jpeg 7404E92D-940A-4F4B-B222-C29BA9A13558_1_201_a.jpeg
 
Изменено:

ilya7zz

✩✩✩✩✩✩✩
16 Мар 2021
19
1
Суздаль
www.drive2.ru
После долгих изучений различных сборок ESP8266 и безуспешных поисков подобной информации пришёл к следующему выводу: в случае необходимости предотвратить случайные броски сигнала "1" на выходе, можно использовать только: GPIO4, GPIO5. Незначительные мерцание имеют GPIO12, GPIO13, GPIO14. Остальные выводы при включении или сбросе формируют импульс единицы.
Таким образом, перечисленные выходы можно использовать только в состоянии "0" по умолчанию и "1" для включения, что меня весьма огорчило, т.к. полагал что состояния выходов реализуются программно и пытался задать работу выходов инверсионно.
 

ТехнарьКто

★★★★★✩✩
13 Янв 2020
271
437
@ilya7zz,

Надо не сборки изучать, надо изучать информацию о самой ESP8266. Понятия не имею где Вы искали информацию, но это общеизвестные факты, что свободных от типов загрузки GPIO у ESP8266 всего 2: GPIO4 и GPIO5. Вот их методом тыка Вы и обнаружили. Для использования остальных вам придется учитывать множество условий. Так например GPIO0 и GPIO2 - могут быть входами/выходами с ограничениями. В момент старта оба должны быть подтянуты к питанию. Во время программирования GPIO2 становится выходом U1TXD откуда "валятся" не отключаемые сообщения о загрузке, а в режиме "программирования" - ответы внешнему UART. Все стартовые сообщения ROM-BIOS выводятся в оба UART порта GPIO1/U0TXD и GPIO2/U1TXD на скорости 74880bps и «NL & CR». Основная скорость UART0/UART1 может быть задана 115200bps, но все равно на 74880bps отправляется отладочная информация. Также сразу после старта модуля в течении ~30msec на GPIO0 выводится сигнал CLK с частотой 26MHz, пока не запуститься инициализация в SDK, очистка RAM, ожидания установки PLL на кварц в 26 МГц, включение таймеров и вывод сообщений в UART уже из кода SDK. В режиме "программирования" на GPIO0 всегда 26MHz. Для остальных пинов, если вы выставили GPIO как выход, то при перезагрузке его значение не сразу примет необходимое состояние.
 

ilya7zz

✩✩✩✩✩✩✩
16 Мар 2021
19
1
Суздаль
www.drive2.ru
@ТехнарьКто, разобраться в потоке информации мне, человеку не очень умному, довольно сложно. Спасибо за пояснения.
Был бы признателен, если оставите ссылочку или файлик на документацию где это описано.
 
Изменено:

ТехнарьКто

★★★★★✩✩
13 Янв 2020
271
437
@ilya7zz,

К сожалению ссылку дать возможность отсутствует, просто уже эту ссылку потерял. Читал с китайского 80-ми страничного документа аля datasheet и в конце там были вопросы и ответы. В тот момент просто выписал, что мне было непонятно. Потом спустя время скачал английский вариант и с удивлением увидел, что там отсутствует процентов 70 информации которую читал в китайском. В принципе народ эту информацию выкладывает на разных форумах кусочками. Но если очень хочется именно datasheet, то придется искать документацию у китайцев и переводить с их языка. На английском или тем более на русском полноценный вариант технической спецификации просто не встречал.
 
  • Лойс +1
Реакции: ilya7zz

Sergey_7

✩✩✩✩✩✩✩
28 Окт 2021
2
1
Добрый день!
Есть 3 шт. ESP-01. Были зашиты, проверены. Рабочие. Закомментировал часть скэтча ( убрал STA, оставил АР ). Прошил. Не работает. Второй так же.
Залил проверенный скэтч в оба. Не работает. ESPFlashDownloadTool вытер, залил, залил скэтч. Не работает. Мультом на gpio0 1.8v. Осциллом - а там
26 Мгц синус. Можно ли это исправить программно или чип всё?
 

Sergey_7

✩✩✩✩✩✩✩
28 Окт 2021
2
1
@ТехнарьКто ,

Спасибо! Победил. Поставил последнюю Arduino IDE 1.8.16 , Инструменты -> Erasure Flash -> All Flash Contents и загрузил скэтч. Оба модуля ожили.
Ни ESPFlashDownloadTool , ни nodemcu-flasher не помогали. Может с адресами напутал. Arduino IDE 1.8.13 тоже не помогала.
Мой вывод: какая-то хрень, залитая мной во флэш, настраивала регистры esp так, что он неправилно работал с интерфейсами. Отладочный UART
выплёвывал кракозяблы и на 115200, и на 74880, и на 19200 бод (настройки в скэтче). Что было с SPI, хз.

Всем Спасибо! Отдельное СПАСИБО ТехнарьКто!!!
 
  • Лойс +1
Реакции: ТехнарьКто

leomaks

✩✩✩✩✩✩✩
26 Янв 2023
1
0
@ilya7zz,
свободных от типов загрузки GPIO у ESP8266 всего 2: GPIO4 и GPIO5.
Подскажите пожалуйста эти же GPIO для esp32!
По картинкам у 8266 GPIO 4й и 5й это еще и SCL и SDA, а у 32го это 0, 2, 4, 15. 0 и 2 вроде для чегото критического используются - лучше не трогать, остается 4й и 15й, верно??
На них не будет срабатывать реле при включении esp32?
===
Увы, на 15м есть скачок.
 
Изменено: