라즈베리파이는 하나의 컴퓨터로 복잡한 작업을 하는 데 유리합니다. 하지만 복잡한 코딩을 할 때 종종 전력 문제 혹은 핀의 수가 모자란 경우가 있습니다. 이런 방법을 해결하기 위한 하나의 대안으로 아두이노를 이용한 시리얼 통신을 하려고 합니다. 통신하는 방법을 알아보도록 하겠습니다.
※ 아두이노 우노, 라즈베리파이 3B+로 진행하였습니다.
가장 먼저 해야 하는 것
우선 아두이노를 연동하기 전 리눅스를 update 및 upgrade 합니다.
sudo apt-get update
sudo apt-get upgrade
아두이노 IDE를 이용한 방법
먼저는 아두이노 IDE를 이용하여 통신하는 방법을 소개하겠습니다. 가장 먼저 AduinoIDE를 설치합니다.
sudo apt-get install aduino
설치가 완료되면 라즈베리파이에 Menu - Programming 위치에 Aduino 화면이 생겼습니다. 접속하도록 합니다.
아두이노 IDE에 접속하면 Tools - Port에 들어가 아두이노가 연동되어있는지 확인합니다. 위 화면과 같이 아두이노 우노 환경이 나오는 경우 연결이 된 것입니다.
그 후에 테스트 코드를 입력한 뒤 upload하도록 합니다. LED가 1초마다 깜빡 깜빡이 되는 경우 성공하였습니다.
참고로 아두이노 세팅은 7핀에 저항과 LED를 연결하였습니다.
아래 소스 코드는 테스트 소스 코드입니다.
int led = 7;
int val = 0;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Firmata 프로토콜을 이용한 방법
위에서 아두이노 IDE를 이용하여 작업하였습니다. 해당 방식은 직접 핀을 작업하였다고 보기에 어렵습니다. 라즈베리파이에서 직접 핀을 조작하는 것이 아닌 아두이노를 포팅하여 작업한 것과 같습니다. 이런 단점을 보완하기 위해 Firmata프로토콜을 이용하여 연결하도록 합시다.
Firmata 프로토콜은 컴퓨터와 마이크로컨트롤러 간의 통신을 단순화하기 위해 개발된 프로토콜입니다. 컴퓨터와 마이크로컨트롤러 간의 시리얼 통신을 기반으로 작동합니다. 이를 통하여 컴퓨터에서 마이크로컨트롤러를 원격으로 제어하거나 센서 데이터를 수집하여 다양한 프로그래밍을 개발할 수 있으며, 해당 프로토콜을 이용하여 MIDI와 IoT 등에 활용할 수 있습니다.
다양한 프로그래밍 언어를 지원하고 여기서는 파이썬을 이용한 방법을 소개하려고 합니다.
먼저 아두이노부터 세팅하도록 하겠습니다.
먼저 아두이노에 Firmata라이브러리를 찾습니다. 없는 경우에 오른쪽 사진과 같이 sketch - include library에 firmata 검색하여 라이브러리를 설치하도록 합니다. 저는 크게 두 가지 라이브러리를 추천합니다. 하나는 Firmata를 이용하여 관리하고 싶은 경우에 추천합니다. 두 번째는 FirmataExpress를 이용하여 확장기능을 활용할 수 있습니다.
첫 번째는 File - Example - Firmata - StandardFirmata를 이용합니다.
두 번째는 왼쪽 화면과 같이 File - Example - FirmataExpress를 설치합니다.
예시 파일 upload를 완료하면 아두이노의 역할은 끝납니다.
이제 라즈베리파이 안에 파이썬을 이용하여 Firmata실행하도록 하겠습니다.
sudo apt-get install git
git clone https://github.com/tino/pyFirmata.git
cd pyFirmata
sudo python setup.py install
pip install pyserial
먼저 git을 이용하여 파이썬에 Firmata를 이용할 수 있는 pyFrimata를 설치합니다. 그 후 시리얼 통신을 하기 위해 PIP를 이용하여 설치하도록 합니다.
이제 파이썬으로 마찬가지 환경으로 테스트 파일을 만들어 제대로 되었는지 확인합니다.
import pyfirmata
import time
# 아두이노와 연동
board = pyfirmata.Arduino('/dev/ttyACM0') #리눅스 환경에서 포트연결
# 핀설정
board.digital[7].mode = pyfirmata.OUTPUT
# 1초마다 LED를 깜빡이는 루프
while 1:
board.digital[7].write(1)
time.sleep(1)
board.digital[7].write(0)
time.sleep(1)
해당 소스코드가 정상적으로 돌아가면 완료입니다.
'임베디드 시스템 > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 (5) - 스위치를 이용하여 인터럽트를 구성하자 (0) | 2022.07.07 |
---|---|
라즈베리파이 (4) - GPIO는 무엇인가? (0) | 2022.07.02 |
라즈베리파이 (3) - Raspberry Pi에 GPIO 설치하기 (WiringPi) (0) | 2022.05.18 |
라즈베리파이 (2) - fcitx를 이용한 한글 설치 및 적용 (0) | 2022.04.12 |
라즈베리파이 (1) - 노트북으로 원격 접속을 해보자 (4) | 2022.04.12 |