Bluetooth 5 메시 네트워킹에 대한 빠른 추적

DigiKey 북미 편집자 제공

Bluetooth 5의 메시 네트워킹 기능을 사용할 수 있게 됨에 따라 개발자는 IoT 장치와 같이 무선으로 연결된 시스템의 범위와 네트워크 가용성을 향상시킬 수 있습니다. 하지만 메시 네트워킹에는 저전력 무선 하드웨어 설계와 메시 네트워킹 소프트웨어 개발이라는 복잡한 숙제가 있어, 개발자가 이 숙제를 빨리 해결하지 못하면 프로젝트 일정에 차질이 생길 수 있습니다.

Bluetooth 5 지원 스마트폰과 기타 모바일 플랫폼의 등장으로, 개발자는 거의 모든 산업 분야와 응용 제품에서 Bluetooth 메시 네트워킹 기능에 대해 예상되는 수요의 폭발적인 증가에 신속하게 대응해야 하기 때문에 시간이 매우 중요한 요소가 되었습니다. 이에 발맞춰 실리콘 및 소프트웨어 판매업체는 개발 과정을 단순화하고 가속화하는 솔루션을 도입 중입니다.

이 기사에서는 Bluetooth 메시 네트워킹에 대한 근거를 요약하고, 특별히 Silicon Labs의 메시 이용 가능 Bluetooth 5 모듈 회선의 장치를 사용하여 개발 절차를 단계별로 살펴봅니다. 개발자는 이러한 통합 Bluetooth 5 솔루션을 사용하여 Bluetooth 메시 네트워킹을 완벽하게 이용할 수 있는 연결된 장치와 응용 제품을 빠르게 배포할 수 있습니다.

이 기사는 샘플 메시 응용 제품 코드를 사용하여 시연된 이벤트 기반 모델에 대한 상세 내용을 비롯하여 Silicon Labs Bluetooth 메시 소프트웨어 개발 패키지에 대한 제품 요약으로 마무리됩니다.

Bluetooth 메시의 필요성

Bluetooth 메시는 기존 Bluetooth 기술의 P2P 연결 기능을 뛰어 넘는 기능을 제공합니다. Bluetooth 메시는 연결된 인접 장치를 통해 메시지를 전달하여 송신기 전원 출력 및 수신기 감도에서 제공한 실제 범위를 벗어나 저전력 장치의 유효 범위를 확장합니다. 가장 중요한 것은 Bluetooth 메시는 스마트폰 및 기타 모바일 장치의 Bluetooth 지원 앱을 활용하여 훨씬 복잡한 메시 연결 응용 분야에 자연스럽게 접목될 수 있다는 점입니다.

Bluetooth를 사용하는 개발자는 이제 메시 지원으로 홈 자동화, 건물 관리 및 수 많은 IoT 응용 분야에 얼마든지 많은 개수의 장치를 쉽게 연결할 수 있습니다.

Bluetooth 메시 작동 방법

Bluetooth 메시는 네트워크에 있는 노드 간에 개념적으로 단순한 상호 작용 모델을 사용합니다(그림 1). 특수 노드 유형은 노드 간에 메시지를 전달하는 데 필요한 추가 기능을 제공하여 프록시 노드를 통해 Bluetooth 지원 모바일 장치와 상호 작용하는 네트워크의 유효 범위를 확장합니다.

Bluetooth 메시 네트워크 이미지그림 1: Bluetooth 메시 네트워크는 기본 에지 노드와 함께 특수한 노드 유형을 사용하여 다른 노드의 메시지를 전달하거나(릴레이), 저전력 노드의 캐시(친구) 역할을 하거나, 네트워크(프록시)를 Bluetooth 지원 모바일 장치에 연결할 수 있습니다. (이미지 출처: Silicon Labs)

다른 전문 노드 유형은 저전력 노드가 확장된 절전 상태 간에 정기적으로 폴링하는 메시지를 캐시하는 데 인접 노드를 사용하여 줄어든 전력 요구 사항을 해결합니다. 이러한 기능이 추가된 경우에도 Bluetooth 메시 장치는 이전 버전의 Bluetooth를 사용하는 레거시 장치와 연결하는 데 GATT(일반 속성 프로파일) 서비스를 사용할 수 있습니다. 따라서 메시 장치는 스마트폰 특정 영역에 메시지를 생성하거나 자산 관리 애플리케이션을 식별하는 비콘과 같은 기존의 BLE(Bluetooth 저에너지) 기능을 최대한 활용할 수 있습니다.

