week_4 (BLE) - JINEEH/SmartDevice_JinHee GitHub Wiki
1-1. 2๊ฐ์ง ๋ธ๋ฃจํฌ์ค ํต์ ๋ฐฉ์(ํด๋์, BLE)์ ์ด์ฉํ์ฌ LED ์์ ์ ์ด
2-1. ๋ธ๋ฃจํฌ์ค: ํด๋๊ธฐ๊ธฐ๋ฅผ ์๋ก ์ฐ๊ฒฐํ์ฌ ์ ๋ณด๊ตํ
๊ทผ๊ฑฐ๋ฆฌ ๋ฌด์ ๊ธฐ์ ํ์ค
์ฃผ๋ก 10๋ฏธํฐ ์ํ์ธ ์ด๋จ๊ฑฐ๋ฆฌ์์ ์ ์ ๋ ฅ ๋ฌด์ ์ฐ๊ฒฐ์ด ํ์ํ ๋ ์ฌ์ฉ
2-2. ์ฃผํ์ ํธํ: ์์คํ
๊ฐ์ ์ ํ ๊ฐ์ญ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฃผํ์ ํธํ ๋ฐฉ์ ์ฌ์ฉ
๋ง์ ์์ ์ฑ๋์ ํน์ ํจํด์ ๋ฐ๋ผ ๋น ๋ฅด๊ฒ ์ด๋ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ์ฉ ๋๋์ด ์ ์ก-> ํ ๋น๋ 79๊ฐ ์ฑ๋์ 1์ด๋น 1,600๋ฒ ํธํํ์ฌ ์ ํ ๊ฐ์ญ ์ต์ํ
๋ธ๋ฃจํฌ์ค์์ ์ค์ํ ์ญํ ์ ํจ
2-3. ํ์ด๋ง: ๋ธ๋ฃจํฌ์ค ์ฐ๊ฒฐ, ๋ง์คํฐ ๊ธฐ๊ธฐ(์ค๋งํธํฐ)์ ์ฌ๋ ์ด๋ธ(๋ฌด์ ์คํผ์ปค) ๊ธฐ๊ธฐ


