week_4 (BLE) - JINEEH/SmartDevice_JinHee GitHub Wiki

ํด๋ž˜์‹ ๋ธ”๋ฃจํˆฌ์Šค์™€ BLE ์‹ค์Šต์„ ํ†ตํ•œ ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹  ์ดํ•ด

1. ํ•™์Šต ๋ชฉํ‘œ

1-1. 2๊ฐ€์ง€ ๋ธ”๋ฃจํˆฌ์Šค ํ†ต์‹  ๋ฐฉ์‹(ํด๋ž˜์‹, BLE)์„ ์ด์šฉํ•˜์—ฌ LED ์ƒ‰์ƒ ์ œ์–ด

2. ํด๋ž˜์‹ ๋ธ”๋ฃจํˆฌ์Šค์™€ BLE

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. PAN/LAN/์ด๋™ํ†ต์‹ ๋ง

3-1.PAN(Personal Area Network): ๊ฐœ์ธํ†ต์‹ ๋ง์œผ๋กœ ๊ฐœ์ธ๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋„คํŠธ์›Œํฌ๋ฅผ ์†Œ์œ ํ•จ
                                ๊ฐœ์ธ์˜ ํŽธ๋ฆฌ๋ฅผ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•จ์œผ๋กœ์จ ๊ธฐ๊ธฐ๊ฐ€ ์‚ฌ๋žŒ์˜ ํ–‰๋™์— ๋งž์ถฐ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ํฐ ์žฅ์ 
                                LAN๋ณด๋‹ค ๋ฒ”์œ„ ์ž‘์Œ
                                ๋ธ”๋ฃจํˆฌ์Šค, zigbee

3-2. LAN(Local Area Network): ๊ทผ๊ฑฐ๋ฆฌํ†ต์‹ ๋ง์œผ๋กœ ๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ์— ์œ„์น˜ํ•œ ์†Œ์ˆ˜์˜ ์žฅ์น˜๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•จ
                              ๊ธฐ๊ธฐ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋ฉฐ ์ž‘๋™ํ•จ
                              ์™€์ดํŒŒ์ด

LAN ๊ทธ๋ฆผ

3-3. ์ด๋™ํ†ต์‹ ๋ง: ์‚ฌ์šฉ์ž ํœด๋Œ€์šฉ ๋‹จ๋ง๊ธฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋™ํ•˜๋ฉด์„œ ์ •๋ณด๋ฅผ ๊ตํ™˜(ex: LTE, 5G)
         1์„ธ๋Œ€: ์ „ํ™”๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์Œ์„ฑํ†ตํ™” ์„œ๋น„์Šค
         2์„ธ๋Œ€: ์•„๋‚ ๋กœ๊ทธ ์‹ ํ˜ธ๋ฅผ ๋””์ง€ํ„ธํ™” + ํ”„๋กœํ† ์ฝœ ์ข…๋ฅ˜ ๋‹ค์–‘ํ™”
         3์„ธ๋Œ€: 3G, ์Œ์„ฑ/๋ฌธ์ž/์˜์ƒํ†ตํ™” ์„œ๋น„์Šค์™€ ๋ฐ์ดํ„ฐ์„œ๋น„์Šค๋ฅผ ์ถ”๊ฐ€ ์ง€์›
         4์„ธ๋Œ€: 4G, 3G๋ณด๋‹ค ๋น ๋ฅธ ์ „์†ก์†๋„๋กœ ์ธํ•ด ํšจ์œจ์„ฑ ์ฆ๊ฐ€
         5์„ธ๋Œ€: 5G, ์ดˆ๊ณ ์†/์ดˆ์—ฐ๊ฒฐ/์ดˆ์ €์ง€์—ฐ

4. ํ†ต์‹ 

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. ํด๋ž˜์‹ ๋ฐฉ์‹ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹  ์‹ค์Šต

5-1. ์Šค๋งˆํŠธํฐ -> ESP32

  • ์Šค๋งˆํŠธํฐ์—์„œ 'hi smartdevice' ์ž…๋ ฅ
  • ์‹œ๋ฆฌ์–ผ ๋ชจ๋‹ˆํ„ฐ์— 'hi smartdevice' ์ถœ๋ ฅ ํ™•์ธ

5-2. ESP32 -> ์Šค๋งˆํŠธํฐ

  • ESP32์—์„œ 'hello smartdevice' ์ž…๋ ฅ
  • ์Šค๋งˆํŠธํฐ์—์„œ 'hello smartdevice' ์ถœ๋ ฅ ํ™•์ธ
  1. 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);
}

7. BLEํ†ต์‹ ์„ ์ด์šฉํ•œ RGB์ œ์–ด

  • ์‹คํ–‰์ฝ”๋“œ
//๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ
#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' ํ™•์ธ

8. ๋ถ€๊ฐ€์„ค๋ช…


  • ๋ธ”๋ฃจํˆฌ์Šค ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ์Šค๋งˆํŠธํฐ์— ์ •๋ณด ์ „๋‹ฌ - ์Šค๋งˆํŠธ๋ง
  • ์Šค๋งˆํŠธ๋ง: IoT๋ฅผ ํ™œ์šฉํ•œ ๋ฐ˜์ง€ ํ˜•ํƒœ์˜ ์›จ์–ด๋Ÿฌ๋ธ” ๊ธฐ๊ธฐ์ด๋ฉฐ 2023๋…„๋„์— ์‚ผ์„ฑ์ „์ž์™€ ์• ํ”Œ์—์„œ ํŠนํ—ˆ ๋“ฑ๋ก์„ ํ•˜์—ฌ ์„ ๋ณด์ผ ์˜ˆ์ •

๊ตญ๋ฏผ 4๋ช…์ค‘ 1๋ช…์€ ์›จ์–ด๋Ÿฌ๋ธ” ๋ณด์œ โ€ฆ AIํ—ฌ์Šค โ€˜๊ฐค๋Ÿญ์‹œ ๋งโ€™ ์ฃผ๋ชฉ

์‚ผ์„ฑ ์Šค๋งˆํŠธ ๋ฐ˜์ง€ ๊ฐค๋Ÿญ์‹œ๋ง, ์–ด๋–ป๊ฒŒ ๋‚˜์˜ฌ๊นŒ

โ€˜๊ฐค๋Ÿญ์‹œ๋งโ€™ ์žก๋Š”๋‹คโ€ฆ์• ํ”Œ, ์Šค๋งˆํŠธ๋ง ๊ฐœ๋ฐœ ์†๋„

โš ๏ธ **GitHub.com Fallback** โš ๏ธ