:::: MENU ::::

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


ESP 빌드시 문제 해결

ESP32 가 빌드는 되는데 flashing이 다음과 같은 에러메시지로 안되는 경우

Traceback (most recent call last):
File “esptool.py”, line 57, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports.py”, line 29, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports_posix.py”, line 31, in <module>
File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
File “serial/tools/list_ports_osx.py”, line 32, in <module>
ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found
Failed to execute script esptool

기존 esptool을 esptool.py로 다음과 같이 변경을 하면 해결이 된다.

copy /Users/XXXXX/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/esptool.py
to /Users/XXXXX/Library/Arduino15/packages/esp32/tools/esptool_py/2.6.1/esptool.py

chmod +x esptool.py

그리고 /Users/XXXXX/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/platform.txt 파일을 열어서 다음과 같이 수정한다.
tools.esptool_py.cmd=esptool -> tools.esptool_py.cmd=esptool.py

platform.txt 파일을 수정하고 Arduino를 재시작


ECG – ADS1292 module test

심장의 ECG신호를 측정할 수 있는 ADS1292모듈을 테스트해 봤다. 먼저 Arduino Uno를 가지고 테스트를 해서 신호가 제대로 나오는 지를 확인한다.


신호의 출력값은 Arduino Plotter를 이용해서 확인을 한다. 다음 스텝은 이 값을

1) SeeedStudio 의 Wio Terminal같은 디스플레이가 있는 디바이스에서 진행을 하거나,

2) 출력값을 BLE를 이용해 웹에서 Plot을 하거나

3) WiFi를 이용해서 서버에서 데이터를 받아서 디스플레이를 하는 3가지 형태로 진행을 할 예정~


SPI 핀 네이밍

마스터, 슬레이브의 이름에서 주는 주종관계 때문에 그동안 별 의식없이 쓰여왔던 이름들이 바뀌었다.

MOSI – COPI

MISO – CIPO

이 2가지만 기억하면 될 것 같다.

New signal names:

  • SDO – Serial Data Out. An output signal on a device where data is sent out to another SPI device.
  • SDI – Serial Data In. An input signal on a device where data is received from another SPI device.
  • CS – Chip Select. Activated by the controller to initiate communication with a given peripheral.
  • COPI (controller out / peripheral in). For devices that can be either a controller or a peripheral; the signal on which the device sends output when acting as the controller, and receives input when acting as the peripheral.
  • CIPO (controller in / peripheral out). For devices that can be either a controller or a peripheral; the signal on which the device receives input when acting as the controller, and sends output when acting as the peripheral.
  • SDIO – Serial Data In/Out. A bi-directional serial signal.

Deprecated signal names:

  • MOSI – Master Out Slave In
  • MISO – Master In Slave Out
  • SS – Slave Select
  • MOMI – Master Out Master In
  • SOSI – Slave Out Slave In

Signal names unchanged:

  • SCK – Serial Clock. The clock for the bus generated by the controller.


OSHW 현황 2021

미국의 OSHW협회에서 발간한 THE STATE OF OPEN SOURCE HARDWARE 2021. – https://stateofoshw.oshwa.org/

  • OSHW가 여러 분야의 프로젝트에 사용
  • 인증은 2020년에 큰 폭으로 성장
  • 국가별 그래프: 미국이 주도하고 있고,  한국의 경우 내가 2019년에 진행한 3D 프린터가 유일함.
  • Adafruit과 Sparkfun이 주도
  • 처음 설립을 주도한 사람들이 여성이라서 그런지, 써밋의 스피커에 대한 표(Women, Non-White)도 이쪽의 분위기를 알 수 있다.

파이썬을 사용한 실시간 데이터 그래프

아두이노에도 데이터를 실시간으로 plot하는 기능이 있지만, 오토스케일링 기능 때문에 가끔 불편할 때도 있다. Python Playground 책의 저자의 블로그를 보니 실시간으로 시리얼 데이터를 받아서 mathplot을 사용해서 그래프를 출력하는 프로그램이 있어서 사용해 봤다.

사용법: python ldr.py –port [port]

VS Code에서 파이썬 코드를 디버깅할 때 인자를 입력 빋아서 디버깅하는 방법이 있는 것 같아서 구글링을 해보고 tasks.json파일을 수정해서 해봤는데, 잘 안되어서 코드를 수정해서 테스트를 했다. 원래 사용법은  위 사용법처럼 포트명을 입력을 해야 함.


체온 측정 관련


Pages:1234567...55