2-4. BLE ์ ์: ์ ์ ๋ ฅ ๋ธ๋ฃจํฌ์ค(Bluetooth Low Energy)
๋๋ถ๋ถ์ ์๊ฐ์ ์ฌ๋ฆฝ ์ํ๋ก ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ ์๋ชจ๊ฐ ๋งค์ฐ ์ ์
์ ์ก์๋๊ฐ ๋ฎ๊ณ ์ฐ๊ฒฐ๋ฒ์ ์งง์
๋์์ฃผ๊ธฐ๊ฐ ์งง๊ณ ํ๊ท ์ ์ก ์๋๋ 200kbps ์ดํ๋ฅผ ์ ์งํจ
10kbps ์ดํ์ธ ๊ฒฝ์ฐ๋ ์ ๋ ฅ ํจ์จ์ด ์ข์ ๋ฐฐํฐ๋ฆฌ ๊ตํ์์ด 1๋
์ด์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ฌ
์ ๋ ฅ ๊ณต๊ธ์ด ์ ํ๋๋ ๊ทน์ํ ์ฌ๋ฌผ ์ธํฐ๋ท์ ์ฌ์ฉํจ(์๊ณ, ์จ์ด๋ฌ๋ธ ๊ธฐ๊ธฐ ๋ฑ)
2-5. ํด๋์ ๋ธ๋ฃจํฌ์ค ์ ์: BLE์ ๋นํด ์ ๋ ฅ ์๋น๊ฐ ๋์ผ๋ฉฐ ์ ์ก์๋๊ฐ ๋น ๋ฆ
BLE์ ๋นํด ์๋์ ์ผ๋ก ๋ ๊ธด ์ฐ๊ฒฐ๋ฒ
3-1.PAN(Personal Area Network): ๊ฐ์ธํต์ ๋ง์ผ๋ก ๊ฐ์ธ๋ง๋ค ๊ณ ์ ํ ๋คํธ์ํฌ๋ฅผ ์์ ํจ
๊ฐ์ธ์ ํธ๋ฆฌ๋ฅผ ์ํด ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํจ์ผ๋ก์จ ๊ธฐ๊ธฐ๊ฐ ์ฌ๋์ ํ๋์ ๋ง์ถฐ ์๋ํ๋ค๋ ๊ฒ์ด ํฐ ์ฅ์
LAN๋ณด๋ค ๋ฒ์ ์์
๋ธ๋ฃจํฌ์ค, zigbee
3-2. LAN(Local Area Network): ๊ทผ๊ฑฐ๋ฆฌํต์ ๋ง์ผ๋ก ๊ฐ๊น์ด ๊ฑฐ๋ฆฌ์ ์์นํ ์์์ ์ฅ์น๋ฅผ ์๋ก ์ฐ๊ฒฐํจ
๊ธฐ๊ธฐ๋ค์ ์ฐ๊ฒฐํ์ฌ ์ ๋ณด๋ฅผ ๊ตํํ๋ฉฐ ์๋ํจ
์์ดํ์ด
3-3. ์ด๋ํต์ ๋ง: ์ฌ์ฉ์ ํด๋์ฉ ๋จ๋ง๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ํ๋ฉด์ ์ ๋ณด๋ฅผ ๊ตํ(ex: LTE, 5G)
1์ธ๋: ์ ํ๋ง์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ฑํตํ ์๋น์ค
2์ธ๋: ์๋ ๋ก๊ทธ ์ ํธ๋ฅผ ๋์งํธํ + ํ๋กํ ์ฝ ์ข
๋ฅ ๋ค์ํ
3์ธ๋: 3G, ์์ฑ/๋ฌธ์/์์ํตํ ์๋น์ค์ ๋ฐ์ดํฐ์๋น์ค๋ฅผ ์ถ๊ฐ ์ง์
4์ธ๋: 4G, 3G๋ณด๋ค ๋น ๋ฅธ ์ ์ก์๋๋ก ์ธํด ํจ์จ์ฑ ์ฆ๊ฐ
5์ธ๋: 5G, ์ด๊ณ ์/์ด์ฐ๊ฒฐ/์ด์ ์ง์ฐ
4-1. ๊ธฐ์ง๊ตญ: BTS(Base Transceiver Station), ๋ฌด์ ํต์ ์๋น์ค๋ฅผ ์ํด ๋คํธ์ํฌ์ ๋จ๋ง๊ธฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฌด์ ํต์ ์ค๋น
4-2. ์ปค๋ฒ๋ฆฌ์ง: ํ๋์ ๊ธฐ์ง๊ตญ์ด ๋จ๋ง๊ธฐ์ ์ ๋ณด๋ฅผ ์ก์์ ํ ์ ์๋ ๋ฒ์
4-3. ITU: ๊ตญ์ ์ ๊ธฐํต์ ์ฐํฉ, ์ ๋ณดํต์ ๊ณผ ๊ด๋ จ๋ ๊ตญ์ ํ์ค UN ์ฐํ์์ ์ ์
ITU-R: ์ ํํต์ , ๋ฌด์ ํต์
ITU-T: ์ ๊ธฐํต์ ํ์คํ
IEEE(์ ๊ธฐ์ ์ํํ): ์ ์๊ธฐ์ ๋ฐ ๊ณผํ์ ๊ฐ๋ฐ๊ณผ ํ์ฉ์ ์ด์งํ๋ ๊ธฐ์ ์ ๋ฌธ๊ฐ ๋ชจ์์ผ๋ก ๊ตญ๊ฐํ์ค ๋ฐ ์ธ๊ณ ํ์ค์ ์ ์ ํ๋๋ฐ ๊ธฐ์ฌํจ
4-4. ๋ฌด์ ํต์ : ๋ ๋๋ ๊ทธ ์ด์์ ์ง์ ์ฌ์ด์ ์ ๊ธฐ ์ ๋์ฒด์ ์ฐ๊ฒฐ ์์ด ์ ๋ณด๋ฅผ ์ ์ก
์ ํ(์ ์๊ธฐํ:Electro Magnetic Wave)
์ผ๋ฐ ์ ํธ๋ฅผ ๊ณ ์ฃผํ์ ํจ์ฑํ์ฌ ์ ํ๋ฅผ ํตํด ์ ์ก-> ์์ ์ธก์์ ๊ณ ์ฃผํ ์ ํธ ์ฒ๋ฆฌ -> ๋ค์ ์๋ ์ ํธ๋ก ๋ณํ
4-5. ์ ํํต์ : ์ ํ๋ฅผ ํ์ฉํ ๋ฌด์ ํต์ (Radio Frequency)
๋ผ๋์ค์ ์๋ฆฌ๊ฐ ๊ฐ์
๋ณด๋ด๊ณ ์ ํ๋ ์ ๋ณด๋ฅผ ์ ํ๋ก ๋ณ์กฐ->์ ๋ ฅ์ฆํญ๊ธฐ๋ฅผ ํตํด ์ ํ ์ก์ถ -> ์์ ๋ ์ ํ๋ฅผ ๋ณต์กฐํ์ฌ ์ ๋ณด ์์
์์ฑ ์ ๋ณด ์ ๋ฌ์ ๋ชฉ์ ์ผ๋ก ํ๋ ๋ฌด์ ๊ธฐ๊ฐ ์์(๋ฌด์ ํต์ ๊ณผ ์ ํํต์ ์ ํด๋น)
4-6. ์ ๊ธฐ: ๊ฐ์ /์ ๋ ฅ
์ ์: ์ฝ์ /์ ๋ณด
4-7. ๋ชจ๋ฅด์ค๋ถํธ: ์ ํธ๋ฐ์์ฅ์น์ด๋ฉฐ ์งง์ ์ ํธ์ ๊ธด ์ ํธ๋ฅผ ์กฐํฉํ์ฌ ๋ฌธ์ ๊ธฐํธ
4-8. FM(Frequency Modulation): ์ฃผํ์ ๋ณ์กฐ
๋ฐ์กํ์ ์งํญ์ ์ผ์ ํ๊ฒ ์ ์งํ๊ณ ์ ํธ๋ฅผ ์ฃผํ์์ ๋ณํ๋ก ๋ณํํ์ฌ ์ก์ ํจ
AM๊ณผ ๋ค๋ฅด๊ฒ ์๋น ์ ๋ ฅ์ด ์ ์ผ๋ฉฐ AM๋ณด๋ค ๋ฎ์ ์์ค์ ์ก์ ๊ฐ์ง๊ณ ์์ด ์์ง ์ข์
์ ํ ๊ณผ์ ์์ ์ฅ์ ๋ฌผ์ด ๋ฐฉํด๊ฐ ๋ ์ ์์
AM(Amplitude Modulation): ์งํญ ๋ณ์กฐ
๋ฐ์กํ์ ๊ฐ์ฝ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๋ ๋ณ์กฐ๋ฐฉ์(๋ผ๋์ค, ์
๋ฌด์ฉ ๋ฌด์ ๊ธฐ ๋ฑ์ ์ฌ์ฉ) -> SSB(AM์ ํ ์ข
๋ฅ, ์ฃผํ์ ๋์ญํญ ์ ๊ฐ ๊ฐ๋ฅ)
๋ฎ์ ์์ญ๋์ ์ฃผํ์๋ฅผ ์ฌ์ฉํ์ง๋ง ์ฅ์ ๋ฌผ ๋ฐฉํด์๋ ์ ์ก๊ฐ๋ฅ

