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

Помигать диодиком через АТ команды

CodeNameHawk

Moderator
Команда форума
Вот и я об этом, если отказаться от АТ, то во многих случаях, будет достаточно использовать только одну есп.
Серьёзно? И сможете вот так прям разобраться??? ну-ну...
Представьте себе, что в этом уже разобрались другие и выложили даже готовые библиотеки, для желающих это использовать.
И да это все надёжно работает в есп12, хотя теперь уже есть есп32, вы тоже её применяет в АТ ?
 

rst

Member
Ту строку, где вы перегружаете есп, через заданные промежутки времени, ну или если она не отвечает.
Это что-ли?:
Код:
//Перевод ESP8266 в состояние RESET.
static FFaza FazaReset()
{
  enum {SBUF_LEN = 100};
  static char rep = 0;
  int i;
  u32 j, j1;
  if (ApbClkState(concat(RCC_APB_UART, nUART_esp))) UartStop();
  Shutdown(1);
  Pclr(PIN_ESP_RST);
  LogsCR(COL_FAZA S_ESP8266 ": Reset.");
  IdleBegin(IDLE_READY_ESP);
  OsTaskDelay(ms2tkt(500));
  ILivePing(ILIVE_ESP);
  InitVars();
  EspConfigMdf(1 << CFGMDF_apList);
  cntRestarts = N_RESTART + 1;
  for (i = 1; ; OsTaskDelay(ms2tkt(100))) {
    ConsoleICmdFull(0);
    netConfigMdfLoc |= j = AtomicBicI(&netConfigMdf,
      1 << CFGMDF_apList | 1 << CFGMDF_apPower | 1 << CFGMDF_proxy | 1 << CFGMDF_term | 1 << CFGMDF_sntp | 1 << CFGMDF_weather)
      & (1 << CFGMDF_apList | 1 << CFGMDF_apPower | 1 << CFGMDF_proxy | 1 << CFGMDF_term | 1 << CFGMDF_sntp | 1 << CFGMDF_weather);
    if (!j) continue;
    if (WifiCfgReadTest()) break;
    if (!i) continue;
    Pclr(PIN_ESP_RST);
    LogsCR(COL_FAZA S_ESP8266 ": Off.");
    i = 0;
  }
  IdleEnd(IDLE_READY_ESP);
  j1 = UART_RATE_INIT;
  if (!(i = rep)) {
    rep = 1;
    j1 = UART_RATE_BOOT;
  }
  UartStart(j1);
  Pset(PIN_ESP_RST);
  if (!--i) return (FFaza)FazaInit;
  #if LOG_ESP && LOG_ESP_IO
  char sbuf[SBUF_LEN];
  static char const split[] = PREFIX_BOOT " ----------------------------------------";
  LogsCR(split);
  #endif
  uint c, cc = 0, i0, i1, n = 0;
  for (j1 = sysTimer, i0 = inpR; ; ) {
    i1 = inpW;
    while (i0 != i1) {
      c = inpBuf[i0];
      if (++i0 >= sizeof(inpBuf)) i0 = 0;
      if (c != '\n' && c != '\r') {
        if (c < ' ' || c >= 127) n = SBUF_LEN + 2;
        if (n >= SBUF_LEN + 2) continue;
        if (n >= SBUF_LEN) n = SBUF_LEN + 1;
        else {
          #if LOG_ESP && LOG_ESP_IO
          sbuf[n] = c;
          #endif
          n++;
        }
        continue;
      }
      if (c != cc && cc) {
        cc = 0;
        continue;
      }
      cc = c;
      if (IN_RANGE(n, 1, SBUF_LEN + 1)) {
        #if LOG_ESP && LOG_ESP_IO
        if (!i) LogsCR(PREFIX_BOOT ":");
        char const *s = "";
        if (n == SBUF_LEN + 1) {
          s = "...";
          n--;
        }
        LogCR(PREFIX_BOOT ": \"" COL_NAVY "%.*s" COL_GRAY "\"%s", n, sbuf, s);
        #endif
        i = 1;
      } else i >>= 1;
      n = 0;
    }
    j = sysTimer;
    if (i >= 0) if ((s32)(j - rxLastTime) >= (s32)ms2tkt(TIME_SIL_RDY)) break;
    if (j - j1 >= ms2tkt(TIME_FW_START)) {
      EspErrs(ertToutBoot);
      return (FFaza)FailFazes;
    }
    OsFlagPendReset(&espEv, ms2tkt(10));
  }
  #if LOG_ESP && LOG_ESP_IO
  LogsCR(split);
  #endif
  return (FFaza)FazaReset;
}
Помогло? ;)
 

