지난 라즈베리파이↔️안드로이드 블루투스 통신에 이어서, 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 모듈이 스캔되어서 나타납니다.
블루투스 기기를 찾았다면, 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
'관리하지않음 > 아두이노' 카테고리의 다른 글
[아두이노] 서보모터 사용법 (0) | 2020.11.04 |
---|---|
[아두이노] I2C LCD 사용법 (1) | 2020.11.03 |
[아두이노] 진동센서(충격센서) 사용법 (2) | 2020.09.26 |
[아두이노] RGBW 네오픽셀링 사용법 (1) | 2020.09.25 |
아두이노 안드로이드 블루투스 통신하기 (HC-06 AT 무응답 해결) (3) | 2020.09.23 |