안녕하세요? 착한이입니다.
Nordic 사의 nRF52840을 이용한 BLE 5.0 강좌를 시작합니다.
본 강좌에서는 nRF52840을 장착한 nRF52840 Dongle(USB 방식)과
nRF52840 DK(Development Kit) 보드를 이용하여 BLE 5.0 펌웨어 개발에 대해 알아 보고자 합니다.
nRF52840 관련 자세한 사항은 다음 사이트에서 확인하실 수 있습니다.
https://www.nordicsemi.com/Products/Low-power-short-range-wireless/nRF52840
nRF52840 Dongle 제품에 대한 자세한 사항은 다음 사이트에서 확인하실 수 있습니다.
https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-Dongle
nRF52840 DK 보드에 대한 자세한 사항은 다음 사이트에서 확인하실 수 있습니다.
https://www.nordicsemi.com/Software-and-Tools/Development-Kits/nRF52840-DK
[BLE 5.0 강좌 03] Central 모드 테스트 - nRF52840 Dongle로 Scan 하기
http://www.wearedev.net/?m=bbs&bid=lecture&uid=190
[BLE 5.0 강좌 04] Peripheral 모드 테스트 - nRF52840 Dongle로 Advertising 하기
http://www.wearedev.net/?m=bbs&bid=lecture&uid=191
[BLE 5.0 강좌 05] Programmer로 펌웨어 Write 하기
http://www.wearedev.net/?m=bbs&bid=lecture&uid=203
BLE 5.0 강좌 04에서 nRF52840 Dongle을 Peripheral 모드로 동작시켜 보았습니다.
본 강좌에서는 Service를 추가해서 스마트폰과 연결하여 데이터를 송수신해 보려고 합니다.
BLE의 Service에는 많은 종류가 있습니다.
온도 전송, 심박수 전송, 배터리 레벨 전송, HID, Power 레벨 전송, 오디오 전송 등의
다양한 것이 있으며, 이러한 Service는 128bit UUID로 구분됩니다.
물론 본인만의 UUID를 만들어서 커스텀 Service도 만들 수 있습니다.
Service를 생성하고 추가하는 것을 소스 코드로 프로그래밍해서 할 수 있지만
nRF Connect의 Bluetooth Low Energy 툴을 이용하여 구현할 수 있습니다.
이 방법은 BLE Service를 이해하거나 처음 BLE 장치를 만들었을 때, App 테스트할 때
유용하게 사용하실 수 있습니다.
1. Service 추가하기
BLE Service를 추가하는 방법은 소스 코드를 이용하여 펌웨어를 생성하는 방법과
Bluetooth Low Energy 툴을 이용하는 방법이 있습니다.
본 강좌에서는 Bluetooth Low Energy 툴을 이용하여 구현해 보겠습니다.
소스 코드를 이용하는 방법은 차후 강좌에서 알아 보겠습니다.
먼저 nRF52840 Dongle 또는 DK 보드를 PC에 연결합니다.
nRF Connect를 실행합니다. 본 강좌에서는 3.0.0 버전을 기준으로 설명합니다.
다음 화면에서 "Bluetooth Low Energy"를 실행합니다.
Bluetooth Low Energy가 실행되면 "Select device" 을 클릭합니다.
연결된 장치 목록이 나타나면 테스트할 장치를 선택합니다.
장치 명에 PCA10056으로 표시되면 nRF52840 DK 이며,
PCA10059으로 표시되면 nRF52840 Dongle 장치입니다.
다른 장치를 사용해도 무관합니다.
장치가 정상적으로 인식이 되면 다음 화면과 같은 정보가 표시됩니다.
장치 Address 와 Service 를 표시해 줍니다.
신규 Service를 추가하기 위해서 "Server Setup" 버튼을 클릭합니다.
다음의 화면이 표시 됩니다.
"+ New Service" 를 클릭하면 "New Service" 이름의 Service가 추가됩니다.
"New Service" 이름 부분을 클릭하면 UUID와 이름을 변경할 수 있습니다.
다음 그림과 같이 찾기 버튼을 클릭하면 Service 목록이 표시 됩니다.
본 강좌에서는 Battery Service를 선택하겠습니다.
Battery Service는 장치의 Battery 값을 전송할 때 이용됩니다.
"180F" Battery Service를 선택하면 다음과 같이 Service 이름이 자동으로 변경됩니다.
여기서 180F 는 전체 UUID 중에 일부분입니다.
"Save" 버튼을 클릭하여 저장합니다.
저장이 완료되면 다음과 같이 Battery Service로 이름이 변경된 것을 확인할 수 있습니다.
이제 Service의 characteristic 를 추가해야 합니다.
characteristic 은 BLE 통신을 위한 데이터의 특성과 권한 등을 저장하고 있습니다.
characteristic도 UUID로 구분이 됩니다.
Service에는 하나 이상의 characteristic이 포함됩니다.
"+ New characteristic" 을 클릭하면 "New Characteristic" 이름으로 추가 됩니다.
이를 클릭하면 Characteristic UUID와 초기값, 속성 등을 설정할 수 있는 화면이 나옵니다.
Battery 정보를 보낼 것이므로 Battery Level characteristic을 추가해 주면 됩니다.
찾기 버튼을 클릭 합니다.
다음 그림과 같이 2A19 : Battery Level 을 선택합니다.
Characteristic 이름이 변경됩니다. "Initial value" 에 초기값을 추가합니다.
여기서는 50을 넣었으며, hex 값이므로 실제 값은 80%를 의미합니다.
Battery Level 값을 BLE 을 통해서 읽고 쓰기가 가능하도록 권한을 설정해 줍니다.
다음 그림과 같이 "Read"와 "Wrtie"에 체크를 합니다.
그리고 하단의 "Save" 버튼을 클릭합니다.
저장이 완료되면 다음과 같이 characteristic의 이름이 "Battery Level" 로 표시됩니다.
이제 장치에 적용하기 위해 "Apply to device" 버튼을 클릭합니다.
Service 추가가 완료 되었다면 "Connection Map" 버튼을 클릭합니다.
다음 화면과 같이 Battery Service가 추가된 것을 확인할 수 있습니다.
Battery Level Characteristic도 추가되었으며, 초기값은 0x50이고
read, write 권한이 표시되어있습니다.
이제 Peripheral 모드로 동작시키기 위해서 Advertising 이름을 설정하겠습니다.
다음 그림과 같이 장치의 톱니바퀴 버튼을 클릭합니다.
"Advertising setup..." 메뉴를 선택합니다.
기본적으로 Advertising data 영역을 보면 "Complete local name"가 "nRF Connect"로 되어 있습니다.
이를 변경하기 위해서 "Delete" 버튼을 클릭해서 삭제합니다.
새로운 Complete local name을 추가하기 위해서 "AD type"에서 "Complete local name"를 선택하고
"Value"에서 원하는 이름을 입력합니다. BLE 장치 검색 시, 이 이름으로 표시됩니다.
"+Add to advertising data" 버튼을 클릭합니다.
"Apply" 버튼을 클릭하여 설정 값을 저장합니다.
"Close" 버튼을 클릭하여 창을 닫습니다.
Advertising을 하기 위해 톱니바퀴 버튼을 클릭하여 "Start advertising" 메뉴를 선택합니다.
정상적으로 Peripheral 모드가 시작이 되고 advertising이 되면
다음과 같이 안테나 모양이 표시됩니다.
여기 까지 Service를 추가하고 장치를 Peripheral 모드로 동작시켰습니다.
스마트폰과 연결하여 Service를 테스트해 보겠습니다.
2. Service 테스트하기
장치가 Peripheral 모드로 동작하면 스마트폰에서 nRF Connect App으로 검색 가능합니다.
nRF Connect App을 실행합니다.
"SCANNER" 를 선택하고 "SCAN"을 클릭합니다.
앞서 설정한 Complete local name 이 보이면 "CONNECT" 버튼을 클릭하여 연결합니다.
연결이 성공하면 다음과 같이 Battery Service가 표시됩니다.
Battery Level도 표시되며 read, write 권한이 있다고 표시됩니다.
동시에 PC의 Bluetooth Low Energy 툴에서도 다음과 같이 연결이 표시됩니다.
스마트폰이 Central 모드로 동작한다고 표시되어 있습니다.
Battery Level 항목의 옆 부분에는 상하 화살표가 있습니다.
아래 방향의 화살표를 클릭하면 BLE 장치의 Battery Level 값을 읽어옵니다.
초기값이 0x50이므로 80%로 값이 표시됩니다.
Battery level 값을 변경하기 위해서는 위 방향 화살표를 클릭합니다.
다음과 같은 화면이 나타나면 "Write value"에 값을 입력합니다.
여기서는 hex 값 30을 입력하였습니다.
"Send" 버튼을 클릭하면 전송이 됩니다.
다음과 같이 스마트폰의 값이 48%로 표시됩니다.
데이터는 BLE를 통해 PC로 전달됩니다.
PC 화면을 보면 장치의 값이 "30"으로 표시됩니다.
이렇게 스마트폰에서 BLE 장치의 Battery Level 값을 읽고 변경할 수 있습니다.
Write 권한이 있기 때문에 같은 방법으로 BLE 장치의 값을 변경할 수 있습니다.
다음 화면과 같이 Battery Level 값을 클릭 한 후에 "60"을 입력한 후에
확인 버튼을 누르면 값이 변경됩니다.
스마트폰에서 다시 아래 방향의 화살표를 클릭하면
96%로 값이 변경됨을 확인할 수 있습니다.
여기까지 Peripheral 모드에서 Service를 추가해서 사용해 보았습니다.
Battery Service 외에도 다양한 Service가 있으므로 한번씩 테스트해 보시길 바랍니다.
궁금하신 사항은 댓글로 남겨 주세요.
다음 강좌에서 뵙겠습니다.
즐거운 개발하시길 바랍니다.
다음 유튜브 채널에서 BLE 5.0 관련 동영상을 보실 수 있습니다.
https://www.youtube.com/c/wearedev
구독 부탁 드립니다.