물티
프로젝트 상태 :
주요 아이디어는 STM32WB55 NUCLEO 보드에서 SEMTECH LORA SX1272MB2DAS SHIELD를 사용할 수 있다는 것입니다. 불행히도이 방패 용 ST (I-Cube-Lrwan)가 사용할 수있는 코드는 몇 개의 Nucleo 보드 (L053RG, L073RZ, L152RE 및 L476RG)에서만 사용할 수 있습니다.
파생 상품 아이디어는 Lora와 Ble과 결혼하는 것입니다. 요즘 많은 IoT 객체는 여러 가지 이유 (설정, Provisonning, Fuota, ...)에 액세스 할 수 있지만 대부분 스마트 폰과 호환되기 때문입니다. STM32WL 세리에는 BLE가 없으며 STM32WB 세리에는 LORA 기능이 없습니다.
글쎄, 나는 SX1272 및 WB55와 쌍을 만들고 유연한 IoT 프로젝트를위한 두 가지 칩 조합을 허용 할 기회가있었습니다. WB55 세리에는 BLE에 국한되지 않습니다. 공동 프로세서 펌웨어는 Zigbee 및 Openthread와 같은 2.4GHz 옆으로 프로토콜을 처리 할 수 있습니다. 따라서 장거리와 단거리 RF 통신의 조합은 흥미 롭습니다.
이 프로젝트는 기존 코드 및 라이브러리의 포트 일뿐 만 아니라 해결해야 할 기술적 인 문제가 있으므로 일부 개발자에게 설정 시간을 절약 할 수 있습니다.
다가오는 LORA 2.4GHz에서는 이것이 과도기 작업으로 간주됩니다. SX1280은 단일 칩으로 단기 및 장거리 통신을 결합합니다. 자세히 살펴보고 싶을 수도 있습니다.
그것은 쉬운 사람입니다. SEMTECH SX1272MB2XAS LORA MBED 방패는 Arduino 호환 방패이며 Nucleo 보드에는 해당 커넥터가 있습니다. 기술 브리프 :
언급했듯이 STM32WB55 Serie는 여기서 목표이며 P-Nucleo-WB55RG는 함께 플레이하기에 좋은 보드입니다. 기술 브리프 :
일단 연결되면 (똑똑하지 않음) 여기에 결과 객체가 있습니다. 

