본문 바로가기

관리하지않음/아두이노

라즈베리파이4 아두이노 블루투스 통신하기

지난 라즈베리파이↔️안드로이드 블루투스 통신에 이어서, HC-06모듈을 사용한 라즈베리파이↔️아두이노 블루투스 통신방법을 정리해봤습니다. 아두이노 블루투스 통신, 라즈베리파이 블루투스 통신, 안드로이드 블루투스 통신 각각 포스팅과 겹치는 부분이 많지만, 일단 처음 사용자를 대상으로 포스팅을 자세히 해봤습니다 :)

 

1. 아두이노 세팅

아두이노에 HC-06모듈을 다음과 같이 연결해줍니다.

 

아두이노 보드 구성

VCC는 아두이노 5V에, GND는 아두이노 GND에, TXD는 7번핀, RXD는 8번 핀에 연결해줍니다.

보드 구성이 끝나면, 아래의 코드를 업로드해주세요.

#include <SoftwareSerial.h>
 
int RX=7;
int TX=8;
SoftwareSerial bluetooth(RX, TX);
 
void setup(){
  Serial.begin(9600);
  bluetooth.begin(9600);
}
 
void loop(){
  if (bluetooth.available()) {
    Serial.write(bluetooth.read());
  }
  if (Serial.available()) {
    bluetooth.write(Serial.read());
  }
}

시리얼 모니터를 켜고, AT를 입력했을 때, OK라고 뜨면 연결에 성공한 것입니다.

 

OK가 뜨지 않는다면, 시리얼 모니터의 보드레이트와 전송 옵션을 변경해서 시도하셔야 합니다. 이전 아두이노 안드로이드 블루투스 통신하기 (HC-06 AT 무응답 해결) 포스팅을 참고해주세요.

AT
// OK

AT+NAME Arduino
// OKsetname

AT+NAME 명령어를 통해서 블루투스 기기 이름을 변경해주세요.

라즈베리파이에서 블루투스 스캔할 때 기기를 확인하려면 unique 한 이름으로 변경해주셔야 합니다.

2. 라즈베리파이에 필요한 라이브러리 설치

라즈베리파이에서 터미널을 열고 다음 명령어를 순서대로 입력해주세요.

// 라즈베리파이 업데이트
Sudo apt-get update
Sudo apt-get upgrade

// 필요한 라이브러리 설치
Sudo apt-get install bluetooth blueman bluez
Sudo apt-get install python-bluetooth

// 재부팅
Sudo reboot

 

3. 블루투스 페어링

라즈베리파이와 아두이노 사이에 블루투스 페어링을 먼저 해줄 겁니다.

sudo bluetoothctl

power on
scan on

scan on을 했을 때, 조금 기다리면 아두이노 HD-06 모듈이 스캔되어서 나타납니다.

 

라즈베리파이 화면 캡쳐 - scan on

블루투스 기기를 찾았다면, MAC 주소를 확인해주세요.

제 모듈의 MAC 주소는 98:D3:51:FD:E4:0C 였고, 이 주소를 사용해서 페어링을 해줬습니다.

pair MAC주소 // 예시 : pair 98:D3:51:FD:E4:0C

페어링을 시도하면 "Enter PIN code: "가 뜹니다.

0000이나 1234를 입력하시면 됩니다. 저는 1234를 입력해서 연결에 성공했습니다.

 

라즈베리파이 화면 캡쳐 - 페어링

trust MAC주소

장치 신뢰까지 세팅이 되었습니다.

4. 라즈베리파이→아두이노 데이터 전송 예제

이제 라즈베리파이에서 아두이노에 데이터를 전송해보겠습니다. 라즈베리파이의 기본 프로그램인 Thonny Python IDE를 켜고 다음 코드를 복붙 한 뒤 실행합니다.

from bluetooth import *

socket = BluetoothSocket( RFCOMM )
socket.connect(("98:D3:51:FD:E4:0C", 1))
print("bluetooth connected!")

msg = input("send message : ")
socket.send(msg)

print("finished")
socket.close()

코드에서 connect옆의 MAC주소는 이전에 확인한 자기 모듈의 MAC주소로 변경해주시면 됩니다. 파이썬 코드를 잠깐 설명드리면, 블루투스 연결 후 입력한 메시지를 1번 전송하고 블루투스 연결을 해제하는 코드입니다. 

 

라즈베리파이 화면 캡쳐

RUN 버튼을 눌러서 실행합니다.

 

hello라는 문자열을 입력했을 때, 아두이노 시리얼 모니터에서 hello 문자열을 전송받았습니다.

 

아두이노 시리얼 모니터

 

5. 아두이노→라즈베리파이 데이터 전송 예제

이번에는 아두이노에서 라즈베리파이로 데이터를 전송하는 예제입니다. 아두이노 코드를 변경할 필요는 없습니다. 아래 코드를 복붙 하고 실행해주세요.

from bluetooth import *

socket = BluetoothSocket( RFCOMM )
socket.connect(("98:D3:51:FD:E4:0C", 1))
print("bluetooth connected!")

while True:
    data = socket.recv(1024)
    print("Received: %s" %data)
    if(data=="q"):
        print("Quit")
        break

socket.close()

마찬가지로 connect 옆의 MAC주소는 각자 모듈의 MAC주소로 변경해주시면 됩니다.

 

아두이노 시리얼 모니터에서 데이터를 입력하면,

 

라즈베리파이 캡쳐 화면

라즈베리파이에서 수신하는 것을 확인할 수 있습니다.

 

a를 보냈을 때 b'a'로 전송을 받았습니다. 이전 라즈베리파이4↔️안드로이드 블루투스 통신 때도 이랬는데, 아무래도 라즈베리파이 쪽의 문제인 것 같습니다.. 해결방법을 찾으면 공유하겠습니다.


잘못된 내용이 있다면 언제든지 댓글이나 메일로 알려주시면 감사하겠습니다.

이 포스팅이 도움이 되었다면 공감 부탁드립니다.

궁금한 점은 언제든지 댓글 남겨주시면 답변해드리겠습니다:D