Краткое содержание
В этом видео рассказывается о том, как установить двустороннюю последовательную связь между Raspberry Pi и Arduino. Автор объясняет, как использовал Arduino в качестве контроллера двигателя для камер слежения и столкнулся с трудностями при организации двусторонней связи. Ключевым моментом стало добавление задержки и повторной установки DTR (Data Terminal Ready) после очистки, что позволило решить проблему.
- Установка двусторонней последовательной связи между Raspberry Pi и Arduino может быть сложной задачей.
- Добавление задержки и повторная установка DTR после очистки может решить проблему связи.
- Код, представленный в видео, можно использовать на других платформах, таких как NVIDIA Jetson TX1.
Введение
Автор рассказывает о своем проекте, в котором он использует Arduino в качестве контроллера двигателей для камер слежения, а Raspberry Pi для обработки данных. Для связи между ними он использует последовательный порт через USB. Он отмечает, что столкнулся с трудностями при организации двусторонней связи и решил поделиться решением, которое ему помогло.
Физическое подключение и код Arduino
Подключение Raspberry Pi к Arduino (в данном случае Arduino Mega 2560) осуществляется с помощью обычного USB-кабеля. Автор демонстрирует код для Arduino, который включает в себя настройку скорости передачи данных (baud rate) и ожидание подключения к последовательному порту. В основном цикле (loop) код проверяет наличие данных в последовательном порту. Если получен символ "0", светодиод перестает мигать, и в ответ отправляется символ "A". Если получен символ "1", светодиод начинает мигать, и также отправляется символ "A". В случае получения любого другого символа отправляется символ "E" (ошибка).
Код Raspberry Pi на C
Автор показывает код на C для Raspberry Pi. Функция OpenSerialPort открывает последовательный порт и настраивает его параметры. В основном цикле программы отправляется символ "1" на Arduino, чтобы запустить мигание светодиода. Затем вызывается функция readFromSerial, которая ожидает ответа от Arduino (символ "A"). Полученный символ выводится на экран. Этот процесс повторяется с отправкой символа "0" для остановки мигания. Изначально этот код не работал.
Решение проблемы с DTR
Автор рассказывает, что после долгого времени поисков он нашел решение на hackaday.io в проекте четырехногого робота. Он заметил, что автор проекта успешно отправляет и получает данные между Arduino Mega 2560 и Raspberry Pi. Изучив код на Python, он обнаружил, что после очистки DTR (Data Terminal Ready) делается задержка в одну секунду, а затем DTR снова устанавливается. В своем исходном коде автор только очищал DTR. Добавление задержки и повторной установки DTR решило проблему, и светодиод начал мигать.
Код Raspberry Pi на Python и Jetson TX1
Автор переписал код на Python и столкнулся с той же проблемой: без задержки и повторной установки DTR код не работал. После добавления этих строк код заработал. Автор предоставляет ссылки на проект на Hackaday и на свой код в описании видео. Он также протестировал этот код на NVIDIA Jetson TX1 и успешно использовал его для связи с Arduino, который выступает в качестве контроллера сервоприводов.

