오늘은 Raspberry Pi와 외부 장치(예: Arduino) 간의 UART 통신을 pigpio 라이브러리를 사용하여 설정하는 방법을 알려드리겠습니다. 이를 통해 UART 통신을 활용한 데이터 전송 및 수신을 실습할 수 있습니다.
그냥 간단하게 말하면 라즈베리파이랑 아두이노 uart통신입니다.
gpio이용해서요 ㅎㅎ
필요한 준비물 🛠️
- Raspberry Pi
- Arduino
- pigpio 라이브러리
1. pigpio 라이브러리 설치 💻
먼저, pigpio 라이브러리를 설치해야 합니다. Raspberry Pi에서 UART 통신을 설정하기 위해 pigpio를 사용하여 손쉽게 GPIO 핀을 제어하고 데이터를 전송할 수 있습니다.
sudo apt-get update
unzip pigpio-master.zip
cd pigpio-master
make
sudo make install
sudo pigpiod
2. Raspberry Pi에서 시리얼 포트 활성화 🔌
Raspberry Pi에서 시리얼 포트를 활성화하려면 raspi-config를 사용해야 합니다.
- 터미널에서 sudo raspi-config 입력
- Interfacing Options 메뉴 선택
- P6 Serial 선택 후, 시리얼 로그인 셸 비활성화 및 하드웨어 시리얼 포트 활성화
3. Python 코드 작성 📝
다음으로, Python을 사용하여 pigpio 라이브러리로 UART 통신을 설정하는 코드를 작성합니다. 이 코드는 메시지 전송 및 수신을 다룹니다. 📬
import pigpio
import time
# pigpio 초기화
pi = pigpio.pi()
# GPIO 핀 설정 (TX: GPIO 17, RX: GPIO 27)
TX = 17
RX = 27
# UART 설정 (9600 보드레이트)
pi.set_mode(TX, pigpio.OUTPUT)
pi.set_mode(RX, pigpio.INPUT)
pi.bb_serial_read_open(RX, 9600)
def send_uart_message(message):
pi.wave_add_serial(TX, 9600, message)
wave_id = pi.wave_create()
pi.wave_send_once(wave_id)
while pi.wave_tx_busy():
time.sleep(0.01)
pi.wave_delete(wave_id)
try:
while True:
user_input = input("Enter a message to send to Arduino: ")
send_uart_message(user_input + '\\n')
print(f"Data sent: {user_input}")
time.sleep(1)
# UART 수신 데이터 읽기
(count, data) = pi.bb_serial_read(RX)
if count > 0:
print(f"Received: {data.decode('utf-8')}")
else:
print("No data received")
except KeyboardInterrupt:
pi.bb_serial_read_close(RX)
pi.stop()
기능 설명
TX & RX 핀 설정 | TX: GPIO 17, RX: GPIO 27, 각각 데이터 송수신 역할 |
UART 설정 | 9600 보드레이트로 통신 설정 |
데이터 송신 | 사용자가 입력한 메시지를 UART를 통해 송신 |
데이터 수신 | Arduino에서 수신한 데이터를 읽어 출력 |
종료 처리 | KeyboardInterrupt로 안전하게 종료하도록 설정 |
4. Arduino 코드 작성 🎯
Arduino는 수신된 데이터에 따라 LED를 제어합니다. 아래는 Arduino 코드입니다.
int ledPin = 13;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
int pulse = Serial.read();
if (pulse == '1') {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
}
}
}
기능 설명
LED 제어 | 수신된 데이터가 '1'일 경우 LED를 켜고 1초 후 끄기 |
Serial.available() | 수신된 데이터가 있을 경우 그 값을 읽어 LED 상태 변경 |
5. pigpiod 실행 및 프로세스 확인 🔍
pigpiod는 pigpio 라이브러리의 데몬으로, Raspberry Pi의 GPIO를 제어합니다. 이를 실행한 후, 프로세스가 정상적으로 실행 중인지 확인해야 합니다.
sudo pigpiod
ps aux | grep pigpiod
명령어 설명
sudo pigpiod | pigpio 데몬 실행 |
`ps aux | grep pigpiod` |
결론 🎉
이제 Raspberry Pi에서 pigpio 라이브러리로 UART 통신을 설정하여, Arduino와의 데이터 송수신 및 제어를 할 수 있게 되었습니다. LED 제어와 같은 실습을 통해 실제 하드웨어와의 상호작용을 실습할 수 있습니다. 🔄
추가 실습 아이디어:
- 수신된 데이터를 통해 다양한 센서 제어 또는 모터 제어를 시도해 보세요!
- 더 높은 보드레이트나 여러 장치와 연결하여 다양한 통신 실습을 해보세요!
이러한 실습은 IoT, 자동화 시스템, 로보틱스 등 다양한 분야에서 유용하게 활용될 수 있습니다. 🚀
어떤 프로젝트에 사용해 보셨나요? 댓글로 공유해주세요! 💬
'프로젝트 > 스마트 요양 지원 시스템 (RoboCare) : 노약자와 장애인 돌봄' 카테고리의 다른 글
[MCU_F/W설계] SUB 로봇암 제작_STM32 (2) | 2024.11.14 |
---|---|
⚠️sub RobotArm_CUBEIDE 셋업 과정 (끄적끄적) (0) | 2024.11.13 |
⚠️AGV SERIAL TEST(고민과정 끄적끄적) (0) | 2024.10.18 |
스마트 요양 지원 시스템 RoboCare : 프로젝트 기획2 (주제 선정) (2) | 2024.09.30 |
스마트 요양 지원 시스템 : 프로젝트 기획 1 (개발 프로세스) (0) | 2024.09.08 |