보드에 전원을 공급하기 전에 안테나를 꽂는 것을 잊지 마십시오. RF 앰프 출력을 손상시킬 수 있습니다 (다소 낮은 전력이지만). 물론 탁구에는 두 가지를 구매하는 것이 약간 필요합니다.
| 패키지 | 버전 |
|---|---|
| STM32CUBEIDE | 1.7 |
| STM32CUBEMX | 6.3.0 |
| FW_WB | 1.12.1 |
| i-cube-lrwan | 2.0 |
코드의 주요 부분은 ST 및 SEMTech Sublicensing에 의해 다루어집니다. 적절한 용도로 각 계약을 체크 아웃하십시오.
| 요소 | 저작권 | 특허 |
|---|---|---|
| 원래 응용 프로그램 소스 | stmicroelectronic | ST 라이센스 계약 SLA0044 |
| Lorawan® 스택 | semtech | BSD는 SEMTech 부품에 대한 라이센스를 수정했습니다 |
| Cortex®-M CMSIS | Arm Ltd | BSD-3-Clause 또는 Apache 라이센스 2 |
내가 가장 좋아하는 개발 환경은 Linux이지만 Mac 및 Windows에서도 ST 도구를 사용할 수 있습니다. 처음 두 개는 설정하기 쉽고 일반적으로 문제 나 드라이버 문제가 없습니다. 글쎄, Real Tech Savvy는 이미 그것을 알고 있습니다.
나는 IDES의 훌륭한 팬은 아니지만 STM32Cudeide는 OK 및 ST 플러그인이 도움이되었습니다 (MX, 소프트웨어 확장 다운로드, ...). STMICRO는 일부 LORA 방패 용 소프트웨어 확장 패키지를 제공합니다. 위에 연결된 바와 같이 그것은 I-Cube-Lrwan이며 저수준 SX1272 드라이버 (SPI를 통해) 및 Lorawan 스택 (1.0.3 호환)과 같은 예제 프로젝트 및 라이브러리를 포함합니다.
이 프로젝트는 종속성없이 STM32cudeide에서 쉽게 열 수 있습니다. 모든 코드는 ST에서 WB 또는 Lorawan Firmare를 설치할 필요가 없습니다. 프로젝트를 열고 구축하십시오 (Linux 및 MacOS에서 테스트). 그러나 CPU2 용으로 설치된 BLE 스택 펌웨어가 필요합니다. 여기에서 stm32wb5x_ble_stack_full_fw.bin 이 플래시되었습니다. 모든 스택 펌웨어는 프로젝트/STM32WB_COPRO_WIRELESS_BINARIES/STM32WB5X STM32CUBEWB 펌웨어 패키지의 디렉토리 및 보드를 프로그래밍하는 방법에 제공됩니다. 한 번 수행해야합니다.
전체 실험에는 몇 가지 추가 도구가 필요했습니다. Nordic Semiconductor의 Desktop 3.7.0 (Linux, Mac 및 Windows에서 제공)에 NRF Connect와 함께 NRF52840 USB Dongle을 사용하여 BLE 연결을 테스트했습니다. 나는 스마트 폰이 그렇게 할 수 있다는 것을 알고 있습니다. iOS 또는 Android에서 LightBlue를 사용하지만 UUID 또는 장치 이름을 엉망으로 만들면 플랫폼이 캐시 된 데이터로 손실되는 경향이 있으므로 Nordic과 같은 개발 도구로 무슨 일이 일어나고 있는지 알아 내고 싶습니다.
Lorawan 부분의 경우 TTN은 훌륭하고 저렴한 Lorawan Gateway를 구매하기로 결정했습니다. 게이트웨이는 TTN 서비스로 하드 코딩되었지만 자신의 LN에 연결하는 방법이 있어야합니다.
그것이 첫 번째 단계였습니다. 일을 작동시키고 낮은 레벨 RF 전송 예제를 선택했습니다. ST/SEMTECH 코드를 포팅하는 것은 WB55를 재구성하는 것을 다루는 문제였습니다.
Nucleo WB55 보드와 SX1272MB2DAS SHIELD 간의 핀 매핑 :
| SX1272MB2DAS | P-Nucleo-STM32WB55 | Arduino 커넥터 핀 이름 |
|---|---|---|
| DIO0 | PC6 | D2 |
| dio1 | PA10 | D3 |
| dio2 | PC10 | D4 |
| DIO3 | PA15 | D5 |
| NSS | PA4 | D10 |
| SCLK | PA5 | D13 |
| 된장 | PA6 | D12 |
| 모시 | PA7 | D11 |
| 다시 놓기 | PC0 | A0 |
그래서 처음으로 호환되지 않는 것은 없습니다. SPI1 핀 세트 매치, NSS 및 재설정 핀도 괜찮습니다. 그러나 여기 IRQ 라인이있는 첫 번째 히프가 있습니다. PC6은 exti6 IRQ 라인 (exti9_5_irqn)을 사용하지만 괜찮지 만 PA10, PC10 및 PA15는 Exti15_10_irqn의 동일한 exti irq 라인을 공유합니다.
따라서 무선 인터페이스 정의는 Nucleo-WB55 보드 (SX1272MB2DAS_CONF.H)와 일치하도록 수정되었습니다. 그리고 IRQ 핸들러는 해당 SX1272 IRQ 핸들러를 호출하기 전에 GPIO (DIOX) 상태를 점검하도록 수정되었습니다 (STM32WBXX_IT.C 소스 파일 확인).
RTC에는 클록 소스가 LSE로 설정되어 있습니다.
원래 프로젝트 파일 레이아웃도 약간 수정되었습니다. 원본 파일의 통합은 프로젝트 변경 가능성을 보존하기 위해 MX 생성 프로젝트 (SX1272.IOC)에서 이루어졌습니다. 그러나 상충되는 코드가 생성 될 수 있으므로 신중해야합니다.
이 코드로 두 개의 보드를 프로그래밍하는 것이 작동하며 예상대로 Ping 메시지에 대한 Pong 응답을받는 첫 번째 보드는 마스터 가 됩니다. LED 상태가이를 반영했습니다 (이전에 원래 코드에서 계획된대로). 하나는 짧은 시간 후 녹색 LED가 깜박 거리는 곳에서 빨간색을 깜박입니다 : 비디오.
BLE 코드는 완전히 MX 코드입니다. MX 프로젝트에서 많은 것들이 올바르게 설정되어야하기 때문에 즉시 작동하는 것이 간단하지 않았습니다 (별도의 기사). 나는 그 목적을 위해 BLE 테스트 프로젝트를 별도로 설정했습니다. 일단 작동하면 코드를 LORA 프로젝트에 병합하여 두 개를 나란히 작동시킵니다.
따라서 BLE 테스트 소프트웨어는 HRS (심박수 센서) 주변 코드 일뿐입니다. HW_TS (Hardware Timer Server)라고하는 완전히 다른 타이머 프레임 워크를 기반으로합니다. SEMTECH LORA 라이브러리는이 방법을 기반으로하는 것이 아니라 HAL RTC 드라이버를 기반으로 한 STM32_TIMER 유틸리티를 기반으로합니다. 유틸리티 라이브러리와 RTC 어댑터를 제거하여 전체 프로젝트가 HW_T에만 의존합니다. LORA 라이브러리는 실제로 중간 API (Timer.h)에 의존하여 hw_ts를 대신 사용하기 쉽습니다. 반면에 Ping Pong 응용 프로그램은 이전 유틸리티 라이브러리에 의존합니다. 해당 부분의 몇 가지 변경으로 전체 코드가 HW_TS에만 의존하게 만들었습니다.
Ping Pong 응용 프로그램과 BLE 코드로 정의 된 TaskID를 병합해야합니다. 다행스럽게도 두 사람은 STM32_Sequencer 유틸리티를 사용합니다. 올바르게 완료되면 STM32WB55 보드에서 Lora Ping Pong 응용 프로그램 과 HRS BLE 응용 프로그램을 동시에 완벽하게 실행했습니다.
App_ble.c 코드를 수정하여 광고 된 (가시적) 이름은 STM32 UDN을 기반으로하므로 동시에 실행되는 보드를 구별 할 수 있습니다.
유용한 데모의 경우 전용 GATT 서비스를 작성하여 두 보드 모두 BLE를 통해 심문을받을 수 있으므로 LORA 노드가 어떤 역할을하는지 (마스터 또는 슬레이브) Ping/Pong 수신 수를 알 수 있습니다. 이를 위해 나는 BLE 코드를 약간 적응 시켰으므로 Blue LED는 BLE 연결 상태를 반영합니다. 사용자 정의 서비스 (MX에 의해 생성되지 않고 너무 지저분 해지지 않음), 두 가지 특성이 있습니다. 하나는 노드 역할 (Pingpong 동기화 후 마스터 또는 슬레이브)과 수신 된 핑 프레임 (슬레이브 노드) 또는 Pong 프레임 (마스터 노드)의 카운터 인 다른 특성을 가지고 있습니다. 다음은 두 개의 동기화 된 보드에 연결된 NRF Connect의 스크린 샷입니다. 
그렇게했을 때, 나는 다음 단계 인 BLE에 의해 제어되는 약간 다른 LORA 응용 프로그램에서 더 많은 시간을 보내는 것을 선호했습니다.
Lorawan Stack은 I-Cube-Lrwan 확장 패키지에 제공된 Semtech의 스택입니다. 최종 장치에 LORA Alliance 인증이 필요한 경우 1.0.3을 준수하며 인증 소프트웨어 패키지를 포함합니다.
다시, 코드는 BLE 스택과 다른 RTC 래퍼에 의존하므로이를 위해 수정되었습니다. 초기 HW 타이머 서버 설정이 두 스택을 동시에 실행하기에는 너무 제한되어 있기 때문에 타이머 수가 증가했습니다 (수정 된 IOC 후에 HW_IF.H 파일이 변경됨).
원래의 예인 Lorawan End Node는 매우 완전한 데이터 세트를 보냅니다. 테스트 프레임을 간단한 텍스트로 크게 줄였습니다.
장치는 OTAA를 사용하여 네트워크에 가입하도록 설정되었으므로 Deveui, Coineui 및 Appkey의 3 가지 요소가 필요합니다. Deveui는 하드웨어 장치의 고유 식별자이며 STM32 "Serial Number"에서 구축되었습니다. choineui (또는 이전 appeui) 식별자는 서버 측의 응용 프로그램 분리에 사용됩니다. AppKey는 MUT가 매우 비밀리에 유지되는 매우 중요합니다 (AES128 키). 소스 코드는 임의로 최종 사용을 위해 변경 해야하는 값으로 설정했습니다. Secrecy는 Sectech Code에서 Section Element API를 사용하여 수행됩니다.이 경우 가상 SE이지만 실제 제품을 사용하는 경우 매우 편리합니다.
choineui와 appkey는 se-identity.h 파일로 하드 코딩되어 있습니다 ( lorawan_app_key 및 lorawan_nwk_key는 OTAA의 값이 동일 해야하며 , 후자는 마이크를 계산하는 데 사용되며 LNS에서는 결합 레퀴스트가 유효해야합니다).
TTN 및 TTIG 게이트웨이로 테스트하면 다음과 같이됩니다.