4-9. ๋ง์ดํฌ๋ก์จ์ด๋ธ: ํ์ฅ์ด ์งง์ผ๋ฉฐ ์ด๋จํ๋ณด๋ค ์ฃผํ์๊ฐ ๋์(์ ์๋ ์ธ์ง, ํ
๋ ๋น์ ..๋ฑ๋ฑ)
์ฅํ: ์ฃผํ์ 30~300kHz, ํ์ฅ๋ฒ์๋ 1000m~10,000m์ธ ์ ์ํ(์๋ ํต์ ์์๋ ์ฌ์ฉํ์ผ๋ ์์ฆ์ ์๋)
4-10. ISM ๋์ญ(band): ์ฐ์
, ๊ณผํ, ์๋ฃ ๊ธฐ๊ธฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฃผํ์ ๋์ญ
2.4GHz ๋์ญ์ ๊ณต์ค ๋ฌด์ ๋์๋น์ค, ๋ธ๋ฃจํฌ์ค, ์ ํ ์๋ณ ๋ฑ ๋ค์ํ ํต์ ์ ์ฌ์ฉ๋จ
5-1. ์ค๋งํธํฐ -> ESP32
- ์ค๋งํธํฐ์์ 'hi smartdevice' ์ ๋ ฅ

- ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ 'hi smartdevice' ์ถ๋ ฅ ํ์ธ

