[STM32] 13. UART Interrupt 구현
·
🧊 STM32
UART 통신에서 Polling 방식은 간단하지만 효율성이 떨어질 수 있다. 이를 해결하기 위해 Interrupt 방식과 DMA 방식을 사용할 수 있다. 이 번 포스팅은 Interrupt 방식을 통해 이 전 포스팅인 Polling 방식 기능을 그대로 구현하는 방식으로 진행한다.이전 포스팅 : https://blog.naver.com/younjung1996/223477638132 12. STM32 시리얼 모니터를 위한 UART 통신 구현 (2)기본적인 UART 통신은 폴링(Polling) 방식으로 수행할 수 있다. 폴링 방식에서는 MCU가 계속해서 ...blog.naver.com사용된 보드는 STM32F103이며, UART 1번을 사용한다. (PA10 - UART1_RX, PA9 - UART1_TX) 📌..
[BLE 실내 측위 프로젝트] 7. NRF51822 비콘 테스트 및 초기 설정
·
💡Project/✅ BLE Indoor Positioning
드디어 알리에서 구매한 NRF51822 BLE4.2 비콘이 도착했다. 개당 6000원에 배터리 4개 정도 해서 3만 원 정도에 구매했다. 다음 글로 삼변측량에 대해 포스팅할 예정이지만, 비콘으로 실내 측위를 위해선 최소 3개의 비콘이 필요하다.조립은 간단하다 배터리 장착 후 나사 3개만 조여주면 된다.beacon 구매 후 beacon을 초기 설정할 필요가 있다. 설정 방법은 제작사에서 제공하는 Holyiot-beacon을 설치하면 된다.우선, 하나의 비콘만 동작 중이며 다운로드한 앱을 실행할 경우 아래와 같이 화면에 표시된다.비콘의 연결을 위해선 최초의 비밀번호를 요구한다. 내가 구매한 비콘의 경우 초기 비밀번호는 aa14061112 이다.비콘을 연결하고 나면, password, major, minor,..
[BLE 실내 측위 프로젝트] 6. RSSI 변동을 해결하기 위한 이동 평균 필터
·
💡Project/✅ BLE Indoor Positioning
BLE RSSI의 문제점은 위 그림과 같다.4.5m 이상에서는 제대로 된 거리를 계산할 수 없음. (나중에는 통신 거리가 더 길어진 BLE5.0에 대해 알아볼 예정)실제 환경에서는 많은 외부 요인으로 인해 RSSI 변동이 발생해 거리의 오차가 발생함.📌 1. 이동 평균 필터RSSI 변동을 해결하기 위한 방법은 여러 가지가 있는데 그 중 가장 간단한 이동평균 필터이다.원리는 간단하다. 하나의 윈도우 사이즈만큼 그룹을 묶는다.그룹의 평균 값을 대푯값으로 잡는다.한 칸씩 이동한다. (Convolution 1D와 같은 원리)이 간단한 방법으로 스무딩 효과를 낼 수 있다. RSSI 값이 확 튀었을 때 이를 완화시켜주는 효과를 낸다. 당연히 단점도 존재한다.  delay가 발생한다. 윈도우 사이즈만큼 평균 내기 ..
[BLE 실내 측위 프로젝트] 5. BLE Beacon의 RSSI 값에서 거리를 계산하는 방법 (feat.log distance path los
·
💡Project/✅ BLE Indoor Positioning
📈 1. Log distance path loss modelRSSI는 수신 신호 강도 표시기를 나타낸다. 스마트폰과 같은 수신 장치에서 볼 수 있는 비콘의 신호 강도이다. 신호 강도는 거리와 전송 세기에 따라 다르다. RSSI를 이용하여 거리를 구하는 식은 아래와 같다.d : distance(거리)n : 보정 상수 (2~4: 보통 2를 사용)α : 1m에서 측정된 RSSIRSSI : 측정된 현재 RSSI🔗 2. Codeimport "dart:math";void main() { int n = 2; // constant N int alpha = -63; // rssi at 1m int rssi = -80; // measured rssi num m = pow(10.0,((alph..
[BLE 실내 측위 프로젝트] 4. BLE advertising packet 기본 구성
·
💡Project/✅ BLE Indoor Positioning
📌 1. BLE Packet BLE의 패킷 타입은 두 가지가 있다. Advertising channl PDUs : 기기 감지 및 브로드캐스팅Data channel PDUs : 데이터 전송용​실내 측위에서는 데이터 전송이 따로 필요 없으므로 Advertising channel PDUs에 대해서만 언급한다.​ Packet types은 아래 테이블과 같다. 보통 비콘의 타입은 ADV_IND가 일반적이다. 특정 중앙 장치를 특정하지 않고 모든 주변 기기와 연결할 수 있다.Payload는 최대 37바이트 중에서 6바이트는 Advertisement Address, 나머지 0 ~ 31바이트는 Advertisement Data이다.BLE 비콘에는 각 제조사에 따라 다양한 패킷 포맷을 가진다. 그중 가장 유명한 것이 ..
[BLE 실내 측위 프로젝트] 3. Flutter BLE Scan Demo Program, RSSI monitoring
·
💡Project/✅ BLE Indoor Positioning
하이제니스 님의 포스팅에 포함된 코드를 일부 수정하였습니다.https://blog.naver.com/chandong83/222414483554BLE 통신 스케줄 및 안드로이드 동작에 관한 포스팅을 보고 와야 어느 정도 이해하기 편하다.📌  ​1.  패키지 설치 및 설정flutter_blue 대신 flutter_blue_plus 패키지를 설치한다.flutter_blue는 더 이상 업데이트하지 않고 안드로이드 12 권한 이슈가 있으므로, flutter_blue_plus를 설치한다.$ flutter pub add flutter_blue_plus설치하게 되면 알아서 dependecies가 추가된다.⚙️ 1. android/app/build.gradle : SDK 최소 버전 19로 설정Android { def..
[BLE 실내 측위 프로젝트] 2. Bluetooth Low Energy(BLE) 통신 스케줄, 안드로이드 함께 이해하기
·
💡Project/✅ BLE Indoor Positioning
BLE 통신을 하기 전에 통신 스케줄에 대해 이해하고 가면 좋다. BLE의 물리 계층 먼저 간단하게 짚고 간다. BLE는 2.4GHz 대역을 사용하며, (2.402 GHz ~ 2.4835 GHz) : 2 MHz 간격으로 40개 채널로 구성된다. Advertising 채널은 37, 38, 39 (2402 MHz, 2426 MHz, 2480 MHz)를, Adaptive Frequency Hopping 방식을 사용한다.📌 실내 측위 (Indoor Positioning)Advertiser은 송신부, Scanner는 수신부라고 생각하면 편하다. 실내 측위 프로젝트는 따로 기기 간 연결을 필요로 하지 않고, Device discovery 모드만 사용한다. 실내 측위에 간략히 설명하자면, Advertiser가 모든..
[BLE 실내 측위 프로젝트] 1. Flutter_blue 설정 (feat.안드로이드12 권한 이슈)
·
💡Project/✅ BLE Indoor Positioning
개인 프로젝트인 BLE 실내 측위 첫 글이다. 우선, flutter에서 ble 관련 패키지를 설치한다. 대표적으로 ble 관련 패키지는 3개가 있다. flutter_ble_libflutter_reactive_bleflutter_blueflutter_ble_lib는 업데이트가 느려, 2번과 3번 중 골라야 하는데, 오늘 자 기준으로 flutter_blue가 최신 버전이 있어 flutter_blue를 사용한다. flutter 패키지는 pub.dev에서 설치할 수 있다. 혹은 아래 명령어를 통해 설치할 수 있다.$ flutter pub add flutter_blue설치하게 되면 자동적으로 pubspec.yaml 파일의 dependecies에 추가된다.  하지만, flutter_blue의 경우 안드로이드 12에..
[STM32] 12. 시리얼 모니터를 위한 UART 통신 구현 (2)
·
🧊 STM32
⚙️ 1. UART 설정기본적인 UART 통신은 폴링(Polling) 방식으로 수행할 수 있다. 폴링 방식에서는 MCU가 계속해서 UART 상태 레지스터를 확인하여 데이터가 수신되었는지 또는 전송이 완료되었는지를 확인한다. 하지만 폴링 방식은 MCU 리소스를 많이 소비하므로 보통은 Interrut 방식이나 DMA 방식을 주로 사용한다. 이번 글은 폴링 방식으로 간단히 구현할 수 있으므로 소개해보려 한다. 이번 예제는 UART 1번을 사용한다. (PA10 - UART1_RX, PA9 - UART1_TX)   사용된 보드는 STM32F103이다.설정은 아래와 같다. 폴링 방식을 사용하기 때문에 아래 테이블 이외에 별도로 설정할건 없다.Baud Rate115200 Bit/sWorld Length8 Bits (..
[STM32] 11. 시리얼 모니터를 위한 UART 통신 구현 (1) FTDI (UART To USB)
·
🧊 STM32
FTDI (Future Technology Devices International Ltd.)는 주로 UART (Universal Asynchronous Receiver-Transmitter) 신호를 USB (Universal Serial Bus)로 변환하는데 사용되는 IC (Integrated Circuit) 칩을 제조하는 회사이다. FTDI 칩을 사용하면 UART를 사용하는 장치를 USB 포트에 연결할 수 있다. 임베디드 시스템에서 printf 함수를 사용하는 것은 디버깅, 로깅, 상태 확인 등을 위해 매우 유용하다. printf 함수는 표준 C 라이브러리 함수로, 포맷된 출력을 생성하여 콘솔이나 터미널에 문자열을 출력하는데 사용된다. 그러나 임베디드 시스템에서는 일반적으로 디스플레이나 콘솔이 없기 때..
18진수
'분류 전체보기' 카테고리의 글 목록 (2 Page)