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

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

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio/images/soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio-1.jpg

Выводы миникомпьютера 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 и находим, а затем удаляем следующую строчку:

console=ttyAMA0,115200 kgdboc=ttyAMA0,115200

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

sudo apt-get install minicom

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

byte number = 0;

void setup(){
  Serial.begin(9600);
}

void loop(){
  if (Serial.available())  {
    number = Serial.read();
    Serial.print("character recieved: ");
    Serial.println(number, DEC);
  }
}

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

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio/images/soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio-2.png

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

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio/images/soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio-3.jpg

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

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

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

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio/images/soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio-4.jpg

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

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

sudo apt-get install python-serial

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

import serial
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=1)
ser.open()

ser.write("testing")
try:
        while 1:
                response = ser.readline()
                print response
except KeyboardInterrupt:
        ser.close()
https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/262-soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio/images/soedinyaem-raspberry-pi-s-arduino-cherez-serial-gpio-5.jpg

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