:::: MENU ::::
Browsing posts in: Wireless

BLE over UART throughput

Adafruit사의 Feather m0 bluefruit 보드의 UART to BLE Throughput 측정. PC측에는 nRF Connect 앱인 BLE 앱을 사용함.

이 앱에서 연결을 하고 데이터를 수신한다. 보내는 측의 로그를 확인하면 대략 4.71KB/S 정도 나오는데, 핸드폰 앱에서 확인해보니 4KB/S 정도 나옴.

성능도 중요하지만 무선이므로 데이터 손실이 없을 수 없으며, 찾아보니 그 이유중 하나는 다음과 같다. (출처 – https://interrupt.memfault.com/blog/ble-throughput-primer)

Counterintuitively, even though the Link Layer of BLE is reliable, packet loss is still something to be concerned about for BLE. This is because many many stacks drop data within the software stack. For example, BLE messages get queued up in the stack and when the heap holding the packets runs out of memory, some stacks will silently drop data. This means if you are sending large amounts of data over BLE you will usually want to add some sort of reliability layer that can detect & retransmit messages when data is dropped. The way this is implemented can have sizeable impacts on throughput. For example, if you have designed your own protocol on top of L2CAP or GATT and every message sent requires an acknowledgement before another message is sent, you’ll typically wind up adding a connection interval worth of latency getting the data sent out, effectively halving the max throughput which can be achieved.

즉 BLE Link Layer는 reliable하지만 BLE stack에서 힙의 메모리가 부족할 때 일부 스택은 자동으로 데이터를 삭제된다. 따라서 상위레벨의 프로토콜에서 재전송 기법을 사용해야 함.

Mitigation of Data Packet Loss in Bluetooth Low Energy-Based Wearable Healthcare Ecosystem 이 문서의 내용 참고

 


RF에서 RX Sensitivity 란?

RX Sensitivity
– 수신기가 감지할 수 있는 최소 신호 강도를 측정한 것. 즉 식별이 가능하고, 처리할 수 있는 가장 약한 신호를 알려준다.
– RX Sensitivity는 dBm으로 표시
– 신호의 미약한 정도를 나타내므로 신호의 전력 레벨이 낮을수록 좋다.
– 예를 들어 -90dBm의 수신기 감도는 -80dBm보다 낫다. 즉, -90dBm 수신기가 더 민감하고 더 낮은 전력 신호를 해석할 수 있음을 의미한다.

Receiver Sensitivity Requirements for modules:
– LoRa: up to -130 dBm
– Cellular: up to -120 dBm
– Bluetooth: -70 dBm to -100 dBm
– ZigBee: -85 to -92 dBm
– Wi-Fi: -40 dBm to -80 dBm

TX Power
TX Power는 worst-case에서도 적어도 이 정도의 전송 전력을 보장한다는 수치이다.


nRF52 Segger Embedded Studio 설정 – CMSIS Configuration Wizard

노르딕에서 제공하는 예제코드의 경우 SDK 설정이 sdk_config.h에서 이루어 진다. 문제는 이 파일의 사이즈가 크고 #ifdef 등으로 설정이 되어 있어서 파일 자체를 보기가 불편하다. 그래서 이 설정을 쉽게 하는 툴이 제공이 되는데, 기본 SES 설정에는 없어서 따로 설정을 해야 한다.

  1. Go to File -> Open Studio Folder… -> External Tools Configuration.
  2. The tools.xml file will be opened in the editor.

다음의 코드를 삽입한다

<item name=“Tool.CMSIS_Config_Wizard” wait=“no”>
     <menu>&amp;CMSIS Configuration Wizard</menu>
     <text>CMSIS Configuration Wizard</text>
     <tip>Open a configuration file in CMSIS Configuration Wizard</tip>
     <key>Ctrl+Y</key>
     <match>*config*.h</match>
     <message>CMSIS Config</message>
     <commands>
         java -jar &quot;$(CMSIS_CONFIG_TOOL)&quot; &quot;$(InputPath)&quot;
     </commands>
</item>

참고 – https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk5.v15.0.0%2Fsdk_config.html


Simplicity Studio 5 – 맥에서 이슈 해결

Silab 사의 개발 환경인 Simplicity Studio 5 를 맥(Big Sur)에서 사용시 프로젝트를 구성을 할 때 Bluetooth Configurator 가 제대로 안되고 에러가 난다.

An internal error occurred during: “Generating apack_btConfig for project_name“.

Failed to generate setup apack_btConfig exited with 134:

dyld: Library not loaded: /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation

  Referenced from: /Applications/Simplicity Studio.app/Contents/Eclipse/developer/adapter_packs/python/bin/python3

  Reason: image not found

문제를 해결하기 위해서는 /Applications/Simplicity Studio.app/Contents/Eclipse/developer/adapter_packs/python/bin/ 이 위치에 설치된 파이썬을 사용하지 않고 Python 3.6버전을 사용하고 이 버전에 심볼릭 링크를 거는 것이다.

1.  Create a python 3.6 anaconda environment. Activate it and find the location of python in the env.

In my case, it is /Users/user_name/opt/anaconda3/envs/studio/bin/python

2. Soft link all python files to that location in the following location.
/Applications/Simplicity Studio.app/Contents/Eclipse/developer/adapter_packs/python/bin

ln -s /Users/yaoyu/opt/anaconda3/envs/studio/bin/python ./python

ln -s /Users/yaoyu/opt/anaconda3/envs/studio/bin/python ./python3

ln -s /Users/yaoyu/opt/anaconda3/envs/studio/bin/python ./python3.6

참고: https://www.silabs.com/community/software/simplicity-studio/forum.topic.topic.15.15.html/macos_big_sur_support-UO87 

 


SES(Segger Embedded Studio)에서 NRF_LOG_INFO 문제

SES환경에서 NRF_LOG_INFO(“Blinky example started!!!”)와 같은 같은 디버그 문구가 Debug Terminal에 보이지 않는 이슈 해결 방법

sdk_config.h 파일에서 다음과 같이 기존에 1로 설정되어 있던 값을 0 으로 수정한다.

#define NRF_LOG_DEFERRED 0
#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 0

#define NRF_LOG_BACKEND_RTT_ENABLED 1
#define NRF_LOG_ENABLED 1
이 설정도 되어 있어야 함.

그런데 다음 설정은 0으로 되야 함
#define NRF_LOG_BACKEND_UART_ENABLED 0

그리고 보드가 바뀌면 아래 핀 설정도 같이 해야 함.
#define NRF_LOG_BACKEND_UART_TX_PIN 6


Bluetooth 보안 문제 – SweynTooth

블루투스 소프트웨어 스텍에서 발견된 문제들. 다수의 칩 벤더들의 SDK에 문제(deadlocks, crashes and buffer overflows or completely bypass security)가 있어서 패치가 제공되었다.

Table 1: Vulnerabilities type and affected vendors




Type
Vulnerability Name
Affected Vendors
CVE




Crash
Link Layer Length Overflow
Cypress
CVE-2019-16336 (6.1)
NXP
CVE-2019-17519 (6.1)



Truncated L2CAP Dialog Semiconductors CVE-2019-17517 (6.3)



Silent Length Overflow Dialog Semiconductors CVE-2019-17518 (6.4)



Public Key Crash Texas Instruments CVE-2019-17520 (6.6)



Invalid L2CAP Fragment Microchip CVE-2019-19195 (6.8)



Key Size Overflow Telink Semiconductor CVE-2019-19196 (6.9)




Deadlock
LLID Deadlock
Cypress
CVE-2019-17061 (6.2)
NXP
CVE-2019-17060 (6.2)



Sequential ATT Deadlock STMicroelectronics CVE-2019-19192 (6.7)



Invalid Connection Request Texas Instruments CVE-2019-19193 (6.5)




Security Bypass Zero LTK Installation Telink Semiconductor CVE-2019-19194 (6.10)



Table 2: Vulnerabilities and SDK versions of the affected SoCs.* indicates extra affected SoCs reported by the vendor not tracked by our team.





Vuln.
SoC Vendor
SoC Model
SDK Ver.
Qualification ID(s)





BLE Version 5.0/5.1
6.1,6.2 Cypress (PSoC 6) CYBLE-416045 2.10 99158
6.5,6.6 Texas Instruments CC2640R2 3.30.00.20 94079
6.9,6.10 Telink TLSR8258 3.4.0 92269, 136037
6.7 STMicroelectronics WB55 1.3.0 111668
6.7 STMicroelectroncis BlueNRG-2 3.1.0 87428, 106700, 94075
6.4 Dialog DA1469X* 10.0.6 100899
6.3 Dialog DA14585/6* 6.0.12.1020 91436





BLE Version 4.2
6.1,6.2 Cypress (PSoC 4) CYBL11573 3.60 62243, 136808, 79697, 82951, 79480
6.1,6.2 NXP KW41Z 2.2.1 84040
6.4 Dialog DA14680 1.0.14.X 87407, 84084, 71309, 75255





BLE Version 4.1
6.5 Texas Instruments CC2540 1.5.0 23454, 127418
6.3 Dialog DA14580 5.0.4 83573
6.8 Microchip ATSAMB11 6.2 73346





2.1 Attacks on IoT

Table 3: Products verified to be vulnerable





Product
Category
BLE SoC
Vulnerability
Impact





Eve Energy Smart Home
DA14680
(6.4) Silent Length Overflow
Crash
August Smart Lock Smart Home
DA14680
(6.4) Silent Length Overflow
Crash





Fitbit Inspire
Wearables
CY8C68237
(6.1) LL Length Overflow
Crash
(6.2) LLID Deadlock
Crash





CubiTag Gadget Tracking CC2640R2
(6.6) Public Key Crash
Deadlock





eGeeTouch TSA Lock Security CC2540
(6.5) Invalid Connection Request
Deadlock





문제가 있는 제품들

출처: https://asset-group.github.io/disclosures/sweyntooth/


코인셀 배터리 사용시 시스템 설계

코인셀 배터리의 경우 용량도 중요하지만 한번에 땡겨서 쓸 수 있는 전류도 중요하다. 하지만 이 값은 일반적으로 충분히 크지 않다.

따라서 코인셀 배터리의 용량만큼 잘 쓰려면

  • 코인셀에 병렬로 cap을 달아라. 47~100uF, 슈퍼캡?
  • 전류소모가 낮은 부품으로 구성 (당연한 얘기)
  • FEP(Functional End Point) 마진 확보 : 즉 구동 전압이 낮은 칩 사용
  • 테스트 결과를 보면 전류를 갑자기 땡기는 구간이 짧아야하고, 휴지기간이 길어야 한다.
  • 시스템을 설계할때 동시에 구동되는 부품을 줄이도록 설계: 즉 RF칩이 TX를 할때 모터를 구동하지 않는 다거나… (LCD, 모터, RF칩, LED) <= 이게 중요할 듯

참고문헌


Thinger.io 서비스 사용하기

IoT 서비스 중 하나인 Thinger.io를 사용해 봤다.

아두이노 라이브러리를 제공을 해서 쉽게 ESP32에서 사용이 가능하다.

  • 먼저 아두이노 라이브러리 매니저에서 thinger로 검색을 해서 라이브러리를 설치를 하고 ESP32 예제를 연다.
  • 물론 먼저 이 서비스에 가입을 하고, USERNAME, DEVICE_ID, DEVICE_CREDENTIAL을 define 문에 정의한다.

#define USERNAME “*********”

#define DEVICE_ID “*********”

#define DEVICE_CREDENTIAL “*********”

  • 접속하고자 하는 SSID와 SSID_PASSWORD를 입력한다.

#define SSID “*********”  //your wifi SSID

#define SSID_PASSWORD “*********” // your wifi password

  • 아래 코드처럼 seup() 함수에 입출력을 정의하면, 서비스에서 이 값을 읽어서 대쉬보드에서 읽어서 데이터를 시각화 해준다.

// digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)

thing[“BuiltInLed”] << digitalPin(2);

// resource output example (i.e. reading a sensor value)

thing[“dht11”] >> [](pson& out){

      out[“temperature”] = dht.readTemperature();

      out[“humidity”] = dht.readHumidity(); 

}

 


ESP32에 Nabto 사용하기

이전 포스트에서 Nabto 사용법을 다뤘는데, 이번 포스팅에서는 ESP32에 Nabto를 포팅하여 테스트를 하려고 한다.

이미 Nabto의 github에 ESP32에 포팅된 코드가 있고 관련 블로그가 있다. 이 블로그의 내용을 참고해서 다음과 같이 진행을 한다.

  • 먼저 깃헙에서 코드를 클론한다.

$ git clone –recursive https://github.com/nabto/unabto-esp32.git

  • unabto-esp32로 이동을 해서 menuconfig를 하여 보드의 시리얼 설정을 한다.
  • 보드가 접속할 AP의 wifi 정보와, Nabto ID, Nabto Key값을 설정한다.
  • 이렇게 설정이 끝나면 다음과 같이 make, flash, monitor명령을 써서 업로드한 코드가 동작을 하는 것을 볼 수 있다.

$make -j5 flash monitor

  • 마지막으로 Google Play and Apple’s App Store. 에서 앱을 다운로드해서 디바이스를 찾아서 등록을 하면 원격에서 디바이스의 정보를 모니터링 및 컨트롤이 가능하다.

M5Stack with AskSensors

M5Stack은 ESP32기반의 디바이스이며, AskSensors는 IoT 디바이스로 부터 데이터를 받아서 그래프 형태로 보여주는 IoT 플랫폼이다.

M5Stack

ESP32 기반의 개발툴로 가로 세로  5cm라서 M5Stack이라고 이름이 붙여졌다고 한다.

AskSensors

AskSensors is an IoT platform designed to be the easiest application on the market, allowing users to connect, visualize and analyze their sensors data over the cloud. In this tutorial, we’ll be learning the basics you need to get started with askSensors, starting from creating account to visualizing data in graphs.

M5Stack으로 AskSensors에 데이터 보내기

M5Stack에 DHT12센서를 연결하여 온도, 습도 정보를, AskSensors에 연결해서 데이터를 그래프로 보는 형태의 구성은 다음과 같은 형태로 진행을 한다.

AskSensors 설정

설정은 간단하다. 서비스에 가입을 하고 새로운 센서(New Sensor를 클릭)를 만든후 모듈을 생성(모듈 탭에서 Add 버튼 클릭)한다. 여기서 모듈은 하나의 센서의 값을 받는 단위라고 생각하면 된다. 그러면 API 키가 생성이 되면 이 API 키의 end point에 데이터를 쓰면 된다.

AskSensors

모듈1에 10이라는 값을 쓴다면 다음과 같이 데이터를 보내면 된다.

https://asksensors.com/api.asksensors/write/MTWN7AQOLWJNEIF8RGMAW5EGKQFAHN2K?module1=10

Data Visualization

“Show graph”를 클릭하면 데이터를 그래프로 볼 수 있다.

AskSensors graph

실제 데이터

temp & humidity

테스트를 해보니 AskSensors는 ThingSpeak와 거의 같은 서비스인데 아직 베타버전. 아래 그림은 같은 데이터를 ThingSpeak에서 본 그래프이다.

ThingSpeak

참고


Pages:1234