이런 질문을 아질게에 해야 하는지 여기에 해야 하는지 모르겠습니다만...
블루투스 기반으로 동작하는 주변 기기를 만들려고 합니다.
제품으로 나와 있지도 않고, 팔수 있을 정도는 아니더라도 개인적으로라도 사용하려는 용도가 있어서
아두이노를 알아보다가 esp32 보드들이 있어서 이걸 구매해서 열심히 들여다보고 있는데요...
제가 생각했던것이 실제 블루투스 동작과 좀 많이 다르더라고요? ;ㅅ;
제가 계획한 주변 기기의 블루투스 동작은 다음과 같습니다.
1. 블투 기기의 전원을 켜고 버튼을 누른다 (Server로 동작)
2. 스마트폰 (특히 아이폰)에서 블루투스 연결에 들어가면 기기 이름이 뜬다
3. 블루투스 연결을 탭하면 (비번 없이) 기기가 연결된다
4. 기기의 연락처 정보/위치 정보 등을 블투 기기에서 받아갈수 있다
5. 다시 1~3을 반복하면 복수개의 스마트폰을 연결할수 있다 (멀티페어링? 멀티커넥트?)
이렇게 계획하고 esp32 보드를 구매해서 블루투스 예제들을 돌려보니
PC와 안드로이드 기기에서는 2번이 문제가 없는데, 아이폰에서는 절대 추가 목록에 나오질 않네요?
구글링 해보니 다음의 내용을 찾았습니다.
------
블루투스 2.0 연결
스마트폰 장치 켜기 - 외부 블루투스 검색 - 검색된 블루투스와 페어링(비밀번호 유/무) - 사용앱에서 블루투스 연결
블루투스 4.0 연결
1. 블루투스 4.0 BLE의 설정이 페어링 없이 연결인 경우(기본 설정)
a. 스마트폰 장치 켜기 - 외부 블루투스 검색 - - 검색된 블루투스와 페어링 시도 - 오류 메시지 표시
b. 스마트폰 장치 켜기 - 사용앱에서 블루투스 4.0 BLE만 검색 - 블루투스 연결
2. 블루투스 4.0 BLE의 설정이 비밀번호 이용 페어링 연결인 경우(특정 사용자 한명만 사용)
a. 스마트폰 장치 켜기 - 외부 블루투스 검색 - 블루투스4.0과 비밀번호 사용 페어링 - 사용앱에서 검색 불가
b. 스마트폰 장치 켜기 - 사용앱에서 블루투스 4.0 BLE만 검색 - 블루투스와 비밀번호 사용 페어링 - 블루투스 연결
블루투스 4.0 BLE의 비밀번호 사용 페어링의 경우 기존에 사용하던 블루투스 2.0과 같이 스마트폰 블루투스 장치 프로그램을 통해 연결을 할 수 있다(2-a의 경우). 하지만 연결되는 순간 블루투스 4.0 BLE 모듈은 장치의 연결을 위한 advertising기능을 중지하게 되고 이는 사용앱에서 블루투스 4.0 BLE 장치의 검색을 불가하게 만들어 정작 앱에서는 연결을 할 수 없게 된다.
모듈에 따라 advertising 여부를 설정하는 옵션이 있을 수 있으나 특정 사용자 한명만 지속적인 연결을 하는 상황에서 다른 사용자가 접속할 수 있도록 advertising 한다는 것 자체는 이치에 맞지 않게된다.
다시 한번 언급하지만, 블루투스 4.0 BLE는 블루투스 2.0의 기능을 향상시킨 업그레이드 버전이 아니라 사용 용도가 다른 별개의 제품으로 취급해야 한다.
블루투스 2.0은 사용자 한명의 지속적인 연결과 데이터 전송 및 수신을 목적으로 하였다면 블루투스 4.0 BLE는 불특정 다수의 단속적인 연결, 즉 데이터 전송 및 수신 시에만 연결하고 다음 사용자를 위해 연결을 끊는데 적합하게 만들어 졌다. 이렇게 함으로써 배터리로 구동되는 장치의 경우 전력 소모를 줄일수 있게된다. 하지만 한번에 전송할 수 있는 패킷의 양도 극도로 줄여놓았다(20byte 임, 모듈의 펌웨어에 따라 다를 수 있음).
출처: https://postpop.tistory.com/13?category=744994
-----------
그외에도 찾아보니 iOS는 Bluetooth 4.0 BLE만 지원하기 때문에 2.0과 같은 방식은 더 이상 지원하지 않는다고 하던데 맞는지요?
위의 글 2-b 와 중간에 진하게 표시한 부분의 얘기라면, 비번을 설정해서 연결 가능하게 하더라도, 1대 이상 연결이 불가하다는 얘기 맞지 않나요?
그냥 블투 연결하고 정보 표시할 용도인데... 굳이 앱을 만들어서 앱에서 검색하고 연결할 필요가 없는데 말입니다.
글이 길었습니다만 질문을 요약하자면...
1. 아이폰에서 앱을 사용하지 않고 블루투스로 검색해서 추가할수 있는 멀티페어링 기기를 만들수 있나?
2. (1번이 가능하다면) esp32 보드가 아니라 다른 개발 방법이 필요한가?
입니다.
iOS에서 안되는거라고 생각하기엔 제 아이폰에 블루투스로 연결된 제품들이 너무 많은데 말입니다. ;;
2.0을 Bluetooth Classic 이라고 하는데, iOS 앱에서 다룰 수 있는건 BLE 뿐이죠.
여튼 질문에 대한 답변은 iOS는 BLE뿐 아니라 클래식 지원합니다. 멀티페어링은 기기 펌웨어에서 구현하면 됩니다.
블투쪽을 더 공부하시고, 클래식과 BLE는 완전 다른거라고 생각하시고 공부하시면 될 것 같습니다.
추가로, iOS 설정-블루투스에 검색되는건 클래식입니다. BLE 목록 안나옵니다. BLE는 전용앱에서 검색합니다 보통.
대부분 안드로이드에서는 클래식, BLE 다 검색되서 나옵니다.
블투쪽이 제가 예상했던것과 많이 다르더군요. 말씀하신대로 클래식과 BLE는 완전히 다르다는건 잘 알겠습니다.
그럼 블투 목록에 나오는것이 다 클래식이라면, 요즘 나오는 기기들 중에 앱에서 연결하면 목록에도 나오는 것들은 두개 다 지원하는것이겠군요.
친절한 답변 감사합니다.
대신 BLE의 GATT를 지원합니다. 안드로이드는 둘 다 지원하구요.
사용하신 아두이노 기기가 BLE를 지원하는지 스펙을 확인할 필요가 있습니다.
BLE를 사용해서 임의의 데이터 전송을 하려면 (당연히) 전용앱을 만들어야 합니다.
다행히 프레임웍에서 지원이 잘 되어 있어서 단순한 기능이라면 개발이 어렵지 않습니다.
아래 사이트를 살펴보면 도움이 될 겁니다.
안드로이드: https://developer.android.com/guide/topics/connectivity/bluetooth-le?hl=ko#java
iOS: https://www.raywenderlich.com/231-core-bluetooth-tutorial-for-ios-heart-rate-monitor
참고로, Nordic 모듈은 (nRF52 등) BLE 위에서 UART 처럼 통신할 수 있는 펌웨어와 리퍼런스 앱을 제공합니다.
이것을 사용하면 PC 터미널에서 B/T 보드와 UART 연결을 하고 임의의 데이터를 자유롭게 송수신할 수 있어서
빠르게 샘플 개발이 가능합니다.
앱을 만드는게 어려운건 아니겠지만, 굳이 앱을 만들 필요가 없는 기기라 좀 고민되는 사항입니다.
혹시, 위에 인용한 글에서 2-a처럼 비밀번호를 표시하게 하고 앱이 아닌 기기에서 추가하게 되면, 특정 사용자 한명만 사용 가능하다고 나와있는데.. 기기 하나를 추가한 후 기기에서 추가로 비밀번호를 출력하고 다른 기기에서 또 연결할수 있는지 아시나요? (아니면 가능한지의 여부라도..) ;;
말씀하신 Nordic 모듈은 아직 찾아보지는 못했는데, esp32를 쓰는 이유가 블투 외에 다른 모듈이 이미 개발되서 통합으로 나오는 보드가 있어서 쓰는 것이거든요..
2-a 방법으로 여러대를 연결할수 있다면 이쪽이 더 빠를거 같아서 다시 질문드렸습니다. ;ㅅ;
자세한 답변 감사합니다. ^^
검색해보니 multiple client 지원이 된다고 하네요. (BLE는 8 개까지..)
https://esp32.com/viewtopic.php?t=11490
그런데 이 경우에도 각 client에 대해서 비밀번호를 적용할 수 있는지는, 이것도 ESP32의 기능에 속하는 문제라
관련 커뮤니티나 지원사이트를 찾아보셔야겠네요.
핸드폰 입장에서는 ESP32 서버 한 대와만 연결하면 되므로 특이사항이 없고, ESP32에서 여러 폰과의 연결을
관리해야 하는 문제이니까요.
(여러대의 핸드폰을 순차적으로 각각 연결-정보전달-연결종료 하는게 아니고 동시에 여러대가 연결 상태에 있어야
하는 것이죠?)
아이폰에서는 2-a 방법이 불가능하고 (폰의 B/T 설정에서는 클래식 연결만 관리할겁니다),
BLE의 본 목적에도 맞지 않습니다.
그리고 생각하시는 기능이, 연결된 스마트폰의 정보 (전화번호, 위치 등)를 ESP32로 전달하는 것이 맞나요?
전용앱이 없이 자동으로 저런 정보를 전달해 줄 방법이 없을텐데요.
알려주신 링크도 정말 감사하고, 8개까지 가능하다니 일단 더 찾아보도록 하겠습니다.
제가 생각하는 기기는 동시에 여러대 연결할 필요는 없고 또 계속 연결할 필요도 없는 설계입니다.
만약 3대를 연결했다고 하면 블투쪽에서 적정한 슬립 타임 이후에 1대씩 연결해보고 그 중에 연결된것이 있는지만 확인해보면 되는거거든요.
아이폰에서 2-a 방법이 불가능하다면.. 대략 난감합니다만.. ㅠㅠ (제가 안드폰을 쓰면 필요 없을수도 있는것을..)
일단 아두이노쪽 소스를 좀 보고 시도해보고.. 안되면 앱을 만들 궁리를 해보겠습니다.
(클래식으로 구현하는 것도 생각해봤는데.. 기기 특성은 BLE로 하는게 맞긴 하거든요..)
아, 마지막에 쓰신 단락을 생각해보니... 앱을 만들어야 하겠네요... 블투 연결시에 주는 값은 ID같은 값일테니..ㅠㅠ
(하아.. 기기 블투 코드 짜는것도 이리 어려운데.. 앱까지 만들어야 하다니 ㅠ)
그럼 블투기기에서 iOS 기기마다 다른 값으로 구분해서 저장하고 앱에서 데이터를 받아서 사용하는 방법으로 개발해야 하는군요.
제 실력이.. 그만큼 되야 할텐…