아두이노 기초 강의

25. 블루투스로 아두이노 보드 2개 연결하기 HM-10

ByteCraftCreations 2023. 10. 16. 14:48

유튜브 : https://youtu.be/oRW-mn4YLsc

안녕하세요 Byte Craft입니다.

 

이번 시간에는 블루투스 모듈 HM-10을 이용하여

 

아두이노 두 개를 연결하고 조이스틱으로 다른쪽 led를

 

제어해보겠습니다. 영상으로 보겠습니다.

 

블루투스 모듈은 종류가 다양한데 HM-10을 선택한 이유는

 

HM-10은 아두이노에서 소프트웨어로 master/slave모드를

 

설정할 수 있기 때문입니다.

 

즉, 내가 필요한 용도에 따라 데이터를 보낼 수도 있고

 

데이터를 받아서 아두이노에 전달 할 수도 있습니다.

 

또한 블루투스 4.0도 지원합니다. 대신 가격대는 조금 있습니다.

 

보통 13,000원에서 20,000원 혹은 그 이상에 파는 곳도 있는데

 

20,000원 이하에서 구매 가능합니다. 

생긴 것은 이렇습니다. 바로 회로 연결 보겠습니다.

 

VCC 5V
GND GND
Tx 7
Rx 8

회로 연결할 때 Tx와 Rx는 통신핀인데 아래 코드에서 제가 설정한 것입니다.

 

그대로 따라 하셔도 되고 조건에 따라 바꿔서 사용하시면 됩니다.

 

아래 코드 그대로 복사해서 아두이노에 붙여넣어 주세요

블루투스 세팅

#include <SoftwareSerial.h> 

SoftwareSerial BT(7, 8); //  (TX,RX) 연결순서

void setup(){
Serial.begin(9600);
BT.begin(9600);
}

void loop(){

  while (BT.available())
  { 
   byte data = BT.read();
   Serial.write(data);
  }  
 
  while (Serial.available())
  {
    byte data = Serial.read();
    BT.write(data); 
  }
}

이제 블루투스 모듈을 사용하기 위해서 시리얼 모니터를 열고

 

at명령어를 공부하겠습니다. 자세한 과정은 유튜브에서 자세히 다루겠습니다.

 

at명령어를 다 보았으면, 아두이노 보드 두 개를 준비해서

 

한쪽은 led와 블루투스 모듈을 연결하고

 

다른 한 쪽은 조이스틱과 블루투스 모듈을 연결해서

 

조이스틱을 조작해서 반대쪽 led 불을 켜고 끄는 예제를 보겠습니다.

 

먼저 조이스틱으로 신호를 보내는 송신쪽 회로부터 보겠습니다.

조이스틱과 블루투스 모듈모두 5v, 와 gnd가 필요하기 때문에

 

아두이노 보드의 5v를 빵판에 먼저 확장하고 거기에서

 

조이스틱과 블루투스 모듈에 전원을 공급하겠습니다.

 

그리고 조이스틱은 x만 사용하도록 하겠습니다.

 

조이스틱

vcc 5V
gnd gnd
vrx a0

 

블루투스 모듈

vcc 5v
gnd gnd
tx 7
rx 8

이제 두번째 아두이노에 led를 연결해야 하는데

 

여기서 문제가 하나 발생합니다.

 

두번째 아두이노 기판에 전원은 어떻게 공급할까요?

 

유튜브에서 전체 회로도 보고 같이 만들겠습니다.

 

회로를 완성하고 준비해야 할 순서는

 

수신쪽 at 명령어 세팅

수신쪽 아두이노 코드 업로드

송신쪽 아두이노 코드 업로드

송신쪽 at 명령어 세팅

 

입니다.

수신측

#include <SoftwareSerial.h> 
SoftwareSerial BT(7, 8); //  (TX,RX) 연결순서

void setup(){
Serial.begin(9600);
BT.begin(9600);
pinMode(13,OUTPUT);
}

void loop(){
  if()
  {
    digitalWrite(13,HIGH);
  }
  
    if()
  {
    digitalWrite(13,LOW);
  }
}

 

송신측

#include <SoftwareSerial.h> 
SoftwareSerial BT(7, 8); //  (TX,RX) 연결순서
int x;

void setup(){
Serial.begin(9600);
BT.begin(9600);
}

void loop(){
  x=analogRead(A0);

  if(x<500)
  {

  }
  else if(x>530)
  {

  }

  while (BT.available())
  { 
   byte data = BT.read();
   Serial.write(data);
  }  
 
  while (Serial.available())
  {
    byte data = Serial.read();
    BT.write(data); 
  }
}