Связь по UART MEGA и ESP8266

толстый
Offline
Зарегистрирован: 10.02.2020

Пытаюсь наладить одностороннюю связь между Arduino Mega2560 и NodeMcu v3. Мега посылает символ, ESP должна принять и условно мигнуть встроенным светодиодом. Использую хардсериал. По итогу ESP молчит:) Логическим анализатором убедился, что мега сигнал выдает, а при помощи эха убедился что и RX на ESP живой. Год назад встречал инфу о разности битрейта, типа у приёмника должна быть установлена скорость  в несколько раз больше(или меньше) чем у передатчика. Косвенно на это намекает посылка разной длинны при передаче одного и того же символа(1). Пробовал с разным битрейтом (закоментированны в скетче). Дабы исключить занятость портов - питается всё через разъем питания(масло масляное). Тогда же пробовал типа рабочие связки из сети  - так же не взлетело. Сейчас накропал скетчи сам чисто для проверки работоспособности.

Вопрос в следующем: Возможно ли такое соединение по харду или надо использовать софтсериал, что очень бы не хотелось? Должна ли работать такая связка при таком соединении и скетчах? Ежели нет - направьте на путь истинный.

Схема соединений :)

Скетч меги 

void setup() {
  Serial.begin(9600); // открыть порт для связи
  //  Serial.begin(19200);
  //  Serial.begin(38400);
  //  Serial.begin(57600);
}

void loop() {
  delay(5000);
  Serial.print("1\n");
  Serial.println("1");
  Serial.println(1);
}

Скетч ESP

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600); // открыть порт для связи
  //  Serial.begin(19200);
  //  Serial.begin(38400);
  //  Serial.begin(57600);
}
void loop() {
  //  delay(5000);
  //  Serial.println("1");

  if (Serial.available()) {       // есть что на вход?
    int buff = Serial.parseInt(); // принять в переменную buff
    if (buff != 0) {
      digitalWrite(LED_BUILTIN, LOW);
      delay(1000);
      digitalWrite(LED_BUILTIN, HIGH);
    }

  }
}

 

толстый
Offline
Зарегистрирован: 10.02.2020

Бяда с кодами :)

Мега

void setup() {
  Serial.begin(9600); // открыть порт для связи
  //  Serial.begin(19200);
  //  Serial.begin(38400);
  //  Serial.begin(57600);
}

void loop() {
  delay(5000);
  Serial.print("1\n");
//  Serial.println("1");
//  Serial.println(1);
}

 

ESP

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600); // открыть порт для связи
  //  Serial.begin(19200);
  //  Serial.begin(38400);
  //  Serial.begin(57600);
}
void loop() {
  //  delay(5000);
  //  Serial.println("1");

  if (Serial.available()) {       // есть что на вход?
    int buff = Serial.parseInt(); // принять в переменную buff
    if (buff != 0) {
      digitalWrite(LED_BUILTIN, LOW);
      delay(1000);
      digitalWrite(LED_BUILTIN, HIGH);
    }

  }
}

 

nik182
Offline
Зарегистрирован: 04.05.2015
толстый
Offline
Зарегистрирован: 10.02.2020

Пробовал одним из первых вариантов. Сейчас повторил - связи нет(светодиод не моргает).

sadman41
Offline
Зарегистрирован: 19.10.2016

Сделайте не печать, а blink мегой на ногу TX. Тогда обычным мультиметром  или digitalRead() -ом со стороны ESP сумеете проверить работоспособность схемы.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

 TX на RX просто через 1 ком подать

толстый
Offline
Зарегистрирован: 10.02.2020

Звиняюсь за задержку, долго искал как обзываются выводы ЕСП в среде ардуино. Блинк на меге работает, что подтверждает тестер на выходе TX. НО!!!  моргает светодиод RX на плате меги. Как говорит ведущий программы с первого канала - Это норма?

На входе ESP RX после делителя строго меандр 3.2 вольта (для ua6em).

Но в любом случае ESP молчит. Скетч прилагаю.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);

}
void loop() {

  if (digitalRead(3U))
    digitalWrite(LED_BUILTIN, LOW); else
    digitalWrite(LED_BUILTIN, HIGH);

}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

По-моему - ненормально, когда при работе TX мигает RX.

На входы просто по GPIO number ссылаться допустимо.

А что, если ногу ESP-шки потыкать в VCC/GND - реакция есть?

толстый
Offline
Зарегистрирован: 10.02.2020

По моему то же не нормально. А вот для китайцев(мега не оригинал и не копия оригинала, а на чипе CH340) символы могут быть и одинаковыми :) 

В любом случае при блинке сигнал на ноге ESP есть и при посылке в порт логгер так же видит посылку на TX с меги и на RX ESP

толстый
Offline
Зарегистрирован: 10.02.2020

sadman41 пишет:
А что, если ногу ESP-шки потыкать в VCC/GND - реакция есть?

НЕТ. Потому и выложил скетч, может неправильно ногу читаю(или не ту)

sadman41
Offline
Зарегистрирован: 19.10.2016

Наверняка не ту.

Ищите в гугле "<модель платы> pinout", на картинке найдёте GPIONN, вот эту NN и сунете в дижиталрид.

толстый
Offline
Зарегистрирован: 10.02.2020

Вот на GPIO3(RX) и подаём и читаем(надеюсь:) )

sadman41
Offline
Зарегистрирован: 19.10.2016

Подергайте RXD2... У меня такой платы нет, я без понятия, что на RXD0 там подвешено.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

просто 3 в скетче напишите...похоже не взлетит...при заливке программы моргает светодиод на GPIO2, а это TX1

толстый
Offline
Зарегистрирован: 10.02.2020