5-2. ESP32 -> ์ค๋งํธํฐ
- ESP32์์ 'hello smartdevice' ์ ๋ ฅ

- ์ค๋งํธํฐ์์ 'hello smartdevice' ์ถ๋ ฅ ํ์ธ

- RGB ๋ชจ๋ ์ ์ด
- ์ค๋น๋ฌผ: ESP32, ESP32 ํ์ฅ ์ค๋, RGB LED ๋ชจ๋, ์ ํผ์ผ์ด๋ธ 4๊ฐ

LED ์์์ RED๋ก ๋ณ๊ฒฝ
- ์คํ ์ฝ๋
#define RED_PIN 4
#define GREEN_PIN 15
#define BLUE_PIN 2
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
void loop() {
analogWrite(RED_PIN, 0);
analogWrite(GREEN_PIN, 255);
analogWrite(BLUE_PIN, 255);
delay(1000);
}
LED ์์์ GREEN๋ก ๋ณ๊ฒฝ
- ์คํ ์ฝ๋
#define RED_PIN 4
#define GREEN_PIN 15
#define BLUE_PIN 2
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
void loop() {
analogWrite(RED_PIN, 255);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 255);
delay(1000);
}
LED ์์์ BLUE๋ก ๋ณ๊ฒฝ
- ์คํ ์ฝ๋
#define RED_PIN 4
#define GREEN_PIN 15
#define BLUE_PIN 2
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
void loop() {
analogWrite(RED_PIN, 255);
analogWrite(GREEN_PIN, 255);
analogWrite(BLUE_PIN, 0);
delay(1000);
}
RGB๋ฅผ ํ์ฉํ์ฌ ์์๋ก LED ์์ ๋ณ๊ฒฝ(๋ ธ๋์)
- ์คํ ์ฝ๋
#define RED_PIN 4
#define GREEN_PIN 15
#define BLUE_PIN 2
void setup() {
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
void loop() {
analogWrite(RED_PIN, 228);
analogWrite(GREEN_PIN, 0);
analogWrite(BLUE_PIN, 225);
delay(1000);
}
- ์คํ์ฝ๋
//๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ธ์ค๊ธฐ
#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
//์๋น์ค์ ํน์ฑ์ ๋ํ UUID๋ฅผ ์ ์
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define RGB_CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
#define NOTYFY_CHARACTERISTIC_UUID "d501d731-f0f9-4121-a7f6-2c0f959f1583"
//RGB LED์ ์ฌ์ฉ๋ ํ ๋ฒํธ๋ฅผ ์ ์
#define RED_PIN 4
#define GREEN_PIN 15
#define BLUE_PIN 2
//BLE ๊ด๋ จ ๊ฐ์ฒด ์ ์ธ
BLEServer *pServer; //BLE ์๋ฒ ๊ฐ์ฒด
BLEService *pService; // BLE ์๋น์ค ๊ฐ์ฒด
BLECharacteristic *pRGBCharacteristic = NULL; //BLE ํน์ฑ ๊ฐ์ฒด
BLECharacteristic* pCharacteristic = NULL; //BLE ํน์ฑ ๊ฐ์ฒด
//RGB ๊ฐ์ ์ ์ฅํ ๋ณ์ ์ด๊ธฐํ
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
//BLE ํน์ฑ์ ๋ํ ์ฝ๋ฐฑ ํด๋์ค ์ ์
class MyCallbacks : public BLECharacteristicCallbacks {
//ํน์ฑ์ ๊ฐ์ ์ฝ์ด์ RGB ๊ฐ์ ํ์ฑํ๊ณ LED๋ฅผ ์ ์ด
void onWrite(BLECharacteristic *pCharacteristic) {
String value = pCharacteristic->getValue().c_str(); //ํน์ฑ์ ๊ฐ์ ๋ฌธ์์ด๋ก ์ฝ๊ธฐ
// ๊ฐ์ด ์ ํจํ ๊ฒฝ์ฐ์๋ง ์ฒ๋ฆฌ
if (value.length() > 0) {
// RGB ๊ฐ์ ํ์ฑํ์ฌ ๊ฐ๊ฐ์ ๋ณ์์ ์ ์ฅ
int delimiterPos1 = value.indexOf(',');
int delimiterPos2 = value.lastIndexOf(',');
if (delimiterPos1 != -1 && delimiterPos2 != -1 \
&& delimiterPos2 < value.length() - 1) {
redValue = value.substring(0, delimiterPos1).toInt();
greenValue = value.substring(delimiterPos1 + 1, delimiterPos2).toInt();
blueValue = value.substring(delimiterPos2 + 1).toInt();
// RGB ๊ฐ์ LED์ ๋ฐ๊ธฐ๋ก ๋ณํํ์ฌ ์ ์ด
analogWrite(RED_PIN, 255 - redValue);
analogWrite(GREEN_PIN, 255 - greenValue);
analogWrite(BLUE_PIN, 255 - blueValue);
}
}
}
};
void setup() {
// BLE ์ด๊ธฐํํ๊ณ ์ด๋ฆ์ "RGB LED Control"๋ก ์ค์
BLEDevice::init("RGB LED Control");
pServer = BLEDevice::createServer();
pService = pServer->createService(SERVICE_UUID);
// RGB ํน์ฑ ์์ฑ ๋ฐ ์ค์
pRGBCharacteristic = pService->createCharacteristic(
RGB_CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_WRITE
);
pRGBCharacteristic->setCallbacks(new MyCallbacks());
// Notify/Indicate ํน์ฑ ์์ฑ ๋ฐ ์ค์
pCharacteristic = pService->createCharacteristic(
NOTYFY_CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_NOTIFY |
BLECharacteristic::PROPERTY_INDICATE
);
// Create a BLE Descriptor
pCharacteristic->addDescriptor(new BLE2902());
// ์๋น์ค๋ฅผ ์๋ฒ์ ์ถ๊ฐ
pService->start();
// BLE ๊ด๊ณ ์์
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
// ๋ชจ๋ ํ์ HIGH๋ก ์ค์ ํ์ฌ LED๋ฅผ ๊บผ์ง ์ํ๋ก ์ด๊ธฐํ
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, HIGH);
}
void loop() {
// RGB ๊ฐ์ 16์ง์ ํํ๋ก ๋ณํํ์ฌ Notify
char hexValue[8];
sprintf(hexValue, "#%02X%02X%02X", redValue, greenValue, blueValue);
//Notify ํน์ฑ์ ๊ฐ์ hexValue๋ก ์ค์ ํฉ๋๋ค.
pCharacteristic->setValue(hexValue);
pCharacteristic->notify(); //Notify๋ฅผ ํตํด ๊ฐ์ ์ ๋ฌ
delay(100); // ์๋ฆผ ๊ฐ๊ฒฉ์ ์กฐ์
}
- APP ์ค์น ํ 'RGB LED Control'๊ณผ ์ฐ๊ฒฐ

