Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

Как организовать обмен данными между Arduino и Raspberry PI ?

Как организовать обмен данными между Arduino и Raspberry PI ?

В робототехнике и в системах в целом часто возникает необходимость разносить устройства и делить между ними задачи. На исполнительные органы и нижний уровень управления лучше всего ставить платы на микроконтроллерах, так как их быстродействие гораздо выше чем у компьютера. Компьютер в основном собирает и отдаёт данные, обрабатывает сложные алгоритмы, передаёт всю информацию в WEB, ну и тому подобное. Реализация связи идёт по такой цепочке Arduino I2C Raspberry PI. Давайте попробуем сделать.

Из этой статьи вы узнаете:

Простейшая схема подключения
Загружаем скетч и программу
Мой эксперимент «На столе»

Друзья, всем добрый день, на связи снова я, автор блога, Гридин Семён. Давно хотел написать статью по этой теме. И вот этот момент наступил. Я тоже делаю первые шаги в этом направлении.

Мне очень важно понять, как реализуется обмен данными между микроконтроллерной платой и одноплатным компьютером. Неважно какого производителя, смысл один и тот же. У меня есть Raspberry PI и Arduino UNO. Чаще всего в интернете я встречал описание связи по интерфейсу I2C. Вот с неё мы и начнём.

Какое именно можно найти практическое применение? Именно распределение функций и задач в роботе и в автоматических системах. Таким образом можно расписать независимые микро-алгоритмы между действующими узлами и передавать всю необходимую информацию в «Мозг».

Простейшая схема подключения

Подключение ножек опишу лучше в табличной форме, так нагляднее всего, проводов всё равно немного:

Arduino UNORaspberry Pi
5V5V
GNDGND
SCASCA
SCLSCL

Я собрал схему.


Загружаем скетч и программу

Давайте подключим датчик температуры DHT11, чтобы мы могли видеть что обмен данными у нас реально работает.

Итак пишем скетч на Arduino.

И пишем скрипт для Raspberry Pi на Python:

И смотрим, что из этого у нас получается.

Мой эксперимент «На столе»

Хочу сразу написать, что в Raspberry Pi программа сразу не заработает, нужно сделать ещё несколько действий, в том числе и проверить связь между устройствами.

Сначала в raspiconfig мы выставляем разрешение на работу I2C порта. Находим в главном меню настройки preference — Interfeis — I2C — Enable.

Перезагружаемся:

После перезагрузки проверяем, есть наше устройство?:

Если в ответ на эту команду мы получили:

То всё ОК! Обращаю внимание у Raspberry Pi 3 только один порт i2c - 1.

Ставим следующие пакеты:

Теперь проверяем соединение:

В ответ должна выскочить такая картинка в консоли:

Если показывает адрес, то значит малина видит ваше устройство.

Если ваш скрипт выдаёт такую ошибку:

Она говорит нам о том, что нужно проверить связь, так как устройство не доступно.

Записываем скетч и скрипт и наслаждаемся моментом:

На этом у меня всё, друзья. Если есть вопросы, пишите письма. Подписывайтесь на новости блога, пишите комментарии. Пока — пока.

С уважением, Гридин Семён

Вам так же может быть интересно

Комментариев к статье: 8
  • Можно было сразу рассмотреть связь через UART, там даже проще немного.

    Или свисток USB-RS485 за 60р. с несколькими ардуинами и modbus, благо всё давно написано, надо только собрать.

    • Это через библиотеки Modbus делается? А скорость обмена там примерно какая?

      • Добрый день.

        Скорость обмена наверно как и на всех стандартных UART до 115200 б/с.

        На те же выходы UART + 1GPIO можно повесить RS485 микросхему и будет Вам 485 и без свистка =)

  • Вариантов много, мне больше всех нравится вариант, где быстрее всего будет передавать данные!!! :sad:

    • Быстрее всего по параллельной шине или QUAD-SPI)) на крайний случай для пром.применений — CAN шина.

      если на GPIO есть 16 свободных ног, городи параллельную передачу) максимум скорости =))))

  • «На те же выходы UART + 1GPIO можно повесить RS485 микросхему и будет Вам 485 и без свистка =)»

    Что за древняя технология пином дрыгать. давно направление уже всё определяется автоматически. Тем более микросхему какую?? Обвязку поять? Свисток 60р. Готовая плата с обвязкой и автоматическим определением ~150р. Rs485 и есть промышленная сеть, что может быть проще, дешевле и безопаснее для оборудования на передачу до 1км???

  • Помнится, ардуинку про мини напрямую соединил с UART малинки, и все хорошо работало. На ардуинке висели два датчика температуры TS611, данные с которых запрашивала малинка. Никаких адаптеров не потребовалось, скорость сразу поставил 115200.

  • Пример хороший, но, к сожалению передает только один байт. Как быть если нужно передать float или string?