또한 Bluetooth 메시는 건물 자동화 또는 기타 IoT 응용 분야에 필요한 보호된 네트워크의 보안과 관련하여 커져 가고 있는 우려를 해소합니다. BLE의 경우에는 보안이 단일 장치를 보호하기 위한 선택 사항이지만, Bluetooth 메시는 메시 네트워크 전체를 보호하기 위한 보안을 제공합니다.

메시 보안을 위한 Bluetooth의 접근 방식은 특히 흥미롭습니다. Bluetooth의 보안 체계는 각 장치, 네트워크 및 전체 응용 분야에 별도의 보안 수단을 사용하여 메시 네트워킹에 우려 사항을 분리하는 개념을 도입합니다. 각 장치와 연결된 개인 장치 키(DevKey)는 해당 노드만 포함하는 구성 및 프로비저닝과 같은 작업에 보안을 제공해 줍니다. 각 장치에는 네트워크 또는 서브넷의 다른 노드와 통신하기 위한 네트워크 키(NetKey)가 필요합니다. 마지막으로, 메시지 전송을 통한 조명 켜기와 같은 응용 분야 레벨의 상호 작용에는 애플리케이션 키(AppKey)가 필요합니다. 다른 보안 수단은 가로채기 공격 또는 재생 공격과 같은 일반적인 위협으로부터 보호합니다. Bluetooth 메시의 보안 메커니즘은 훨씬 복잡한 IoT 응용 제품에 필요한 중요한 신뢰의 기반을 제공합니다.

그럼에도 불구하고 Bluetooth 메시 연결 응용 제품을 구현하는 것은 개발자에게 아주 어려운 작업입니다. 메시 네트워킹을 사용하는 대부분의 응용 제품은 전력이 제한된 장치에 구축되므로, 저전력 무선 서브 시스템의 유효 범위를 확장하는 데 메시 네트워크에 의존합니다. 적합한 메시 지원 저전력 하드웨어 장치를 만들 때 발생하는 문제는 아무리 경험이 많은 하드웨어 개발자라도 어려워할 수 있습니다. 맞춤형 Bluetooth 설계를 완료한 후에도 개발자는 국가 인증 요구 사항을 충족하는 데 상당한 비용과 장기간의 지연 문제를 겪게 될 수 있습니다. 소프트웨어 개발자는 호환 가능한 Bluetooth 메시 스택을 찾고 이를 사용하여 자체 응용 제품을 지원할 수 있는 소프트웨어 계층을 구축하는 과정에 있어 지연 문제를 겪게 됩니다. 그러나 Silicon Laboratories의 Bluetooth 하드웨어와 소프트웨어를 통해 개발자들은 자체 응용 분야를 위한 저전력 장치에 Bluetooth 메시 기능을 빠르게 배포할 수 있습니다.

Bluetooth 모듈

Silicon Labs의 Bluetooth 메시 솔루션은 저전력 Bluetooth BGM13P 하드웨어 모듈에 구축되며, 무선 프로세서와 전체 Bluetooth 스택을 결합하여 12.9 × 15.0 × 2.2mm 패키지로 완벽하게 인증된 Bluetooth 시스템을 제공합니다. 이 모듈의 중심에 있는 EFR32BG13 Blue Gecko 무선 시스템 온칩(SoC)이 핵심 기능을 제공합니다. EFR32BG13 SoC는 32비트 Arm® Cortex®-M4 코어, 2.4GHz 무선 서브 시스템, 512KB 플래시, 64KB RAM, 아날로그 및 디지털 주변 장치의 광범위한 보완 제품을 결합합니다. SoC는 온칩 하드웨어 암호화 가속기와 함께 메모리 보호 장치가 메모리에 제공하는 것과 동일한 종류의 세부 액세스 제어를 제공하는 보안 관리 장치를 이용하여, 증가하고 있는 엄격한 보안에 대한 수요를 충족시킵니다.

EFR32BG13 SoC는 맞춤형 Bluetooth 하드웨어 설계의 기반으로서 역할을 할 수 있습니다. 개발자는 SoC를 사용할 때 SoC 지원 회로와 같은 설계 요구 사항뿐만 아니라 완료된 설계에 필요한 인증에 대한 책임을 집니다. 이 모듈은 여러 개의 발진기 소스, 두 개의 수정 및 포트 드라이버를 포함하는 필수 지원 회로에 EFR32BG13을 포함하는 완벽하게 인증된 설계를 제공합니다. 동시에 이 모듈은 개발자가 저전력 장치에 대한 지속적인 수요에 대응할 수 있는 다양한 절전 기능을 제공합니다.

