Esp32 передача по uart в ардуино мега
- Войдите на сайт для отправки комментариев
Ср, 24/08/2022 - 08:21
Из serial2 esp32 передаю в serial 2 Arduino mega на скорости 115200. Скетч работал между ардуино про мини 3.3в и Arduino mega ранее. Сейчас залил его на esp32. Передача данных есть но почему то читается только по 1 байту за раз. Вопрос прошу пример скетча по передачи int из есп32 в мегу. Может быть я что то не так делаю.
Проблема именно в приеме. Как правильно принять . Serial.write отправляю
Читаю так и по кругу получаю разные crc контрольные одни и те же. Делаю вывод не принимает целиком . Когда пробую serial.println и читать то тоже читает по 1 символу(скетч уже другой)
// структура данных посылки
https://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Нельзя двоичные данные передавать между разными архитектурами. Они разные. Передавай строкой.
Нельзя двоичные данные передавать между разными архитектурами. Они разные. Передавай строкой.
с какого? - можно конечно.
Так - нельзя. Хочешь читать ему четыре часа лекций как правильно - валяй.
Не понимаю почему стандартный пример ардуино не читает данные целиком. Тайм-аут что ли нужно другой. Под рукой нет возможности пока проверить. Куда копать то скажите
Не понимаю почему стандартный пример ардуино не читает данные целиком. Тайм-аут что ли нужно другой. Под рукой нет возможности пока проверить. Куда копать то скажите
fsdb
если не хотите проблем - никогда не используйте неконкретные спецификаторы типов аля int.
пользуйтесь вместо этого типами с точным указанием размера - int8 int16 int32
В чем проблема? -ваши "int" на ардуино Меге это 2 байта, то есть int16, а на ЕСП32 инт 4 байта, то есть int32, Структура, вроде бы описанная одинаково на двух концах линии - никогда не будет иметь одинаковый CRC
И второе - это выравнивание. В памяти МК данные не всегда лежат подряд байт к байту, иногда они выравниваются по два или по 4 байта. В результате структура, даже описанная побайтно, опять может получится разной на двух сторонах линии. Я не мастак много обьяснять в 8 утра :), поэтому найдите в гугле что-нибудь про "выравнивание данных по границе слова" и про директиву pack
короче, для новичка может и правда проще будет перевести ваши данные в строку, передать, а на Меге конвертнуть обратно
пользуйтесь вместо этого типами с точным указанием размера - int8 int16 int32
это всё тоже не гарантировано будет одинаковым
Спасибо попробую. Мне разницы нет. Раз в секунду передача. Главное crc
спасибо. через String реализовал передачу. без проблем. нужно придумать какой то простой алгоритм проверки контрольных сумм... одним числом . передаю число от -999 до 999