Drive your career as React Developer with Symphony Solutions!
×Закрыть

(arduino) Коммуникация между ESP и MEGA

Всем привет, пришлось мне влезть в ардуинки.

Есть платка типа RobotDyn Mega + ESP8266. Рабочая.

Получается слать данные от ESP к MEGA. Всё просто.
На ESP делаю

    Serial.print("ля-ля-ля").
На МЕGA
void serialEvent3()
{
  while (Serial3.available())
  {
        ля-ля-ля
Всё работает.

А вот как послать данные c MEGA в ESP?

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Запустил ваш код на Arduino nano на прием, отправлял команду с STM32 (так как в nano один UART)

Работает на 9600, не работает на 115200
Причина скорее всего в клоке — МК работает от внутреннего генератора, частота котого плавает с температурой, напряжением, погодой на марсе.
Ставьте фьюзы на внешний кварц или уменьшайте скорость

PS таки заработало и на 115200. (даже пробовал греть arduino nano феном до градусов так 100 — все равно прием работал)
Значит вероятнее всего с распиновкой проблема.
Описывайте схему соединений
на mega такая распиновка
www.arduino.cc/...​ons/communication/serial
SERIAL PINS
0(RX), 1(TX)

SERIAL 1 PINS
19(RX), 18(TX)

значит соединять 0 с 18, 1 с 19

Работает на 9600, не работает на 115200

Всё работает и на 115200. Но вот либы, что идут к чипам — безумно кривые, как оказалось.
Все получилось. Просто void serialEvent() на esp8266 не работает, а вот Serial.read() работает.

так я зразу запитував
dou.ua/...​rums/topic/30190/#1823966

і тобі обмін те синхронний (запит-відповідт), чи асинхронний(події)?
треди підтримуються?
переривання, чи пулінг?

ти відповів синхронний, а юзав івенти... О_О

Мне посоветовали каждый чип на плате проверить, что там есть дуплекс действительно (перемычками можно там вырубать один, врубать другой и т.п.) для начала.
Я ее заюзал, потому-что там сразу всё в одном.

Платка именно такая.
Тут еще нюанс, что я не напрямую с портами работаю, а использую те либы, что для ардуинки уже есть.

там описаний варіант
Связь между Mega и ESP и одновременно Mega и USB

1234 пины в on, остальные в off.

Есть еще момент, что я неправильно работаю с Serial на ардуинке и там есть какие нюансы.
Может надо какие flush юзать или еще что.

хз, з ардуінами їх псевдокодом не користувався,
на цьому мабуть все, що можу підказати

1. Можете написати невелику програму для роботи напряму із портами
тут приклад: www.xanthium.in/...​bedded-programming-avrgcc
, якщо все працює рухатись далі і копатись в цьому ардуінівському «фреймворку»

2. на ардуіно шукаєте вихід Tx, замикаєте його на Rx
відпраляєте Serial.print("ля-ля-ля")
і дивитесь чи потрапили сюди

void serialEvent3()
{
  while (Serial3.available())
  {
        ля-ля-ля
  }
}

Можливо не працює тому що неправильно зробили ініціалізацію. Приклади є тут:
www.arduino.cc/...​mmunication/serial/begin
www.arduino.cc/...​ons/communication/serial

P.S. Не користуюсь Ардуіно, тому міг щось пропустити.

Спасибо. Буду пробовать. Ардуинку взял, что она как бы самая простая и нужна только для проверки того, что на PC наваял. Такая из фанерки тележка с колесиками, ардуинкой и четырьмя копеечными моторами и колесиками.
В качестве IP камеры телефон юзаю.

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

Це проект щоб не нудьгувати під час карантину?)

Не совсем. Как несколько месяцев назад стартап с которым я работал развалился, я сконтактировал с одним украинцем, что он приличные железные тележки делает (100 кг таскают).
Но он не умеет в программирования и тем более распознавание образов. Во и хочу ума тем его тележкам добавить.
Так что да, то что делаю — это хобби, но с некоторой надеждой, что когда-нибудь найдутся инвесторы и покупатели.

Оно на первый взгляд кажется, что все просто и всё уже сделано, но в реальности на каждом, даже известном, шаге встречаются траблы. От собственно математики до ее программирования и теперь вот с ардуинкой.
Набросал я алгоритм за 3 дня и он на идеальном видео без коммуникаций с железом отлично отработал. Но когда начал запускать на тележке повсплывало громадное количество нюансов и сложностей. От детектора и трекера в распознавалке и скорости их работы до собственно кода в ардуинке и ее работы.

В области таких тележек есть американская контора. Они за 2 года съели 3 ляма инвестиций и по их видео у них все еще до сих пор очень криво работает. И главное понятно и мне и им, я уверен, где и что и как им фиксить, но это время и деньги.

Ну а я в одиночку их путь прохожу, проедая подушку и заработок жены.

Ну и вспоминая прошлые кризисы на ближайшие 2 года всё одно работодателей не появится, а так я свою квалификацию подниму за это время прилично.

З.Ы. Вот как пример, поигрался и столкнулся с проблемой, что не знаю, когда акки разрядились. Паять самому неохота, заказал из Китая индикаторы копеечные для оного (о том, что они очень полезны я даже не догадывался).

А зачем тогда тут мучатся с ESP, если все ровно жирные мозги надо там? че не подцепить плату с мк напрямую к IOT одноплатнику (что то типа aliexpress.ru/item/32802458477.html )? Как бы лишнее звено.

Мне нужен Wifi и Udp, так мне сильно проще. Кроме того не забывай, что на наших рынках с дешевыми (и дорогими) платами всё плохо и очень. В Киеве выбор побольше и цены поменьше, в Минске выбор поменьше и цены повыше. Но просить кого от вас прислать — у вас почта нехилый ценник ставит на посылки, да и хрен его знает сколько доставлять будут. Вариант с оказией — это сильно геморно.
Поэтому и взял тут что было по относительно разумной цене в Минске. Ждать 2 месяца из Китая мне сильно не хотелось.

Уже разобрался, всё заработало. Просто примеры в инете по этой платке кривые и с ошибками. Нашел эмбедера, что подсказал.

так мне сильно проще

Так а разве тебе не проще писать под юникс* привычный софт, который просто дергает мк через UART/i2c/spi? Сильно ведь быстрее разработка, нежели с проприетарными платформами, +переносимость кода.
К тому же за жалкие 18$ ты получаешь там жирные ресурсы, кучу интерфейсов:
256RAM,500ROM, Wifi, BT, GPIO (i2c/spi/uart), USB, GPRS, Audio in-out, LCD, SD,camera interface, battery input, и для прикола Fm :)
chip.by/...​t-dlya-interneta-veshhej
кажется, цена у вас адекватная на него.

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