이 모듈은 활성 모드에서 87μA(마이크로암페어)/MHz만 사용하고 전체 RAM 잔류가 유지되는 중간 절전 모드에서 1.4μA를 사용합니다. 이 저전력 중간 절전 모드에서 사용하는 시간을 최대한 늘리기 위해 엔지니어는 저에너지 센서 인터페이스와 저에너지 타이머 등의 기능을 활용할 수 있습니다. 엔지니어는 저에너지 센서 인터페이스를 사용하여 프로세서가 중간 절전 모드에 있는 동안 센서 신호를 획득하고 처리하도록 모듈의 통합된 유한 상태 신호 발생기와 아날로그 주변 장치를 프로그래밍할 수 있습니다. 마찬가지로, 저에너지 타이머를 통해 엔지니어가 간단한 파형을 출력하고 프로세서 개입 없이 지정된 기간에 작업을 수행하도록 실시간 클록/카운터를 모니터링할 수 있습니다.

물론 무선 장치의 전력 소비는 일반적으로 무선 서브 시스템의 효율성에 따라 달라집니다. 이 경우 모듈의 2.4GHz 무선 서브 시스템은 수신 모드에서 9.9mA(밀리암페어)만 사용하고 0dBm 출력 전력의 전송 모드에서는 8.5mA만 사용합니다. 여기에 이 모듈은 RF 제어를 통한 절전을 위해 추가 기능을 제공합니다. 개발자는 광대역 RF 에너지가 감지될 때 모듈에서 RF 감지 기능이 프로세서를 깨우도록 프로그래밍할 수 있습니다. 그리고 이 방법을 사용하여 통신 손실 없이 비활성 기간 동안 모듈을 중간 절전 모드로 유지할 수 있습니다. 또한 앞에서 언급한 대로 중간 절전에서 정기적으로 깨워서 캐시된 메시지에 대한 친구 노드를 폴링하는 Bluetooth 5 저전력 노드로 작동할 장치를 구성할 수도 있습니다.

시스템 개발

언급된 모든 모듈 기능은 구현 시 어려움이 거의 없는 것으로 나타났습니다. 개발자는 기존 프로세서를 사용한 설계에 Bluetooth 네트워크 보조 프로세서로 사용할 모듈을 설계에 간단히 추가할 수 있습니다(그림2A). 또는 개발자가 이 모듈을 완전한 시스템 솔루션으로 사용할 수 있습니다(그림 2B). 이 독립형 모드에서 개발자는 자신의 애플리케이션 코드를 모듈의 EFR32BG13 프로세서에서 실행하고 EFR32BG13의 통합 아날로그와 디지털 주변 장치를 간단한 IoT 설계의 신호 획득에 사용할 수 있습니다.

호스트 CPU 및 독립형 CPU에 대한 Bluetooth 보조 프로세서로서의 Silicon Labs BGM13P 모듈 구성도그림 2: 디자이너는 BGM13P 모듈을 호스트 CPU(A)에 대한 Bluetooth 보조 프로세서로 사용하거나 독립형 CPU(B)만 사용하여 애플리케이션 프로그램 실행 및 센서 데이터 취득에 모듈의 통합 EFR32BG13 SoC를 사용할 수 있습니다. (이미지 출처: Silicon Labs)

개발자는 통합된 안테나를 포함하는 모듈 버전인 BGM13P22F512GA-V2를 사용하여 Bluetooth 설계를 더 단순화할 수 있습니다. 보다 까다로운 RF 환경을 대상으로 한 설계의 경우 개발자가 TaoglasFXP74.07.0100A와 같은 Bluetooth 호환 플랫 패치 안테나를 부착할 U.FL 커넥터를 사용하는 버전인 BGM13P22F512GE-V2를 사용할 수 있습니다.

Silicon Labs는 SLWSTK6101C 개발 키트를 사용하여 하드웨어 구현 레벨을 해결합니다. 다양한 Bluetooth 장치용 플러그인 기판과 함께 작동하도록 설계된 SLWSTK6101C는 MacronixMX25R8035F 8Mbit 플래시, Sharp MicroelectronicsLS013B7DH03 128 x 128 LCD 및 Silicon Labs의 Si7021 온도 및 습도 센서를 포함한 대표적인 IoT 설계를 제공합니다. 이 경우 개발자는 BGM13P 모듈을 포함하는 SLWRB4306A 무선 통신 보드를 SLWSTK6101C 기판에 꽂습니다.

