아두이노 블루투스 통신
HC-05
- Bluetooth 버전: 2.0 EDR
- Bace: csr BC417 라디오 + MX 29LV800CBXBI-70G 메모리
- 동작모드: AT mode, 통신모드
- AT모드 기본 통신속도: 38400
- 통신모드 기본 통신속도: 9600
- 입력전압: 5V
- 동작전압: 3.3V
- 민감도: -80dBm
- 전송출력: +4dBm
AT 모드 진입 방법
- 버튼을 누른채 전원 블루투스 전원을 뽑았다가 다시 연결
- 블루투스 LED가 2초 간격으로 점멸 시(AT 모드 진입) 버튼을 뗌
- 참고) 연결 모드시 빠르게 LED 점멸
- AT 모드의 속도 : 38400
- 데이터 통신 속도 : 9600
동작확인
chapter6/ex01/app.ino
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)
void setup() {
BTSerial.begin(38400);
Serial.begin(9600);
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read()); //블루투스측 내용을 시리얼모니터에 출력
}
if (Serial.available()) {
BTSerial.write(Serial.read()); //시리얼 모니터 내용을 블루추스 측에 WRITE
}
}
시리얼 모니터 입력창
'AT' 입력 후 전송
'OK' 답변 확인
블루투스 모듈 이름 및 PIN의 변경
- 블루투스 모듈 이름 변경
AT+NAME=원하는이름
입력 후 전송- AT+NAME으로 변경 이름 확인
- PIN 변경
AT+PSWD="1234"
마스터/슬레이브 모드, 주소 확인
역할 확인
AT+ROLE
- 0: 슬레이브
- 1: 마스터
- 2: LOOPBACK
역할 변경
AT+ROLE=1
주소 확인
AT+ADDR
+ADDR:18:91:d7a231 (M)
+ADDR:18:91:d71021 (S)
슬레이브 주소 확인
AT+ADDR
+ADDR:98d3:31:fb22d7
마스터에서 슬레이브 주소 BIND
- AT+BIND=98d3,31,fd22d7
AT+RESET
또는 전원 재인가
Bluetooth Terminal HC-05 앱 설치
스마트폰과 블루투스 모듈과의 통신을 통한 문자열 전송, led 작동
chapter6/ex02/app.ino
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)
void setup() {
BTSerial.begin(38400);
Serial.begin(9600);
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read()); //블루투스측 내용을 시리얼모니터에 출력
}
if (Serial.available()) {
BTSerial.write(Serial.read()); //시리얼 모니터 내용을 블루추스 측에 WRITE
}
}
블루투스 클래스화
BtMiniCom.h
#pragma once
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <MiniCom.h>
typedef void (*btminicom_callback_t)(String message);
class BtMiniCom : public MiniCom {
protected:
SoftwareSerial btSerial;
btminicom_callback_t callback;
public:
BtMiniCom(int rx, int tx, btminicom_callback_t callback);
void init();
String readLine(); // \r\n를 제외한 문자열을 리턴
void send(const char *msg);
void run();
};
BtMiniCom.cpp
#include "BtMiniCom.h"
BtMiniCom::BtMiniCom(int rx, int tx, btminicom_callback_t callback)
: MiniCom(), btSerial(rx, tx), callback(callback) {
}
void BtMiniCom::init() {
MiniCom::init();
btSerial.begin(9600);
}
String BtMiniCom::readLine() { // \r\n를 제외한 문자열을 리턴
String message = "";
while(btSerial.available()) {
char data = (char)btSerial.read();
if(data == '\r') continue;
if(data == '\n') break;
message += data;
delay(5); // 수신 문자열 끊김 방지
}
return message;
}
void BtMiniCom::send(const char *msg) {
btSerial.println(msg);
}
void BtMiniCom::run() {
String msg = readLine();
if(msg != "" && callback != NULL) {
callback(msg);
}
MiniCom::run();
}
문자열 전송, led 작동
app.ino
#include "BtMiniCom.h"
#include <Led.h>
void received(String msg);
Led led(13);
BtMiniCom com(2, 3, received);
void received(String msg) {
if(msg=="on") {
led.on();
com.send("OK");
} else if(msg=="off") {
led.off();
com.send("OK");
} else {
com.send("Bad Command");
}
}
void setup(){
com.init();
}
void loop() {
com.run();
}
'IoT 디바이스 활용 > Arduino' 카테고리의 다른 글
Arduino - DC 모터 (motor.h, car.h) (0) | 2020.10.16 |
---|---|
Arduino - 블루투스 조이스틱 컨트롤러 (0) | 2020.10.16 |
Arduino - Digital Sensors (0) | 2020.10.16 |
Arduino - LED Sensors, 온도 센서 (0) | 2020.10.16 |
Arduino - WIFI - ESP8266 - 라이브러리 (WifiUtil.h) (0) | 2020.10.16 |
댓글