А можно его кормить от 2×18650? Это около 8 вольт.

Как там «Знал бы прикуп, жил бы в ...».

Ну как кормить? От 8в только через внешний DC-DC (опять копейки) до 3вт плата жрет, хоть там походу нет узлов питающихся напрямую от входного напряжения, без своего DC-DC, но я бы не рисковал. На этой плате есть спец порт для батареи с контроллером заряда, но он ведь на одну ячейку т.е 4.2в, можно использовать как бесперебойник для «мозгов», если запаять туда акк от смартфона- в магазах за копейки неликвидные продают.

Херовенько. Ваты то дать от пачки акков не проблема. Т.е. пачку в параллель можно запихнуть. Для литиевых и 10А отдать не проблема.

с контроллером заряда

Разряда, стоит копейки.

По этой роботдиновской платке уже могу сказать, что wifi очень слабенький, если кто решит купить. Рука рубит сигнал.

Т..е на поиграться на с wifi точкой рядом годится, но не более.

алиэкспресс для кого существует

Это где он экспресс. Больше на собачью упряжку похож.

В общем попробовал всё выше. Не работает.

Вот сделал такой код:

nt led_pin = 13;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);
  //while (!Serial)
  //{
  //  ; // wait for serial port to connect. Needed for native USB port only
  //}

  pinMode(led_pin,OUTPUT);
  for(int i=1; i<10; ++i)
  {
    digitalWrite(led_pin, LOW);
    delay(100);
    digitalWrite(led_pin, HIGH);
    delay(100);
  }
  Serial.println("setup done");

}

void loop()
{
    digitalWrite(led_pin, LOW);
    Serial.println("on");
    delay(500);
    digitalWrite(led_pin, HIGH);
    Serial.println("off");
    delay(500);
}

void serialEvent()
{
  Serial.println("serialEvent ...");
  while (Serial.available())
  {
    char inChar = (char)Serial.read();
    Serial.write(inChar);
  }
}

void serial1Event()
{
  Serial.println("serial1Event ...");
  while (Serial1.available())
  {
    char inChar = (char)Serial1.read();
    Serial1.write(inChar);
  }
}

Pагружаю это в esp8266.

В терминале получаю от
Serial.println("on");
Serial.println("off");

Но светодиод не мигает и не читает из серийного порта, то что шлю из SerialMonitor от ArduinoIDE.

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

знайдіть екзепл від Ардуіно, переконайтесь що плата працює. кожен

Serial

має свої піни, можливо Ви відправляєте на одні, а читаєте з інших.... чи у Вас є осцилограф чи логічний аналізатор?

Нету.
И для меня странный момент, писать в сериал порт могу, а читать из него не могу.
И эта плата 2 в одном.

Странно заниматся таким без осцилографа или лог. анализатора. И дебажить миганием светодиода вообще жесть

PS Ардуина еще наверное затактирована от внутреннего RC осциллятора? Тогда ставьте скорость 9600, а не 115200, маловероятно что 115 к будет стабильно работать с таким тактовым источником

Ну не все в крутых эмбедерских контор в Штатах, вывезенные родителями-евреями в 80-е.

пффф. электроника одно из моих хобби. Работаю на унылом энтерпрайзе на украинской галере.
после покупки осциллографа занятия электроникой выходят на другой уровень — до этого как вслепую тыкаться. (осцилл Siglent 1104-x-e: 100 Mhz, 4 канала, 12 мегаточек)

А мое нет,мне просто пришлось с ардуинкой повозится.

і тобі обмін те синхронний (запит-відповідт), чи асинхронний(події)?
треди підтримуються?
переривання, чи пулінг?

Для отладки мне нужен синхронный. Где-то что-то затыкается, пытаюсь найти где.

слать наоборот,
RS232 він же дуплєкс,
і вопше первонах

Подписаться на комментарии