완성된 기판은 즉시 생산 가능한 설계일 뿐만 아니라 엔지니어가 플래시, LCD 및 센서와 같은 인터페이스 장치에 대한 다양한 접근 방식을 검사하는 데 사용할 수 있는 입증된 참조 설계를 제공합니다.

예를 들어 8Mbit 플래시와 LCD는 해당 SPI 버스를 통해 모듈에 연결되지만, Si7021 센서의 I2C 인터페이스는 개발 기판의 외부 헤더와 버스를 공유합니다. Silicon Labs는 해당 공유 버스에서 센서를 정상적으로 비활성화하고 전기적으로 격리한 상태로 유지하는 간단한 인터페이스 설계 방법을 시연합니다. 모듈의 PD15 입력이 높아지면 SENSOR_ENABLE 출력이 높아지고, 센서를 3.3 V VMCU 전원 레일과 I2C 버스에 연결합니다(그림 3).

Silicon Labs Si7021 센서 구성도그림 3: Silicon Labs SLWSTK6101C 개발 키트는 하드웨어 평가 플랫폼 제공 외에도, 여기에 표시된 Silicon Labs Si7021 센서와 같은 외부 장치와 상호 작용하는 방법을 보여주는 참조 설계 역할을 합니다. (이미지 출처: Silicon Labs)

공유된 I2C 버스 헤더는 이 플랫폼을 사용한 개발을 지원하도록 설계된 여러 기능 중 유일한 기능입니다(그림 4). 기판은 온보드 J-Link 디버거와 함께 엔지니어가 패킷을 자세히 분석할 수 있는 PTI(패킷 추적 인터페이스)를 제공합니다. PTI는 EFR32BG13 SoC에 구축된 패킷 및 상태 추적 장치에 빌드되어 시스템에서 주고 받은 모든 패킷을 비침해적으로 캡처합니다. Bluetooth 메시와 같은 복잡한 프로토콜을 분석하기 위해 이 패킷 추적 기능은 낮은 레벨의 네트워크 통신 최적화 및 조정에 중요할 수 있는 도구를 제공합니다.

Silicon Labs SLWSTK6101C 키트 구성도그림 4: Silicon Labs SLWSTK6101C 키트는 패킷 추적, 에너지 모니터링 및 낮은 수준의 암 ETM(Embedded Trace Macrocell) 추적을 위한 여러 인터페이스를 제공하여 엔지니어에게 설계 작동 및 성능에 대한 세부 분석을 위한 다양한 도구 세트를 제공합니다. (이미지 출처: Silicon Labs)

네트워크 전문가는 네트워크 최적화를 위해 PTI와 같은 기능을 필요로 하지만, 시스템 개발자는 과도한 전력 소비로 이어질 수 있는 응용 분야의 비효율성을 식별할 수 있는 도구가 필요합니다. 이러한 종류의 응용 분야 레벨에서 전력 최적화를 위해 Silicon Labs의 Simplicity Studio 에너지 프로파일러는 전력 소비에 대한 코드 레벨의 분석을 제공합니다.

패킷 추적 도구와 마찬가지로 에너지 프로파일러는 기본 하드웨어를 이용합니다. 이 경우 기판에는 전류 센서 저항기, 전류 감지 증폭기 및 개발 호스트 시스템에서 액세스할 수 있는 기판의 컨트롤러에 출력을 전달하는 이득 단계로 구성된 전용 에너지 모니터 회로가 포함됩니다(그림 5). 병렬 이득 단계를 통해 에너지 모니터는 두 개의 서로 다른 분해능 레벨, 즉 50μA 이상의 0.1mA 분해능과 250μA 임계값 이하의 1μA 분해능 레벨에서 0.1μA~95mA 사이의 전류를 측정할 수 있습니다.

Silicon Labs BGM13P Bluetooth 모듈 구성도그림 5: BGM13P Bluetooth 모듈에 내장된 전용 에너지 모니터 회로 및 처리 컨트롤러가 0.1μA~95mA의 비침투 전류 측정을 제공할 수 있습니다. (이미지 출처: Silicon Labs)

에너지 모니터 회로가 전류 측정을 생성하는 동안 EFR32BG13에 내장된 낮은 수준의 추적 메커니즘이 정기적으로 프로세서의 프로그램 카운터를 샘플링하여 장치의 직렬 전선 출력 핀에 결과를 출력할 수 있습니다. 에너지 프로파일러는 에너지 모니터 결과와 이 프로그램 추적 출력을 결합하여 장치에서 실행되는 코드에 연결된 에너지 소비량을 실시간으로 표시할 수 있습니다(그림 6).

