Связь по UART MEGA и ESP8266
- Войдите на сайт для отправки комментариев
Пытаюсь наладить одностороннюю связь между 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); } } }
Бяда с кодами :)
Мега
ESP
http://arduino.ru/Reference/Serial/Print
Пробовал одним из первых вариантов. Сейчас повторил - связи нет(светодиод не моргает).
Сделайте не печать, а blink мегой на ногу TX. Тогда обычным мультиметром или digitalRead() -ом со стороны ESP сумеете проверить работоспособность схемы.
TX на RX просто через 1 ком подать
Звиняюсь за задержку, долго искал как обзываются выводы ЕСП в среде ардуино. Блинк на меге работает, что подтверждает тестер на выходе TX. НО!!! моргает светодиод RX на плате меги. Как говорит ведущий программы с первого канала - Это норма?
На входе ESP RX после делителя строго меандр 3.2 вольта (для ua6em).
Но в любом случае ESP молчит. Скетч прилагаю.
По-моему - ненормально, когда при работе TX мигает RX.
На входы просто по GPIO number ссылаться допустимо.
А что, если ногу ESP-шки потыкать в VCC/GND - реакция есть?
По моему то же не нормально. А вот для китайцев(мега не оригинал и не копия оригинала, а на чипе CH340) символы могут быть и одинаковыми :)
В любом случае при блинке сигнал на ноге ESP есть и при посылке в порт логгер так же видит посылку на TX с меги и на RX ESP
НЕТ. Потому и выложил скетч, может неправильно ногу читаю(или не ту)
Наверняка не ту.
Ищите в гугле "<модель платы> pinout", на картинке найдёте GPIONN, вот эту NN и сунете в дижиталрид.
Вот на GPIO3(RX) и подаём и читаем(надеюсь:) )
Подергайте RXD2... У меня такой платы нет, я без понятия, что на RXD0 там подвешено.
просто 3 в скетче напишите...похоже не взлетит...при заливке программы моргает светодиод на GPIO2, а это TX1
Подёргал :) безрезультатно.
просто 3 в скетче напишите...похоже не взлетит...при заливке программы моргает светодиод на GPIO2, а это TX1
Пробовал ранее - не работало(светодиод не мигал). НО!!! Сейчас появилась реакция на замыкание на землю. Замыкаю 200 Ом . походу что то перетягивает.
у меня есть такие платы, но попробовать смогу только завтра, nano в другом месте...
еще можно перекинуть на Serial2
Всё страньше и страньше(с)
Bо первых: Убедился , что цитируемые сообщения не сохраняются , а изменяются на поправленные автором(ua6em).
Во вторых: при изменении в скетче 3U просто на 3 нижний порог меандра стал 1.8 В т.ч. теория о какой-то внутренней подтяжке подтвердилась. Теперь вопрос: победить то как? Увеличивать плечо до 10к/20к? Так на карадио не было связи пока не уменьшил до кОм вместо десятков кОм. Неужто так сильно ток влияет? Как бы не хочется просто спалить вход запитав напрямую через сопротивление. Неужели только конвертер уровней поможет? Или при попытке принять именно данные посредством сериал порта один хрен не прокатит? Только переназначая через софт порт на другой пин?
Всё страньше и страньше(с)
Bо первых: Убедился , что цитируемые сообщения не сохраняются , а изменяются на поправленные автором(ua6em).
ты просто за мной не успел )))
Serial2 ничто не грузит
8266 толерантен к сигнальным 5v.
Сдвиги с Serial2 есть. При работе с блинком при использовании считывания с D7 есть мигание штатного светодиода ESP. Связь есть(правда давно проверенная тестером и логгером) Ура-ура.
А вот при попытке перейти на общение по UART - Serial2 вообще не компилируется - " 'Serial2' was not declared in this scope" , а Serial1 не работает ибо отсутствует как данность:(
Через резистор - возможно, а так даже на этом форуме есть ответ с картинкой от разрабов, что больше 3.6 подавать нельзя(про пдф и не говорю, Вы и так лучше меня в этом вопросе наверняка разбираетесь)
Покажите-ка ответ с картинкой от разрабов. Потому как я видел другой ответ от разрабов.
Кстати, а pinMode не надо ли ставить на ESP-шке? У 328-го ног по дефолте в INPUT-e, а вот у ESP - не помню. Всегда принудительно задаю.
Май инглиш из бед(а там в оригинале вообще небось китайский, да и давно этот спор видел:) потому для перестраховки буду придерживаться правила: не подавать на вход больше напряжения питания.
По выставлению на ESP опыта минимум(особенно в Arduino IDE) По идее должны были заложить при переносе проектов в среду ардуино, хотя кого я обманываю - работает блинк и ладно :) Может ежели пользовать их миктопитон или луа(или хз чёрт там ногу сломит, не разбирался), то всё должно работать? VSCode то же вряд ли спасёт. Проблема скорее всего гораздо проще, но тяму(знаний) не хватает.
А вот при попытке перейти на общение по UART - Serial2 вообще не компилируется - " 'Serial2' was not declared in this scope" , а Serial1 не работает ибо отсутствует как данность:(
да, UART2 не задекларирован в ядре, видимо использовать нельзя в IDE
Этот нижний порог в 1.8 В заставил всё-таки собрать преобразователь уровней. Нашёл в закромах диод Шотки и резюк на 10кОм и .... "It's Alive!!!" Минус один - чтобы прошить ESP необходимо отсоединять от меги.
Выводы: устраивать обмен по хардам можно. Причём даже при занятом монитором порта на ардуине. Главное использовать нормальные конвертеры уровня. Как вариант соединение напрямую через резистор то же могло заработать, но рисковать входом совсем не хочется.
Вопрос в следующем: а как ....... (непереводимый фольклор) работает во всех примерах из интернета? В иных случаях делитель даже из десятков килоом. "Интуитивно я конечно догадываюсь, но хотелось бы уточнить"(с) :) Так же антирестно как работает конвертер на транзисторе, там же явно идет инверсия сигнала.
Спасибо всем откликнувшимся и приятного программирования.
У меня китайский клон меги, долго йопся пока не понял, что на ней RX TX попутаны и кстати как выше писали, esp нормально работает с 5в логикой...