sadman41 пишет:
Подергайте RXD2... У меня такой платы нет, я без понятия, что на RXD0 там подвешено.

Подёргал :) безрезультатно. 

толстый
Offline
Зарегистрирован: 10.02.2020

ua6em пишет:

просто 3 в скетче напишите...похоже не взлетит...при заливке программы моргает светодиод на GPIO2, а это TX1

Пробовал ранее - не работало(светодиод не мигал). НО!!! Сейчас появилась реакция на замыкание на землю. Замыкаю 200 Ом . походу что то перетягивает. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

у меня есть такие платы, но попробовать смогу только завтра, nano в другом месте...

еще можно перекинуть на Serial2
 

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial2.begin(9600); // открыть порт для связи
  //  Serial.begin(19200);
  //  Serial.begin(38400);
  //  Serial.begin(57600);
}
void loop() {
  //  delay(5000);
  //  Serial.println("1");

  if (Serial2.available()) {       // есть что на вход?
    int buff = Serial2.parseInt(); // принять в переменную buff
    if (buff != 0) {
      digitalWrite(LED_BUILTIN, LOW);
      delay(1000);
      digitalWrite(LED_BUILTIN, HIGH);
    }

  }
}

 

толстый
Offline
Зарегистрирован: 10.02.2020

Всё страньше и страньше(с)

Bо первых: Убедился , что цитируемые сообщения не сохраняются , а изменяются на поправленные автором(ua6em).

Во вторых: при изменении в скетче 3U просто на 3 нижний порог меандра стал 1.8 В т.ч. теория о какой-то внутренней подтяжке подтвердилась. Теперь вопрос: победить то как? Увеличивать плечо до 10к/20к? Так на карадио не было связи пока не уменьшил до кОм  вместо десятков кОм. Неужто так сильно ток влияет? Как бы не хочется просто спалить вход запитав напрямую через сопротивление. Неужели только конвертер уровней поможет? Или при попытке принять именно данные посредством сериал порта один хрен не прокатит? Только переназначая через софт порт на другой пин?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

толстый пишет:

Всё страньше и страньше(с)

Bо первых: Убедился , что цитируемые сообщения не сохраняются , а изменяются на поправленные автором(ua6em).

ты просто за мной не успел )))

Serial2 ничто не грузит

sadman41
Offline
Зарегистрирован: 19.10.2016

8266 толерантен к сигнальным 5v.

толстый
Offline
Зарегистрирован: 10.02.2020

Сдвиги с Serial2 есть. При работе с блинком при использовании считывания с D7 есть мигание штатного светодиода ESP.  Связь есть(правда давно проверенная тестером и логгером) Ура-ура. 

А вот при попытке перейти на общение по UART - Serial2 вообще не компилируется  -  "  'Serial2' was not declared in this scope" , а Serial1 не работает ибо отсутствует как данность:(

толстый
Offline
Зарегистрирован: 10.02.2020

sadman41 пишет:
8266 толерантен к сигнальным 5v.

Через резистор - возможно, а так даже на этом форуме есть ответ с картинкой от разрабов, что больше 3.6 подавать нельзя(про пдф и не говорю, Вы и так лучше меня в этом вопросе наверняка разбираетесь)

sadman41
Offline
Зарегистрирован: 19.10.2016

Покажите-ка ответ с картинкой от разрабов. Потому как я видел другой ответ от разрабов.

Кстати, а pinMode не надо ли ставить на ESP-шке? У 328-го ног по дефолте в INPUT-e, а вот у ESP - не помню. Всегда принудительно задаю.

толстый
Offline
Зарегистрирован: 10.02.2020

Май инглиш из бед(а там в оригинале вообще небось китайский, да и давно этот спор видел:) потому для перестраховки буду придерживаться правила: не подавать на вход больше напряжения питания.

По выставлению на ESP опыта минимум(особенно в Arduino IDE) По идее должны были заложить при переносе проектов в среду ардуино, хотя кого я обманываю - работает блинк и ладно :) Может ежели пользовать их миктопитон или луа(или хз чёрт там ногу сломит, не разбирался), то всё должно работать? VSCode то же вряд ли спасёт. Проблема скорее всего гораздо проще, но тяму(знаний) не хватает. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

толстый пишет:

А вот при попытке перейти на общение по UART - Serial2 вообще не компилируется  -  "  'Serial2' was not declared in this scope" , а Serial1 не работает ибо отсутствует как данность:(

да, UART2 не задекларирован в ядре, видимо использовать нельзя в IDE

толстый
Offline
Зарегистрирован: 10.02.2020

Этот нижний порог в 1.8 В заставил всё-таки собрать преобразователь уровней. Нашёл в закромах диод Шотки и резюк на 10кОм и .... "It's Alive!!!" Минус один - чтобы прошить ESP необходимо отсоединять от меги.

Выводы: устраивать обмен по хардам можно. Причём даже при занятом монитором порта на ардуине. Главное использовать нормальные конвертеры уровня. Как вариант соединение напрямую через резистор то же могло заработать, но рисковать входом совсем не хочется.

Вопрос в следующем: а как ....... (непереводимый фольклор) работает во всех примерах из интернета? В иных случаях делитель даже из десятков килоом. "Интуитивно я конечно догадываюсь, но хотелось бы уточнить"(с) :) Так же антирестно как работает конвертер на транзисторе, там же явно идет инверсия сигнала.

Спасибо всем откликнувшимся и приятного программирования.

knack
knack аватар
Offline
Зарегистрирован: 27.03.2012

У меня китайский клон меги, долго йопся пока не понял, что на ней RX TX попутаны и кстати как выше писали, esp нормально работает с 5в логикой...