아두이노 무선연결 - adu-ino museon-yeongyeol

목차

  • 1 개요
  • 2 준비물
  • 3 아두이노(arduino) - 스냅4아두이노( snap4arduino) 블루투스로 무선연결하기
    • 3.1 step 1. 블루투스 설정
    • 3.2 step 2. 아두이노에 standardFirmata 스케치 업로드
    • 3.3 step 3. 회로 연결
    • 3.4 step 4. 블루투스 페어링 (pairing)
    • 3.5 step 5. snap4arduino 연결
  • 4 참고

개요

스크래치 (scratch) 나 s4a, scratchX, 엔트리, snap4arduino등은 아두이노의 기본 개발환경인 C언어를 다루지 않고도 아두이노를 프로그래밍 할 수 있도록 해주기 때문에 편리하지만 USB케이블이 언제나 연결되어있어야 하는 불편이 있다. 블루투스를 사용하면 이 케이블을 제거해 무선 통신을 통해 스크래치로 아두이노를 제어토록 할 수 있다. 스크래치, 엔트리, s4a 나 snap4arduino등 도 물론이고, firmata 프로토콜을 사용해 프로세싱( processingn)이나 다른 툴로 개발한 데스크탑 어플리케이션도 당연히 같은 방법으로 블루투스를 사용해 아두이노와 연결 가능하다.

준비물

아두이노 보드, HC-06 블루투스 모듈, 9V 배터리

아두이노(arduino) - 스냅4아두이노( snap4arduino) 블루투스로 무선연결하기

step 1. 블루투스 설정

  • 블루투스 모듈에 두가지 설정을 해주어야 하는데, 1. 통신속도를 standardfirmata에서 사용하는 57600baud로 맞추는 것과 2.다른 블루투스 기기와 구분되도록 고유한 이름을 부여하는 것.
  • 먼저 블루투스 모듈에 AT command 를 입력하기위해 회로 구성하고 아두이노 스케치를 실행한다. 이 스케치에서 아두이노는 단순히 컴퓨터와는 Serial로, 블루투스 모듈과는 SoftwareSerial 로 연결해 양쪽 통신을 중계하는 역할만 한다.

아두이노 무선연결 - adu-ino museon-yeongyeol

#include <SoftwareSerial.h>

SoftwareSerial BTSerial(9,10); // RX | TX (블루투스 모듈의 tx|rx에 각각 연결

void setup()
{
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(9600);  // 처음 hc-06의 기본값은 9600이지만 연결이 이루어지지 않으면 19200, 38400, 57600 ...등으로 바꾸어가며 시도한다. 
}

void loop()
{
  // Keep reading from HC-06 and send to Arduino Serial Monitor
  if (BTSerial.available())
  Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-06
  if (Serial.available())
  BTSerial.write(Serial.read());
}

파일:Bluetooth-setup-ATmode.zip

  • AT command가 잘작동하는지 AT(대문자!!)를 입력해 확인한다. OK라는 답이오면 OK. OK가 되돌아오지 않는 경우 가장 먼저 확인할 것은 현재 블루투스 모듈의 통신속도가 위 스케치상의 통신속도 BTSerial.begin(9600);과 다를 가능성이다. 이 때에는 9600대신 19200, 38400, 57600 ...등으로 바꾸어가며 스케치를 업로드 해 OK가 되돌아 오는 통신속도로 연결한다.

아두이노 무선연결 - adu-ino museon-yeongyeol

  • 여러개의 블루투스 모듈을 사용하는 경우 혼란을 방지하기 위해 블루투스모듈의 이름을 고유하게 설정한다. HC-06모듈에서 이를 위해 사용하는 명령어는 AT+NAME이름이다.
  • firmata 프로토콜은 기본으로 Baudrate 57600을 사용하므로 블루투스 모듈의 속도를 이와같이 설정한다. HC-06모듈에서 사용하는 명령어는 AT+BAUD7 (대문자) 이다. (참고로 9600으로 되돌릴 때에는 AT+BAUD4)

step 2. 아두이노에 standardFirmata 스케치 업로드

  • 아두이노보드에 StandardFirmata 스케치를 업로드한다. 아두이노 메뉴바에서 File -> Examples -> Firmata -> StandardFirmata 를 선택해 업로드하면 된다.

step 3. 회로 연결

  • USB 케이블을 제거하고 배터리를 사용해 아두이노에 전원 공급한다.
  • 블루투스 모듈의 TX-> 아두이노 0번핀 (RX 라고 씌여있다.), 블루투스 모듈의 RX -> 아두이노 1번핀 (TX라고 씌여있다)에 연결한다.

주의!!: 아두이노 스케치를 업로드할때는 반드시 아두이노 0,1번핀은 뽑아두도록 하자. 아두이노의 0,1번핀은 시리얼 통신을 위해 사용되며 USB와 연결되어있다.

아두이노 무선연결 - adu-ino museon-yeongyeol

