Подключение raspberry pi к ардуино: настройка соединения

Как подключить Raspberry Pi к Ардуино?

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

Иногда вам может понадобиться подключить Ардуино (англ. – Arduino) к плате Raspberry Pi. Например, если у вас есть датчики, двигатели и исполнительные механизмы, вы можете подключить их к Arduino, а значения передавать и получать от “малины”. Таким образом, мы можем отделить вычислительные задачи (выполняемые Raspberry Pi) и управляющие задачи (выполняемые Ардуино).

Для связи мы будем использовать простую последовательную связь по USB-кабелю. Итак, давайте начнем!

Подключите светодиод к выводу 11, как показано на рисунке ниже.

Включите Raspberry Pi и откройте Python 3 в новом окне.

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

Теперь откройте Arduino IDE и загрузите следующий код в Arduino.

Убедитесь, что код загружен в Arduino.

В интерфейсе Raspberry Pi обязательно включите Serial и I2C в PiConfig.

Затем вам нужно перезапустить Raspberry Pi. Откройте терминал и выполните следующие команды:

Подключите Ардуино к “Малине”.

Затем найдите строку с /dev/ttyACM0 или что-то вроде /dev/ttyACM1 и т.д. Проверьте ACM с любым числом 0,1,2 и т.д.

Откройте Python снова и измените ser = serial.Serial (“dev/ttyACM1”, 9600) на найденный номер ACM. Итак, если в вашем случае вы получили ACM0, строка должна выглядеть так: ser = serial.Serial (“dev / ttyACM0”, 9600).

Теперь запустите программу, которую вы только что создали в Python3. Вы увидите «Hello From Arduino!» На терминале Python, и ваш светодиод тоже будет мигать!

Digitrode

цифровая электроника вычислительная техника встраиваемые системы

Соединяем Raspberry Pi с Arduino через Serial GPIO

Одним из способов соединения Raspberry Pi и Arduino является их связь по линиям GPIO с функцией последовательного порта.

Выводы миникомпьютера Raspberry Pi и платы Arduino имеют разное напряжение, поэтому при их связи таким образом необходимо использовать преобразователь логических уровней или хотя бы делитель напряжения.

Для начала нужно настроить Raspberry Pi для последовательной передачи данных.

Во-первых, чтобы использовать серийный порт Raspberry Pi, нужно деактивировать getty (программу, которая отображает экран для логина). Для этого находим в файле /etc/inittab строчку:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

И комментируем ее:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Во-вторых, чтобы предотвратить отправку данных в последовательный порт при загрузке Raspberry Pi, открываем файл /boot/cmdline.txt и находим, а затем удаляем следующую строчку:

Затем перезагружаем Raspberry Pi с помощью команды sudo reboot. После этого устанавливаем minicom:

sudo apt-get install minicom

Загружаем в Arduino следующий скетч:

Теперь соединяем линии GPIO миникомпьютера и линии последовательного порта Raspberry Pi через конвертер логических уровней.

Удостоверьтесь, что подключение Raspberry Pi произведено в соответствии с распиновкой разъема GPIO:

Теперь протестируем Minicom. Чтобы соединиться с Arduino через последовательный порт, введем в терминале:

minicom -b 9600 -o -D /dev/ttyAMA0

Если вы введете какой-нибудь символ, он будет отправлен в Arduino и послан назад в виде соответствующего ASCII-кода. Вот так просто Raspberry Pi может общаться с Arduino.

Чтобы выйти, нажмите CTRL + A, а затем Q.

Теперь попробуем сделать более сложные вещи, написав программу на Python. Для начала нужно установить Py-Serial:

sudo apt-get install python-serial

Ниже приведен небольшой код, который отправляет строчку «testing» через последовательный интерфейс GPIO:

Объединяем Arduino с Raspberry Pi

Arduino и Raspberry Pi — фантастические машины, и здесь мы воспользуемся Arduino для считывания показаний температурного датчика TMP36. Мы отправим данные через последовательное USB-соединение на Raspberry Pi, где запущен код Python, который будет читать и интерпретировать данные, а затем действовать на их основе. Этот проект покажет, что две машины могут сосуществовать и что Arduino пригоден для расширения возможностей Pi.

Чтобы установить Arduino IDE, перейдите на www.arduino.cc/en/Main/Software и выберите версию для Linux ARM. Загрузите программное обеспечение и извлеките архив в домашний каталог (/home/pi/). Затем откройте окно терминала. Теперь в вашем домашнем каталоге должен быть каталог arduino-1.8.5. В терминале измените каталог, чтобы мы оказались в каталоге Arduino:

