Manual

do

Maker

.

com

Comunicação serial entre Omega2 e Dock Arduino

Comunicação serial entre Omega2 e Dock Arduino

Omega2 e Dock Arduino

Como explicado no artigo anterior, o dock Arduino do Omega possui um ATmega328P onboard e os slots para acoplamento de shields. A comunicação entre o Omega e esse "Arduino onboard" pode ser feita por UART (a UART1 do Omega, mais especificamente). Nesse breve artigo pretendo mostrar o quão simples é essa comunicação.

UART no Omega2

O Onion Omega possui 2 UARTs, tendo uma delas conexão direta com a UART do ATmega328P, quando conectado à dock Arduino. Para interagir com seus sketches, não há outra forma mais simples que esta, sendo possível fazê-lo por linha de comando e se desejar, um shell script.

Como ler e escrever na serial do ATmega328P

A UART1 do Omega responde no arquivo descritor do dispositivo /dev/ttyS1 no Linux. Tudo o que precisamos fazer para escrever nessa serial é enviar um comando echo seguido da mensagem para o dispositivo /dev/ttyS1:

echo "LED_ON" > /dev/ttyS1

E para ler, tão simples quanto, utilizando o comando cat, que ficará aguardando por dados na serial:

cat /dev/ttyS1

Vejamos como seria uma comunicação bi-direcional utilizando shell script no Linux e um sketch simples para acender e apagar o LED azul onboard da dock Arduino.

Fazendo uma comunicação bi-direcional entre a dock e o Omega

O mais coerente é definir algumas macros para enviar apenas 1 byte na comunicação ou, quando necessário, definir um protocolo. Apenas para figurar o funcionamento, o exemplo será o ligamento e desligamento do LED onboard da dock Omega utilizando os comandos 1 para ON e 0 para OFF. A velocidade da comunicação está por padrão 9600, então o sketch para o Arduino ficou assim:

byte msg[2] = {0};
byte i      = 0;
bool check  = false;

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, HIGH);
  Serial.begin(9600);
}

void loop() {
  while (Serial.available()){
    msg[i] = Serial.read();
    i++;
    check = true;
  }
  if (check){
    i = 0;
    if (msg[0] == '1'){
      digitalWrite(LED_BUILTIN, HIGH);
    }
    else if (msg[0] == '0'){
      digitalWrite(LED_BUILTIN, LOW);
    }
    check = false;
  }   
  delay(500);                                           
}

Depois foi só enviar o valor:

led_on_off-omega.webp

Para ler, basta utilizar o comando cat. Vejamos um exemplo. Suba esse sketch no ATmega328P:

unsigned long number = 0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.println(number);
  number++;
  delay(1000);

}

Abra o terminal do Omega2 pelo browser. Execute o comando e veja o resultado:

cat_ttyS1.webp

Se quisermos programar diretamente no Omega, basta escolher a linguagem e abrir o dispositivo /dev/ttyS1 para leitura e escrita, na velocidade de 9600kbauds. É pura diversão!

Onde comprar

Não é fácil achar no Brasil, mas por sorte a UsinaInfo tem ambos, a dock Arduino e o Omega2.

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.