Silicon Labs Simplicity Studio 에너지 프로파일러 이미지그림 6: Simpleity Studio 에너지 프로파일러는 에너지 모니터 출력과 프로그램 추적 데이터를 결합하여 실제 코드에 연결된 전류 소비량을 실시간으로 표시합니다. (이미지 출처: Silicon Labs)

메시 응용 제품 개발

하드웨어 엔지니어가 개발 키트를 사용하여 하드웨어 설계를 최적화할 수 있음과 동시에 소프트웨어 개발자는 Silicon Labs의 포괄적인 소프트웨어 개발 환경을 이용하여 메시 네트워크 응용 제품을 빠르게 생성할 수 있습니다. Simpleity Studio와 함께 제공된 Silicon Labs의 Bluetooth 5 메시 스택은 특정 메시 리소스를 사용하여 기본 Bluetooth 스택을 확장합니다. 따라서 개발자는 비컨 또는 지점 간 통신과 같은 기존의 Bluetooth 프로토콜에서 전체 메시 토폴로지로 쉽게 이동할 수 있습니다(그림 7).

Silicon Labs Bluetooth 메시 스택 이미지그림 7: Silicon Labs Bluetooth 메시 스택은 메시 레이어(녹색)를 사용하여 이전 Bluetooth 기능(파란색)을 확장하므로, 개발자가 비콘에서 전체 메시 구성에 이르기까지 Bluetooth 기능의 전체 범위를 사용할 수 있습니다. (이미지 출처: Silicon Labs)

Silicon Labs BGM13P 기반 SLWRB4306A 및 SLWSTK6101C 개발 기판과 함께 사용되는 Simplicity Studio를 통해 개발자는 적절한 SDK(소프트웨어 개발 키트)로 환경을 구성할 수 있습니다. Bluetooth 개발을 위해 Studio는 Silicon Labs의 Bluetooth 메시 SDK에 사전에 빌드된 데모 바이너리 및 소스 코드를 함께 제공합니다. 이 환경에서 개발자는 완전한 Bluetooth 메시 응용 제품을 구현하는 샘플 코드를 사용할 수 있습니다.

Bluetooth 메시 네트워크에서 작업을 시연하도록 설계된 샘플 응용 제품은 개발 기판 및 모바일 앱과 함께 작동하여 프로비저닝, 구성 및 응용 분야 관련 사용을 비롯한 일반적인 메시 작업을 개발자에게 안내합니다. 샘플 응용 제품을 배포하기 위해 엔지니어는 연결된 조명 응용 분야에서 조명 또는 스위치 역할을 하도록 별도로 구성된 개발 기판 세트에 Simplicity Studio를 실행합니다. 엔지니어는 샘플 코드 및 하드웨어 작업을 통해 장치 전원 켜기부터 시작하여 일반적인 메시 응용 제품의 각 운영 단계를 더 잘 이해할 수 있습니다.

Silicon Labs의 소프트웨어 아키텍처를 사용한 Bluetooth 작업은 이벤트의 특성을 신호로 보내는 사전 정의된 이벤트 ID를 사용하여 일련의 이벤트로 진행됩니다. 샘플 소프트웨어 패키지에서 전원을 켜거나 재설정할 때 실행되는 main() 루틴은 주 루프(이 경우 두 줄의 코드로 구성됨)를 입력하기 전에 일련의 초기화 루틴을 호출합니다(목록 1).

Copy int main() { #ifdef FEATURE_SPI_FLASH /* Put the SPI flash into Deep Power Down mode for those radio boards where it is available */ MX25_init(); MX25_DP(); /* We must disable SPI communication */ USART_Reset(USART1); #endif /* FEATURE_SPI_FLASH */ enter_DefaultMode_from_RESET(); #if (EMBER_AF_BOARD_TYPE == BRD4304A) LNA_init(); #endif gecko_init(&config); #ifdef FEATURE_PTI_SUPPORT APP_ConfigEnablePti(); #endif // FEATURE_PTI_SUPPORT RETARGET_SerialInit(); /* initialize LEDs and buttons. Note: some radio boards share the same GPIO for button & LED.
   * Initialization is done in this order so that default configuration will be button for those * radio boards with shared pins. led_init() is called later as needed to (re)initialize the LEDs * */ led_init(); button_init(); LCD_init(); while (1) { struct gecko_cmd_packet *evt = gecko_wait_event(); handle_gecko_event(BGLIB_MSG_ID(evt->header), evt); } } 