В каталоге должен быть файл с именем install.sh, который установит Arduino IDE на Pi. Для запуска файла введите:

Через несколько секунд установка завершится. Следующим шагом будет выдача Pi доступа к устройству Arduino и отправка ему кода, посредством добавления пользователя Pi в группу dialout с помощью команды usermod:

Наконец, перезагрузите Raspberry Pi.

Датчик TMP36 имеет только три вывода, и, если смотреть со стороны выводов (плоская сторона), то порядок такой: Vcc,
Vout и GND [Земля]. TMP36 может работать с напряжением от 2,7 до 5,5 В, поэтому напряжение 5 В с Arduino обеспечит питание TMP36, а контакт GND подключается к GND на Arduino. Наконец, вывод Vout (в центре) соединяется с АО на Arduino. Для получения более подробной информации загрузите схему для этого проекта. Проволочными перемычками папа-папа обеспечьте эти соединения, а затем подключите Arduino к USB-порту Raspberry Pi.

Чтобы открыть Arduino IDE, перейдите в главное меню, выберите Programming > Arduino, и через несколько секунд приложение загрузится и представит шаблон для нашего кода. Удалите шаблон (нажмите Ctrl+A, а затем клавишу Delete), чтобы начать код заново. На Arduino мы пишем код в приложении, компилируем его и затем записываем код в Arduino. Это называется заливкой.

Наша первая строка кода создает переменную. Это объект хранения данных, позволяющий нам ссылаться на него по имени и отображать содержимое объекта. В данном случае мы создаем переменную с именем sensorPin, которая на самом деле является соединением Vout TMP36 с контактом АО Arduino. Мы должны указать Arduino, какой тип данных будет содержать переменная.

В нашем случае это целочисленное значение 0.

Затем мы создаем раздел кода, настраивающего Arduino на задачу. Этот код запускается один раз в начале. Здесь мы сообщаем Arduino, что хотим использовать последовательное соединение со скоростью 9600 бод.

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

Мы всё еще находимся внутри цикла, и теперь надо применить немного математики для преобразования необработанных данных в новую переменную с именем voltage, которая будет содержать значение с плавающей точкой. Voltage — это наши необработанные данные, умноженные на 5,0 (напряжение, которое мы подаем на TMP36; измените это на 3,3 В при использовании 3,3 В Arduino). Затем мы употребляем составной оператор для деления значения, сохраненного в переменной voltage, на 1024 для 10-битного аналога, используемого в Arduino.

Новая переменная, с именем temperatureC, используется для хранения решения уравнения, в котором сначала вычитается 0,5 из переменной voltage, а результат умножается на 100, что дает нам температуру в градусах Цельсия:

В последнем разделе кода мы выводим данные температуры на последовательную консоль, а также выводим единицу измерения. Задержка на секунду помогает сделать код читаемым:

Сохраните код! Затем перейдите в Tools > Board и убедитесь, что ваш Arduino соответствует в данном случае Arduino/Genuino Uno. Затем перейдите в Tools > Port и убедитесь, что выбран ttyUSB0. Теперь нажмите Sketch > Upload для заливки на Arduino. Это займет около минуты. После этого мы можем перейти к коду Python.

Откройте редактор Python 3, который находится в меню Programming. Нажмите File > New, а затем сохраните новый файл как Serial-Data.py. Сохраняйте почаще, чтобы избежать потери данных.

Мы начинаем код с импорта двух библиотек кода. Это serial, используемая для последовательного соединения,и time, используемая для регулирования скорости проекта.

Затем мы создаем две переменные — port и baud, которые используются для определения последовательного порта и скорости соединения:

Наш основной цикл будет постоянно проверять последовательный порт на данные с указанной нами скоростью:

Гарантируем правильность отправленных данных и отсутствие ошибок, проверяя их четность:

Потом прочитаем последовательные данные и на секунду остановимся:

Следующие четыре строки преобразуют полученные данные в строку и вырезают из строки нужные нам сведения (отсчитывая с нуля, мы находим начало и конец данных температуры); затем data преобразуется обратно во float и данные выводятся в оболочку.

В последнем разделе мы создаем тест, который сравнивает значение, хранящееся внутри переменной data, с жестко закодированным значением, в данном случае — 21 °C. Если температура выше 21°C, то выводится «Тепло», а если меньше, то выводится «Холодно».