step 4. 블루투스 페어링 (pairing)

  • 운영체제의 블루투스 설정에서 새로운 블루투스장치를 검색한다.
  • step1에서 설정한 블루투스 모듈 이름을 찾아 페어링 시킨다. 비밀번호는 보통 1234 혹은 0000 이다.
  • 컴퓨터와 블루투스 모듈이 최초 연결 이후 재차 연결이 잘 되지 않을 때에는 페어링을 끊은 후 다시 처음부터 연결을 시도해본다.

아두이노 무선연결 - adu-ino museon-yeongyeol

step 5. snap4arduino 연결

  • 블루투스와 연결된 포트가 2개 이상 표시될 때, dev B라고 표시된 포트를 선택한다.
    dev B프로파일에 대한 설명 참고
  • 윈도우즈 경우 dev B표시 없이 com4, com5 하는 식으로 둘 이상의 포트가 보이는 경우에는. 윈도우즈 메뉴바 -> 블루투스 -> 설정 열기 -> COM포트 에서 dev B라고 표시된 포트를 선택한다.

아두이노 무선연결 - adu-ino museon-yeongyeol

  • 연결에 성공했다는 메세지가 나오면 일반적인 USB케이블을 사용하는 것과 동일하게 snap4arduino를 사용하면 된다.

참고

HC-06 블루투스 모듈 AT 명령어

하드카피월드 블루투스 기초

아두이노 블루투스 모듈

아두이노는 유선 통신인 시리얼 통신을 사용한다. 그래서 아두이노 자체만으로는 무선통신이 불가능하다.(블루투스 모듈이 내장되어있는 블루투스 제외) 따라서 무선 통신을 하기 위해서는 무선통신을 시리얼 통신으로 바꿔주는 모듈 블루투스 모듈이 필요하다. 이를 통신 변환 모듈 통신 모듈이라 한다. 

아두이노 무선연결 - adu-ino museon-yeongyeol
블루투스 모듈(HC-06)

블루투스 모듈(HC-06)을 사용하여 무선통신을 가능하게 할 것이다. 

아두이노 무선연결 - adu-ino museon-yeongyeol

핀은 RXD, TXD, GND, VCC가 존재한다. 

아두이노 무선연결 - adu-ino museon-yeongyeol

아두이노에 다음과 같이 꽂아줄 수 있다. 

블루투스 RXD핀은 아두이노의 블루투스 TXD에 TXD핀은 아두이노의 RXD에 맞춰서 꽂아준다. 

아두이노 무선연결 - adu-ino museon-yeongyeol

보통 RXD핀과 TXD핀은 0과 1이 아닌 다른 핀을 사용하지만 여기서 사용한 아두이노는 0과 1번에 연결되어 통신하게 된다. 0과 1은 보통 pc와 시리얼 통신하기 때문에 블루투스 통신으로 잘 사용되지는 않는다. 블루투스 모듈을 0과 1번 핀에 사용하기 위해서는 pc와 아두이노 통신할 때는 잠시 빼두고 통신이 끝나면 연결해야 한다.

코드

void setup(){
    Serial.begin(9600);
    Serial.println("Start");
}
 
void loop(){
    //라즈베리 -> 아두이노 (데이터 받기)
    if(Serial.available()){ // 수신 버퍼에 수신된 데이터가 있는 경우
        Serial.write(Serial.read()); // 1바이트 수신한 데이터를 송신    
    }
}

간단하게 스마트폰에서 'Serial Bluetooth Terminal'을 다운로드하여 블루투스 테스트를 진행해볼 수 있다.

라즈베리파이 블루투스 통신

라즈베리파이 블루투스 설치

// 라즈베리파이 업데이트
Sudo apt-get update
Sudo apt-get upgrade
// 필요한 라이브러리 설치
Sudo apt-get install bluetooth blueman bluez
Sudo apt-get install python-bluetooth
// 재부팅
Sudo reboot

블루투스 페어링

sudo bluetoothctl
power on
scan on
아두이노 무선연결 - adu-ino museon-yeongyeol

HC-06 모듈이 나타난 것을 확인할 수 있다.

pair "MAC 주소" 
아두이노 무선연결 - adu-ino museon-yeongyeol

초기 블루투스 모듈의 비밀번호는 1234이다.

블루투스 연결을 할 수 있다.

VNC 아이콘 사용

아두이노 무선연결 - adu-ino museon-yeongyeol
아두이노 무선연결 - adu-ino museon-yeongyeol

[Add Device...] -> [HC-06] [Pair]으로 연결한다. 

아두이노 무선연결 - adu-ino museon-yeongyeol

PIN code를 입력하면 블루투스 연결이 완료된다. 

아두이노 무선연결 - adu-ino museon-yeongyeol
아두이노 무선연결 - adu-ino museon-yeongyeol

여기서 라즈베리파이가 이미 와이파이에 연결되어있다면 블루투스가 연결이 잘되지 않을 경우가 있다. 그럴 경우에는 장치를 제거하고 다시 해봐도 좋은 방법이다.

Bluetooth Devices에 들어가 Serial Port로 연결해주면 /dev/rfcomm0 시리얼 통신이 가능하다.

다음 글에는 라즈베리파이에서 node-red로 시리얼 통신 확인을 해본다. 

참고 - https://popcorn16.tistory.com/196