목록 1: Simpleity Studio는 이벤트 처리 초기화 및 반복을 보여주는 이 메시 조명 주 루틴과 같은 샘플 코드를 포함하여 포괄적인 개발 환경을 제공합니다. (코드 출처: Silicon Labs)

주 루프의 첫 번째 줄에서는 낮은 수준으로 채워진 이벤트 대기열에 이벤트가 나타날 때까지 기다리는 동안 gecko_wait_event() 함수가 차단됩니다. 개발자가 차단 기능을 자주 사용하지 않는 경우도 있지만 Bluetooth 스택이 이 차단 모드에서 저전력 절전 상태를 자동으로 관리하므로 이 방법은 특히 이 경우에 효과적입니다. 차단 대기를 허용할 수 없는 특정 응용 제품 요구 사항에 대해 SDK는 대기열이 비어 있는 경우 다음 이벤트 또는 NULL을 반환하는 비차단 함수를 제공합니다. 그러나 이러한 함수를 사용하여 개발자들은 저전력 절전 관리를 직접 처리할 수 있게 되었습니다.

주 루프의 두 번째 줄에서 핸들러 함수 handle_gecko_event()는 해당 이벤트 ID를 기반으로 하여 최신 이벤트(evt)를 처리합니다(목록 2). 장치 전원이 켜지면 스택에서 시스템 부트 이벤트(gecko_evt_system_boot_id)를 발표합니다. 그런 다음 이벤트 핸들러는 Bluetooth 메시 스택을 초기화하는 gecko_cmd_mesh_node_init()를 포함하여 일련의 초기화 함수를 호출합니다. 나중에 핸들러가 연결된 이벤트 ID로 표시되는 해당 이벤트 유형과 관련된 기능을 제공하기 위해 다른 함수를 호출합니다.

