Basicamente tudo o que podemos fazer com o Arduino pode ser feito também com um Raspberry Pi (e vice-versa). Há coisas que são fáceis de fazer com Arduino (conectar sensores, por exemplo). Mas outras coisas (como trabalhar com servidores REST, bancos de dados…) são “complicadas” com Arduino e C++ (são possíveis, mas exigem muitas operações de baixo nível) e muito simples com o Raspberry Pi e Python (pelo menos para mim e por causa do meu conhecimento prévio).
Com este pequeno projeto, quero usar uma placa Arduino e Raspberry Pi trabalhando juntos. A ideia é acender dois LEDs. Um (o verde) será controlado por Raspberry Pi diretamente via GPIO, e o outro (o vermelho), será controlado pela placa Arduino. Raspberry Pi será o “cérebro” do projeto e irá dizer à placa Arduino quando ligar/desligar seu led. Vamos ver o código.
import RPi.GPIO as gpio
import serial
import time
import sys
import os
def main():
gpio.setmode(gpio.BOARD)
gpio.setup(12, gpio.OUT)
s = serial.Serial('/dev/ttyACM0', 9600)
status = False
while 1:
gpio.output(12, status)
status = not status
print status
s.write("1\n" if status else "0\n")
time.sleep(1)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
print 'Interrupted'
gpio.cleanup()
try:
sys.exit(0)
except SystemExit:
os._exit(0)
Como podemos ver, o script é um simples loop de acender o led (usando o pino 12) com um intervalo de um segundo. Nossa placa Arduino está conectada diretamente ao Raspberry Pi via cabo USB e enviamos comandos via interface serial.
Finalmente, o programa Arduino:
#define LED 11
String serialData = "";
boolean onSerialRead = false;
void setup() {
// initialize serial:
Serial.begin(9600);
serialData.reserve(200);
}
void procesSerialData() {
Serial.print("Data " + serialData);
if (serialData == "1") {
Serial.println(" LED ON");
digitalWrite(LED, HIGH);
} else {
Serial.println(" LED OFF");
digitalWrite(LED, LOW);
}
serialData = "";
onSerialRead = false;
}
void loop() {
if (onSerialRead) {
procesSerialData();
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
if (inChar == '\n') {
onSerialRead = true;
} else {
serialData += inChar;
}
}
}
Aqui, a nossa placa Arduino está fazendo um listening da interface serial (com serialEvent) e cada vez que recebemos “\n” o loop principal ligará/desligará o led dependendo do valor (1 – Ligar, 0 – Desligar)
Podemos usar o I2C e outras maneiras para conectar Arduino e Raspberry Pi, mas neste exemplo estamos usando a maneira mais simples de fazer isso: um cabo USB. Só precisamos de um cabo USB A/B. Não é necessário nenhum outro hardware extra (como resistores) e a parte de software é bastante simples também.
Hardware:
- Arduino UNO
- Raspberry Pi 3
- Dois LEDs e dois resistores
Código na minha conta no GitHub.
***
Gonzalo Ayuso faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela Redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: https://gonzalo123.com/2017/05/08/arduino-and-raspberry-pi-working-together/