선언적 부분.

두 보드가 각각의 가입 레큐에서 긍정적 인 답변을 얻었을 때.
노출을 위해 특별한 GATT 서비스가 작성되었습니다.
| 기인하다 | 입장 | 논평 |
|---|---|---|
| 상태 | 읽다 | JoinRequest가 완료되었는지 여부 |
| Deveui | 읽다 | 계산 된 Deveui의 읽기 |
| joineui | 읽다 | 하드 코딩 된 choineui/appeui의 읽기 |
| 데이터 | 쓰다 | 전송 될 데이터 (16 바이트 최대). "STM32WB55 HERE!" |
| 기간 | 쓰다 | 데이터가 전송되는 초의 기간 (기본값은 10 초) |
| RSSI | 읽다 | 다운 링크 메시지가 수신되면 업데이트되었습니다 |
| SNR | 읽다 | 다운 링크 메시지가 수신되면 업데이트되었습니다 |
참고 : 기간을 엉망으로 만들지 않으면 1%의 듀티 사이클 제한이 있습니다. 기본 설정을 사용하면 모듈은 10 초마다 15 바이트를 보냅니다. SF7BW125에서 이것은 ~ 7 초의 최저 기간에 수행 할 수 있습니다.
여기에 연결될 때 노출 된 특성의 예시 :

계속하기 위해