Ligação serie arduino – Raspberry Pi

Ligação serie entre o Arduino e o Raspberry Pi.

O Raspberry Pi funciona com uma logica de 3.3V, enquanto que o Arduino trabalha a 5V, pelo que é necessário colocar um divisor de tensão, ou um conversor de nivel lógico, entre o TX do Arduino (5V) e o RX (3.3V) do Raspberry Pi.

O Arduino tem a sua porta serie afecta à USB serial, pelo que é necessário usar a biblioteca SoftwareSerial, com o RX no D10 e TX no D11 (este liga ao in do divisor de tensão, ou ao conversor de nivel lógico) .

Divisor de tensão, de 5V para 3.3V

Da esquerda para a direita na direção do orificio, com as resistencias de frente:

  • In do TX do Arduino (laranja)
  • Out do RX do Raspberry Pi (verde)
  • Gnd do Raspberry pi (preto)
  • Gnd do Arduino (azul)

Pinos do Raspberry Pi

Existem modelos do Raspberry Pi com 26 pinos e outros com 40 pinos, que são compativeis com os de 26 pinos.

Como os 26 primeiros pinos são iguais, então em todos os Raspberry Pi a porta serie são os pinos 8 e 10 (Tx, Rx).

Ligações

Raspberry Pi

  • RX – Verde – pino 10 (GPIO15 Rx) (ligado ao out do divisor de tensão, ou ao conversor de nivel lógico, que por sua vez liga ao pino D11 do Arduino)
  • TX – Amarelo – pino 8 (GPIO14 Tx) (ligado ao D10 do Arduino)
  • GND – Preto – pino 6 (GND)

Arduino

  • RX – Amarelo – D10 (ligado ao TX do Raspberry Pi – pino 8 (GPIO14)
  • TX – laranja – D11 (ligado ao in do divisor de tensão, ou ao conversor de nivel lógico, que por sua vez liga ao pino 10 (GPIO15))
  • GND – Azul

Nem todos os pinos do arduino suportam os interrupts necessários para o RX funcionar.

 

Configuração do Raspberry Pi

O Raspberry Pi necessita de configuração prévia para poder usar a comunicação via serial GPIO.

raspi-config
Interfacing Options > Serial (Shell and kernel messages) > No > Yes
reboot

Software

Programas de teste para o Raspberry Pi e Arduino

Raspberry Pi

Solução com kermit. Necessita de instalar o pacote do kermit.

apt install kermit

Para sai do programa: CTRL \

#!/usr/bin/kermit
# Custom C-Kermit settings
set line /dev/ttyAMA0
set speed 4800
set serial 8n1

# General C-Kermit settings. These probably don't need to change.
set flow-control none
set file type bin
set carrier-watch off
set prefixing all
set modem none

echo "Prepared to connect."
connect

Arduino

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup() {
Serial.begin(115200);
while (!Serial) {}
Serial.println("Start!");
mySerial.begin(4800);
mySerial.println("Hello, world?");
}

void loop() {
if (mySerial.available()) {
Serial.write(mySerial.read());
}
if (Serial.available()) {
mySerial.write(Serial.read());
}
}

Problemas

O softwareserial é incompativel com a utilização do Servo, Uma pesquisa na net revelou que não existe forma fácil de resolver o problema. Parece que a solução é usar o Arduino mega.

 

Links

https://www.arduino.cc/en/Reference/SoftwareSerial