1) 블루투스: 무선 기술 중 하나로, 짧은 거리에서
데이터를 주고받을 수 있도록 하는 기술,
- 2,4GHz에서 작동
- 기기들은 페어링이 되어 데이터를 주고 받을 수 있게 됩니다.
- 배터리 수명도 길고, 저전력이므로 스마트 홈 기기로 많이 사용된다.
2) 페어링(Pairing): 블루투스 기기끼리 서로를 인식하고 연결하는 과정
- 두 장치 간의 안전한 통신을 위해 서로를 인식하고 검증하는 과정
- 공개키 암호화 방식을 사용
- 각각의 장치는 랜덤한 숫자 값을 생성하고, 상대방에게 이 값을 전달
- 이어서, 상대방의 공개키를 사용하여 전달받은 값을 암호화하고, 다시 전달
- 이 과정을 반대쪽 장치도 수행
- 이후 암호화된 데이터를 주고받을 수 있게됩니다.
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(13, 12); // SoftwareSerial(RX, TX)
void setup() {
BTSerial.begin(9600);
Serial.begin(9600);
}
void loop() {
if (BTSerial.available()) {
Serial.write(BTSerial.read()); //블루투스측 내용을 시리얼모니터에 출력
}
if (Serial.available()) {
BTSerial.write(Serial.read()); //시리얼 모니터 내용을 블루추스 측에 WRITE
}
}
- 지금 구글 스토어에 위 어플 없음. 대체할 만한 어플 찾기
#include <SoftwareSerial.h>
#include <MiniCom.h>
MiniCom com;
SoftwareSerial BTSerial(13, 12); // SoftwareSerial(RX, TX)
String myString=""; //받는 문자열
int count=0;
void setup() {
com.init();
com.print(0, "[[Bluetooth]]");
BTSerial.begin(9600); //블루투스 시리얼 개방
}
void loop() {
while(BTSerial.available()) { //BTSerial에 전송된 값이 있으면
//BTSerial int 값을 char 형식으로 변환
char myChar = (char)BTSerial.read();
//수신되는 문자를 myString에 모두 붙임 (1바이트씩 전송되는 것을 연결)
myString+=myChar;
delay(5); //수신 문자열 끊김 방지
}
if(!myString.equals("")) { //myString 값이 있다면
myString.trim();
char buf[17];
sprintf(buf, "%d)%s", ++count, myString.c_str());
com.print(1, buf);
BTSerial.println("input value: "+myString);
myString=""; //myString 변수값 초기화
}
}
//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=NULL,
long serial_bps=115200, int lcd_addr=0x27);
void init();
String readLine(); // \r\n를 제외한 문자열을 리턴
void send(String msg); // 메시지 전송
void run();
};
//BtMiniCom.cpp
#include "BtMiniCom.h"
BtMiniCom::BtMiniCom(int rx, int tx, btminicom_callback_t callback,
long serial_bps, int lcd_addr)
: MiniCom(serial_bps, lcd_addr), 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();
message+=data;
delay(5); //수신 끊김 방지 ***
}
message.trim();
return message;
}
void BtMiniCom::send(String msg){
btSerial.println(msg);
}
void BtMiniCom::run(){
String msg = readLine();
if(msg != "" && callback != NULL) {
callback(msg);
}
MiniCom::run();
}
//app.ino
#include <BtMiniCom.h>
void receive_msg(String msg);
BtMiniCom com(13, 12, receive_msg);
int count=0;
void receive_msg(String msg) {
char buf[17];
sprintf(buf, "%d)%s", ++count, msg.c_str());
com.print(1, buf);
com.send("input value: " + msg);
}
void setup() {
com.init();
com.print(0, "[[Bluetooth]]");
}
void loop() {
com.run();
}