CodeNameHawk

Moderator
Команда форума
А вот в ардуино этого всего не надо.
И так работает, без перезагрузки.

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

rst

Member
А вот в ардуино этого всего не надо.
И так работает, без перезагрузки.
Может не будем передёргивать? ok? Лавры pvvx покоя не дают? Это же его стиль.
Вопрос ваш был (на который я отвечал):
Ту строку, где вы перегружаете есп, через заданные промежутки времени, ну или если она не отвечает.
Получается по-вашему, что "И так работает, без перезагрузки" - это когда "не отвечает"?
Или поясните - как именно ваша абдурина работает, когда ESP "не отвечает"?

PS: И конечно - советовать детский конструктор для задачи хотя-бы чуть выше чем "помигать лампочкой" - весьма показательно.

PPS: Этот мой проект ("интернет-радио") только что проработал непрерывно более 2-х суток. Не выключаясь, не перегружаясь, непрерывно качая данные с инета (был подключен к стриму весьма устойчивому - ни одного разрыва соединения более двух суток подряд - включил его ещё в пятницу, сейчас только выключил). Это к вопросу "если есп не отвечает". Т.е. - за это время такого не случилось ни разу. Для поделок на абдурине - просто фантастический результат. :)
 

rst

Member
Смеетесь? miilis проскакивает по кругу на ура, без ваших "не отвечает".
Вижу - стиль pvvx вы успешно освоили. Продолжаете передёргивать.
Ответ на конкретный вопрос:
как именно ваша абдурина работает, когда ESP "не отвечает"?
будет от вас?

Я на ваш вопрос ответил. Хоть он и был совершенно бессмысленным.
 

CodeNameHawk

Moderator
Команда форума
Если вы такой недоверчивый спросите у других пользователей, как долго у них работает есп без перезагрузки.
 

rst

Member
Я уже ответил, что есп не попадает в такое состояние, что не может ответить.
Доступ из вне закрыт, устройства в локальной сети не перенагружают ее запросами.
Странно. Наверное у вас какие-то другие ESP. Идеальные. ;)
ESP8266 в моём 3D-принтере, с прошивкой сляпанной как раз на абдурине - в такое состояние как раз и впадает вполне стабильно. Если пакеты ей передавать с дырками между ними менее чем 100мсек - начинает их терять или вообще виснет.
При том что и скорость по UART там детская - всего 115200.
А AT-командная прошивка в моём проекте на 1843200 бод по UART используется. Всего-то в 18 раз быстрее. ;) И вообще без каких-либо пауз между командами.
 

rst

Member
ESP8266 в моём 3D-принтере, с прошивкой сляпанной как раз на абдурине - в такое состояние как раз и впадает вполне стабильно. Если пакеты ей передавать с дырками между ними менее чем 100мсек - начинает их терять или вообще виснет.
При том что и скорость по UART там детская - всего 115200.
Да - TCP-соединение там одно-единственное, внутри локальной сети. Всё извне - конечно закрыто в роутере.
Так что единственная причина - абдуриновский говнокод в ESP.
 

CodeNameHawk

Moderator
Команда форума
Тогда давайте проведем эксперимент.
Загрузите https://github.com/GyverLibs/FastBot/blob/main/examples/echoBot/echoBot.ino

Версия FastBot 2.27.3, плат есп 2.7.4, плата выбрана nodemcu 1.0
В настройках изменен один параметр LwIP на v.2 HigherBandwith.

И проверим время когда перестанет или не перестанет отвечать.
пс. Я уже залил, пока работает. (до этого, fastbot я пробовал, только на есп32)
 

rst

Member
Тогда давайте проведем эксперимент.
Загрузите https://github.com/GyverLibs/FastBot/blob/main/examples/echoBot/echoBot.ino
Причём тут вообще это?
Я писал, что проблема - в работе моста UART-WiFi. Перечитайте ещё раз что я писал.

Вот этот проект: https://www.pcbway.com/project/shareproject/MKS_WiFi_module.html
Если вы такой гуру в абдурине, то покажите - что в нём нужно исправить, чтобы работал нормально?
 