- RGB(255,0,0) ์ ๋ ฅ ํ LED ์์ ๋ฐ '#FF0000' ํ์ธ



- ๋ธ๋ฃจํฌ์ค ์ฐ๊ฒฐ์ ํตํด ์ค๋งํธํฐ์ ์ ๋ณด ์ ๋ฌ - ์ค๋งํธ๋ง
- ์ค๋งํธ๋ง: IoT๋ฅผ ํ์ฉํ ๋ฐ์ง ํํ์ ์จ์ด๋ฌ๋ธ ๊ธฐ๊ธฐ์ด๋ฉฐ 2023๋ ๋์ ์ผ์ฑ์ ์์ ์ ํ์์ ํนํ ๋ฑ๋ก์ ํ์ฌ ์ ๋ณด์ผ ์์
๊ตญ๋ฏผ 4๋ช ์ค 1๋ช ์ ์จ์ด๋ฌ๋ธ ๋ณด์ โฆ AIํฌ์ค โ๊ฐค๋ญ์ ๋งโ ์ฃผ๋ชฉ
์ผ์ฑ ์ค๋งํธ ๋ฐ์ง ๊ฐค๋ญ์๋ง, ์ด๋ป๊ฒ ๋์ฌ๊น
โ๊ฐค๋ญ์๋งโ ์ก๋๋คโฆ์ ํ, ์ค๋งํธ๋ง ๊ฐ๋ฐ ์๋