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

Нужна помощь Ардуино Нано + ESP-12

=AK=

New member
Я считал, скетч ESP посылает одно сообщение каждую секунду, а он, треклятый, сыпет их как из ведра, так получается?
Он их посылат каждую секунду. Только секунда в ESP начинается и заканчивается совсем не то же самое время, когда начинается и заканчивается секунда в Ардуино, ведь часы у каждого свои. Поэтому за свою секунду Ардуино вполне может увидеть кусочек сообщения, посланного ESP в предыдущую секунду, плюс кусочек, посланный в следующую секунду. А за время, когда Ардуино ничего не принимает (у вас там delay есть), ESP может еще что-то передать.
 

CodeNameHawk

Moderator
Команда форума
Введите символы начала и конца строки, у меня это { и }
Посылайте {LedON} или {LedOFF}

Код:
const  int  buf_max = 200;            //rozmiar bufera dla dannych z Serial
char odczyt_buf[buf_max];             //przyjeta linia z serial
unsigned long start_time, now_time;   //zapisuje sie, kiedy zaczeli czekac na danne z Serial

void loop ( void )
{
  char odczyt;               //przyjety  char z serial
  int  i;
  boolean posylka_full;      //zrobi sie true , jak bedzie otrzymana pelna posylka

 if (Serial.available() > 0)
  { //если есть доступные данные
    // считываем байт
    odczyt = Serial.read();
    if (odczyt == '{') //szukamy poczatek linii
    {
      i = 0; //na poczatek buffera
      odczyt_buf[i] = odczyt;
      i = i + 1;
      posylka_full = false;
      start_time = millis();
      do
      {
        if (Serial.available() > 0)
        {
          odczyt = Serial.read();
          odczyt_buf[i] = odczyt;
          i = i + 1;
          if (i >= buf_max)
          {
            posylka_full = false;
            break;
          }
          if (odczyt == '}')
          {
            posylka_full = true;
            odczyt_buf[i + 1] = 0;
            break;
          }
        }
        now_time = millis();
        if ((now_time - start_time) > 5000)
        {
          posylka_full = false;
          break;
        }
      }
      while (1);
      if (posylka_full == true)
      { 
         //      Используется только во время отладки.

        //        Serial.println();
        //        Serial.println("Cala posylka");
        //        Serial.println(i);
        //for (int cykl = 0; cykl < i; cykl++)
        //{
         // Serial.print(odczyt_buf[cykl]);
        //}

         //Получили полную строку.

//--------------------------------------------------------------------------------------
//  вставьте сюда обработку вашей строки
// ваша строка будет {LedON} или {LedOFF}

  
//--------------------------------------------------------------------------------------
        }
      } else //posylka nie cala, tylko na czas otladki
      {
        //  Используется только во время отладки.
        //  Serial.println();
        //  Serial.println("Nie cala posylka");
      }
    }
  }
}
 

Sever44

Member
А вы сами подумайте, почему бы Ардуина должна принимать строки именно в том виде, в каком вам хотелось бы? Она принимает то, что ей передают, до тех пор, пока не сработает тайм-аут 1 сек. Вот что за 1 сек придет, то и будет в строке. А за 1 сек придет кусочек одной строки и кусочек другой. Вы же никак и ничем не определяете для приемника, где строка начинается, а где кончается. Вот и будет у приемника "компот". В случае println еще хуже, потому что к строке будут добавлены невидимые глазу символы возврата каретки и перевода строки, а их приемник вообще не ждет.
Извините за настойчивость, но как Вы увидели этот "компот"?
Я, в лучшем случае, видел сообщения от ESP в UART'e только в режиме моста Ардуины.
 

stalkerkz

New member
Спасибо, но пока не осилил.
Я залил скетч который скинул Вам ранее в свою нано и простой в ESP-01 все работает, не знаю почему у Вас не работает... может вы конвертер уровней не правильно собрали или неправильно запитали есп и нано?

 

Sever44

Member
Я залил скетч который скинул Вам ранее в свою нано и простой в ESP-01 все работает, не знаю почему у Вас не работает... может вы конвертер уровней не правильно собрали или неправильно запитали есп и нано?
Спасибо!
Завтра посмотрю, проверю, сегодня уже нет сил, с часа ночи вожусь.
 

=AK=

New member
Извините за настойчивость, но как Вы увидели этот "компот"?
Я, в лучшем случае, видел сообщения от ESP в UART'e только в режиме моста Ардуины.
Я вроде бы объяснил, довольно подробно, даже два раза... Вот, смотрите на диаграмму:

ESP передает строки LedON и LedOFF раз в секунду по своим часам. Шкала времени ESP показана сверху, вертикальная черточка - это конец одного 1-сек интервала и начало следующего:
Код:
|_____________________|_____________________|__________
LedON_________________LedOFF________________LedON______  
__|_____________________|_____________________|________
Ардуино принимает текст в течении 1 секунды по своим часам. Шкала времени Ардуино показана снизу, одна из возможных. В этой шкале Ардуино примет строки "dONLe", "dOFFLe", и т.д.
 
Последнее редактирование:

Sever44

Member
Всем привет!
Докладываю результаты моих мучений.
ДЕЛО БЫЛО НЕ В БОБИНЕ....
Изучая основы, я в нескольких местах видел утверждение, что ESP к Ардуине подключается без перекрестия, т. е. RX к RX, а TX к TX. Я удивился, но сделал, "как положено".
Теперь то я понял, что речь шла об использовании Ардуины для прошивки ESP.
Включил голову, сделал, как учили в школе, и все заработало.
Причем, я дважды упоминал на форуме о таком неправильном подключении, и никто меня муд............реца, не поправил!
Так что БОЛЬШЕ ВНИМАНИЯ РАЗНЫМ ВОПРОСАМ!
Всем спасибо!
 
Сверху Снизу