CodeNameHawk

Moderator
Команда форума
Причём тут вообще это?
Это к тому, что вы не правы насчет
Так что единственная причина - абдуриновский говнокод в ESP.
Если приведенный код работает, то и другой код тоже может нормально работать в ардуино.

Вот этот проект:
Так попросите автора, пусть поправит.
Для принтера есть https://github.com/bdring/FluidNC пока не пробовал в живую, но плата уже в дороге.
 

IBAH

New member
Документы можете найти на сайте производителя.
А информацию для "старта" на этом сайте.
Дам ссылку если сами не можете найти https://esp8266.ru, посмотрите раздел "железные вопросы"

Не надо думать, что другие тупее чем вы.
Просто реализация в АТ в есп довольно кривая, и при ее использовании не получится использовать доступные ресурсы есп, так как нп. в ардуино.
Понятно какие у вас тут специалисты....
Задаешь конкретные вопросы. Ответ - ищите в Интернете все написано. А то я и сам не знаю, что в интернете все написано! И срача на две страницы!

Описал конкретные проблемы. Задал конкретные вопросы.
Для тех кто шарит, повторяю:
1) Не расшифровывается параметр <mode>. Где можно найти его расшифровку? только не говорите, что в интернете, будьте умнее
2) Команда AT+SYSIOSETCFG по разному применяется к разным портам. Почему? Чем порт 0 и 2 отличается от 1 или 3?
 

IBAH

New member
Понятно какие у вас тут специалисты....
Задаешь конкретные вопросы. Ответ - ищите в Интернете все написано. А то я и сам не знаю, что в интернете все написано! И срача на две страницы!

Описал конкретные проблемы. Задал конкретные вопросы.
Для тех кто шарит, повторяю:
1) Не расшифровывается параметр <mode>. Где можно найти его расшифровку? только не говорите, что в интернете, будьте умнее
2) Команда AT+SYSIOSETCFG по разному применяется к разным портам. Почему? Чем порт 0 и 2 отличается от 1 или 3?
Также всем специалистам рекомендую посмотреть схему модуля ESP01S
Порт GPIO0 альтернативная функция управление Чип Селект второй флешки (насколько я понял, ее нет в ESP01S)
Порт GPIO1 альтернативная функция UART0 TXD, выход, обмен АТ идет через него
Порт GPIO2 альтернативная функция UART1 TXD (насколько я понял отладочные последовательный интерфейс), также подключен светодиод на плате и выведено на разъем модуля пин 3
Порт GPIO3 альтернативная функция UART0 RXD, вход, обмен АТ идет через него
 

IBAH

New member
Также всем специалистам рекомендую посмотреть схему модуля ESP01S
Порт GPIO0 альтернативная функция управление Чип Селект второй флешки (насколько я понял, ее нет в ESP01S)
Порт GPIO1 альтернативная функция UART0 TXD, выход, обмен АТ идет через него
Порт GPIO2 альтернативная функция UART1 TXD (насколько я понял отладочные последовательный интерфейс), также подключен светодиод на плате и выведено на разъем модуля пин 3
Порт GPIO3 альтернативная функция UART0 RXD, вход, обмен АТ идет через него
на схеме в углу есть табличка в которой упоминаются порты GPIO0, GPIO2 , думаю что ответ в ней. Что она означает?
 

CodeNameHawk

Moderator
Команда форума
Задаешь конкретные вопросы. Ответ - ищите в Интернете все написано.
Ну тут вам не школа.
А как вы представляте, что будут отвечать, если каждый вновь появившийся, задает одни и те же вопросы?

на схеме в углу есть табличка в которой упоминаются порты GPIO0, GPIO2
Если бы прочли, то что я советовал, то уже бы знали, что она показывает с чего будет грузиться есп, в зависимости от уровней на указанных выводах.
думаю что ответ в ней.
Помогло?
 

CodeNameHawk

Moderator
Команда форума
Попробуйте команду AT+SYSIOGETCFG=12
Если выдаст ошибку, то скорее всего этих команд нет в вашей версии АТ.
Если работает, то при умении паять, можно подпаяться к выводу GPIO12 и его использовать.
И как вы уже наверное догадались, это "там же" показано.
 
Сверху Снизу