Copy /** * Handling of stack events. Both Bluetooth LE and Bluetooth mesh events are handled here.
 */ static void handle_gecko_event(uint32_t evt_id, struct gecko_cmd_packet *evt) { struct gecko_bgapi_mesh_node_cmd_packet *node_evt; struct gecko_bgapi_mesh_generic_server_cmd_packet *server_evt; struct gecko_msg_mesh_node_provisioning_failed_evt_t *prov_fail_evt; if (NULL == evt) { return; } switch (evt_id) { case gecko_evt_system_boot_id: // check pushbutton state at startup. If either PB0 or PB1 is held down then do factory reset if (GPIO_PinInGet(BSP_GPIO_PB0_PORT, BSP_GPIO_PB0_PIN) == 0 || GPIO_PinInGet(BSP_GPIO_PB1_PORT, BSP_GPIO_PB1_PIN) == 0) { initiate_factory_reset(); } else { struct gecko_msg_system_get_bt_address_rsp_t *pAddr = gecko_cmd_system_get_bt_address(); set_device_name(&pAddr->address); // Initialize Mesh stack in Node operation mode, wait for initialized event gecko_cmd_mesh_node_init(); // re-initialize LEDs (needed for those radio board that share same GPIO for button/LED) led_init(); } break; .
      .
      .
    case gecko_evt_mesh_node_initialized_id: printf(node initialized\r\n); struct gecko_msg_mesh_node_initialized_evt_t *pData = (struct gecko_msg_mesh_node_initialized_evt_t *)&(evt->data); if (pData->provisioned) { .
      .
      .
      } else { printf(node is unprovisioned\r\n); LCD_write(unprovisioned, LCD_ROW_STATUS); printf(starting unprovisioned beaconing...\r\n); gecko_cmd_mesh_node_start_unprov_beaconing(0x3); // enable ADV and GATT provisioning bearer } break; case gecko_evt_mesh_node_provisioning_started_id: printf(Started provisioning\r\n); LCD_write(provisioning..., LCD_ROW_STATUS); // start timer for blinking LEDs to indicate which node is being provisioned gecko_cmd_hardware_set_soft_timer(32768 / 4, TIMER_ID_PROVISIONING, 0); break; case gecko_evt_mesh_node_provisioned_id: _my_index = 0; // index of primary element hardcoded to zero in this example lightbulb_state_init(); printf(node provisioned, got index=%x\r\n, _my_index); // stop LED blinking when provisioning complete gecko_cmd_hardware_set_soft_timer(0, TIMER_ID_PROVISIONING, 0); LED_set_state(LED_STATE_OFF); LCD_write(provisioned, LCD_ROW_STATUS); break; case gecko_evt_mesh_node_provisioning_failed_id: prov_fail_evt = (struct gecko_msg_mesh_node_provisioning_failed_evt_t *)&(evt->data); printf(provisioning failed, code %x\r\n, prov_fail_evt->result); LCD_write(prov failed, LCD_ROW_STATUS); /* start a one-shot timer that will trigger soft reset after small delay */ gecko_cmd_hardware_set_soft_timer(2 * 32768, TIMER_ID_RESTART, 1); break; .
      .
      .
  } } 

목록 2: 개발자는 메시 조명 주 루틴에서 호출된 handle_gecko_event() 이벤트 핸들러 루틴에서 이 코드 조각에 표시된 프로비저닝 이벤트 처리와 같은 주요 설계 패턴에 대해 Silicon Labs 메시 샘플 코드를 검사할 수 있습니다(목록 1 참조). (코드 출처: Silicon Labs)

Bluetooth 메시 네트워크의 주요 이벤트 중 하나가 프로비저닝 프로세스와 연결됩니다. 장치에 전원이 켜지고 초기화 시퀀스가 완료되면 장치가 비컨 모드로 전환되어 프로비저닝할 네트워크에 자신을 알립니다. 프로비저닝이 진행되어 완료(또는 실패)되는 동안 샘플 코드는 개발 키트 LCD와 LED를 사용하여 상태를 제공합니다. 개발자는 각 프로비저닝 상태에 대한 이벤트 핸들러의 코드 블록을 검사하여 이 프로비저닝 시퀀스와 옵션을 빠르게 이해할 수 있습니다.

마찬가지로 소프트웨어 엔지니어는 샘플 핸들러 코드를 응용 분야 레벨의 기능 생성 지침으로 사용할 수 있습니다. 예를 들면, Bluetooth 메시 네트워킹의 주요 개념은 일부 함수 관계를 공유하는 노드를 연결하는 데 게시-구독 모델을 사용하는 것입니다(그림 8).

Bluetooth의 게시-구독 모델 이미지그림 8: 응용 제품 개발자는 Bluetooth의 게시-구독 모델을 사용하여 장치를 하나 이상의 스위치로 제어하는 조명 그룹과 같은 기능 그룹에 결합합니다. (이미지 출처: Silicon Labs)

이 방법으로 여러 스마트 전구가 하나의 스위치 게시자를 구독할 수 있습니다. 최종 사용자가 스위치를 활성화하면 해당 스위치가 ON/OFF 이벤트를 게시합니다. 이 이벤트는 이벤트 핸들러가 적절한 조치를 취하는 가입된 스마트 전구에 메시 네트워크를 통해 종속됩니다. Silicon Labs 샘플 코드는 이 프로세스를 시연합니다. 먼저 메시 연결 스위치(목록 3)에 게시된 켜기/끄기 요청을 시연한 다음, 연결된 조명에 해당하는 응답을 제공합니다(목록 4).

Copy /** * This function publishes one on/off request to change the state of light(s) in the group.
 * Global variable switch_pos holds the latest desired light state, possible values are * switch_pos = 1 -> PB1 was pressed, turn lights on * switch_pos = 0 -> PB0 was pressed, turn lights off * * This application sends multiple requests for each button press to improve reliability.
 * Parameter retrans indicates whether this is the first request or a re-transmission.
 * The transaction ID is not incremented in case of a re-transmission.
 */ void send_onoff_request(int retrans) { uint16 resp; uint16 delay; struct mesh_generic_request req; req.kind = mesh_generic_request_on_off; req.on_off = switch_pos ? MESH_GENERIC_ON_OFF_STATE_ON : MESH_GENERIC_ON_OFF_STATE_OFF; // increment transaction ID for each request, unless it's a retransmission if (retrans == 0) { trid++; } /* delay for the request is calculated so that the last request will have a zero delay and each * of the previous request have delay that increases in 50 ms steps. For example, when using three * on/off requests per button press the delays are set as 100, 50, 0 ms */ delay = (request_count - 1) * 50; resp = gecko_cmd_mesh_generic_client_publish( MESH_GENERIC_ON_OFF_CLIENT_MODEL_ID, _my_index, trid, 0, // transition delay, 0, // flags mesh_generic_request_on_off, // type 1, // param len &req.on_off /// parameters data )->result; if (resp) { printf(gecko_cmd_mesh_generic_client_publish failed,code %x\r\n, resp); } else { printf(request sent, trid = %u, delay = %d\r\n, trid, delay); } } 

목록 3: Silicon Labs 메시 스위치 샘플 응용 제품의 이 코드 조각은 이 이벤트 스트림에 가입된 조명의 상태 변경(켜기 또는 끄기)을 요청하는 데 Bluetooth 5 게시 절차(gecko_cmd_mesh_generic_client_publish) 사용을 보여줍니다. (코드 출처: Silicon Labs)

Copy static void onoff_request(uint16_t model_id, uint16_t element_index, uint16_t client_addr, uint16_t server_addr, uint16_t appkey_index, const struct mesh_generic_request *request, uint32_t transition_ms, uint16_t delay_ms, uint8_t request_flags) { printf(ON/OFF request: requested state=<%s>, transition=%u, delay=%u\r\n, request->on_off ? ON : OFF, transition_ms, delay_ms); if (lightbulb_state.onoff_current == request->on_off) { printf(Request for current state received; no op\n); } else { printf(Turning lightbulb <%s>\r\n, request->on_off ? ON : OFF); if (transition_ms == 0 && delay_ms == 0) { // Immediate change lightbulb_state.onoff_current = request->on_off; lightbulb_state.onoff_target = request->on_off; if (lightbulb_state.onoff_current == MESH_GENERIC_ON_OFF_STATE_OFF) { LED_set_state(LED_STATE_OFF); } else { LED_set_state(LED_STATE_ON); } } else { // Current state remains as is for now lightbulb_state.onoff_target = request->on_off; LED_set_state(LED_STATE_TRANS); // set LEDs to transition mode gecko_cmd_hardware_set_soft_timer(TIMER_MS_2_TIMERTICK(delay_ms + transition_ms), TIMER_ID_TRANSITION, 1); } lightbulb_state_store(); } if (request_flags & MESH_REQUEST_FLAG_RESPONSE_REQUIRED) { onoff_response(element_index, client_addr, appkey_index); } else { onoff_update(element_index); } } 

목록 4: Silicon Labs 메시 조명 샘플에는 스위치에서 게시된 요청에 대한 응답으로 LED를 켜거나 끄는 이 함수와 같은 특정 응용 분야의 레벨 이벤트에 대한 루틴이 포함되어 있습니다(목록 3 참조). (코드 출처: Silicon Labs)

Silicon Labs는 노드 개발을 위한 SDK 및 Bluetooth 스택과 함께 모바일 장치에 연결하는 Bluetooth 메시 퍼즐의 마지막 부분도 제공합니다. 대부분의 모바일 장치는 Bluetooth 4를 지원하며, 해당 무선 통신에서 Bluetooth 5 요구 사항을 지원할 수 있지만 Bluetooth 5 메시 레이어에 대한 스택을 지원하지 않습니다. Silicon Labs는 모바일 앱 개발자에게 메시 기능을 제공하는 추가 소프트웨어 스택을 제공함으로써 이러한 제한을 해결합니다(그림 9).

Silicon Labs의 메시 스택 이미지그림 9: 개발자는 모바일 장치용 Silicon Labs의 메시 스택을 해당 모바일 앱에 추가하여 Bluetooth 5 메시 네트워크에서 Bluetooth 4 모바일 장치를 사용할 수 있습니다. (이미지 출처: Silicon Labs)

결론

Bluetooth 5 메시 네트워킹은 이미 지점 간 통신에 스마트폰 및 기타 모바일 장치를 활용하는 다양한 응용 분야에 자연스러운 전환 기능을 제공합니다. 하지만 Bluetooth 5 메시 네트워킹의 배포는 하드웨어와 소프트웨어 설계, 특히 IoT와 같이 전력이 제한된 응용 분야 모두에서 중요한 문제를 야기합니다. 또한 하드웨어 엔지니어는 최소 실장 면적과 저전력에 대한 요구 사항을 충족해야 하고, 소프트웨어 엔지니어는 복잡한 통신 프로토콜을 실행하기 위해 최소한의 리소스를 사용하는 소프트웨어를 구축해야 합니다. 개발자는 BGM13P 모듈, SLWSTK6101C 개발 보드, 그리고 이 두 개의 노드 및 모바일 장치를 위한 Bluetooth 스택을 통해 Bluetooth 메시 네트워킹을 사용하는 응용 제품을 신속하게 개발할 수 있는 포괄적인 플랫폼을 제공받습니다.

 
DigiKey logo

면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.

게시자 정보

DigiKey 북미 편집자