Сохраните код и нажмите Run > Run Module (F5), чтобы его запустить. Теперь мы должны увидеть данные температуры, появляющиеся в оболочке Python, и соответствующее сообщение, зависящее от того, насколько тепло или холодно.

Ну вот, мы научились подключать Arduino к Raspberry Pi и извлекать данные из последовательного порта с помощью Python. Отличная работа!

Блог Дмитрия Сошникова

Обо мне

О чем я пишу

Июль 2015

Пн Вт Ср Чт Пт Сб Вс
« Июн Ноя »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31

Подключение Arduino к Raspberry Pi

Как я уже писал ранее, во многих сценариях интернета вещей бывает полезно иметь один достаточно мощный встраиваемый компьютер (в роли которого может выступать Raspberry Pi), который может связываться с множеством расположенных в разных местах сенсоров, управляемых простыми микроконтроллерами семейства Arduino. При этом можности Raspberry Pi хватает, чтобы передавать данные по защищенным каналам HTTPS в облако, а также чтобы осуществлять взаимодействие с пользователем посредством развитого интерфейса (например, при работе под управлением Windows 10).

Для соединения Arduino с Raspberry Pi существует несколько сценариев подключения:

    • Использование явного последовательного канала передачи данных. При этом возникают сложности, связанные с разностью уровней питания: Raspberry Pi работает на напряжении 3.3В, в то время как Arduino использует 5 вольт. При этом для обеспечения безопасного соединения рекомендуется использовать специальные преобразователи уровня.
    • Использование последовательной шины I2C, что позволяет подключать к одной Raspberry Pi до 128 устройств Arduino в режиме slave, при этом такое подключение также не требует преобразователей уровня.
    • Подключение по USB является пожалуй самым простым способом, поскольку для этого достаточно всего лишь воткнуть Arduino через стандартный кабель в USB-разъем Raspberry Pi. Именно этот способ мы и рассмотрим.

В качестве примера рассмотрим простейший датчик температуры и давления BMP-180, подключенный к Arduino Uno по стандартной схеме. После этого контроллер Arduino включается в USB-разъем Raspberry Pi, а сам Raspberry Pi затем подключается обычным образом к питанию, монитору и т.д.

При таком подключении общение Arduino и Raspberry происходит по последовательному порту. Предварительно (до подключения) на Arduino необходимо залить требуемый скетч – в нашем случае это простая программа, считывающая значение давления и температуры с датчика и печатающая их в виде текста в последовательный канал (температура предваряется символом Т, а давление – P):

Проверим работоспособность скетча в Arduino IDE, открыв монитор последовательного порта – мы должны увидеть появляющиеся значения температуры и давления. Обратите внимание на скорость – в программе задана скорость в 9600 бод, такие же установки должны быть и у монитора последовательного порта.

Теперь загрузим Raspberry Pi – в моем примере я использую Pidora в качестве базовой операционной системы и классическую модель Rapsberry Pi, хотя с таким же успехом можно использовать Raspberry Pi 2 и Windows 10.

Первым делом нужно определить, какой последовательный порт будет отвечать за общение с Arduino-контроллером. Проще всего это сделать следующим образом: при выключенной плате Arduino смотрим все доступные последовательные терминалы (ls /dev/tty*), после чего включаем плату в USB-порт, и через некоторое время снова смотрим список терминалов. То устройство, которое появилось в списке, и будет требуемым портом. В моём случае это был /dev/ttyUSB0, но в зависимости от номера порта, используемого дистрибутива системы и других факторов это имя может сильно отличаться.

Теперь мы можем использовать любые средства общения с последовательным портом для того, чтобы принять значения от датчика, передаваемые Arduino. Чаще всего удобным оказывается использовать Python и библиотеку serial. Например, следующий простой скрипт, набранный прямо в REPL, будет отображать на экране все данные, приходящие в последовательный порт:

Ниже показано, как этот скрипт выполняется в окне терминала на Raspberry Pi:

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

Источники:

http://digitrode.ru/computing-devices/mcu_cpu/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio.html

http://nerohelp.info/17921-obedinyaem-arduino-s-raspberry-pi.html

http://blog.soshnikov.com/2015/07/02/%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-arduino-%D0%BA-raspberry-pi/

http://arduinoplus.ru/cubot-na-aliexpress/

Ссылка на основную публикацию