BABIL_PROJECT/BLE 6

BLE

본 포스트는 졸업 프로젝트 중간 보고서로 제출한 내용 중 일부를 가져온 것입니다. 블루투스 4.0 스펙을 의미한다. Central 과 Peripheral 방식으로 장치 역할이 나뉘는데, 각자 규칙을 정하는 역할, 제시되는 설정에 따라 동작하는 역할로 보면 된다. 본 프로젝트는 BLE를 이용하므로 그 구조와 프로토콜에 대한 이해가 어느정도 필요하다. 다음은 BLE 의 프로토콜 스택 이미지이다. 크게 Host 와 Controller로 나뉘어 있다. PHY는 하드웨어, LL은 BLE 연결을 직접적으로 관리하는 계층이다. 하드웨어 계층과 직접적으로 연결된 LL에서 연결 상태가 정의 되므로 BLE를 이용하는데 있어 중요한 계층이라고 할 수 있다. 그림은 다음과 같다. Central 장치가 scanning 을 해서..

BABIL_PROJECT/BLE 2022.06.18

BLE_SCAN 액션 수정 (main/index.js)

이 페이지에서는 일단 컴포넌트에 진입하여 scan을 시작하면 stop 할 필요가 없다. 스캔은 계속 진행 하되, 새로고침 버튼을 누르면 BLEList를 초기화하고 다시 스캔한다. 즉, 만약 처음 메인페이지 진입 시 available 했던 디바이스가, 어떤 연유로 더이상 scan 되지 않을 수 도 있지 않은가? 그런 경우 새로고침을 누르면 화면에 반영이 되는 것이다. ble_actions.js export const emptyBLEList = () => (dispatch, getState, DeviceManager) => { DeviceManager.stopDeviceScan() return dispatch ({ type: EMPTY_BLE, payload: [] }) } main/index.js clas..

BABIL_PROJECT/BLE 2022.04.11

BLE_SCAN 액션 수정 (babilScan.js)

위 메인 페이지에서 "연결된" 오토바이를 터치하면, 제어 페이지로 넘어가야 하는데, 이 과정에서 BLE 디바이스가 연결된다. 반대로 뒤로가기를 누르면 연결이 해제 되어야 한다. 그런데 보다보니 중요한 사실이 하나 떠오른다. 바로 scan 액션이 찾으려는 기기를 하나만 찾아도 바로 스캔을 종료시킨다는 것이다. 우리가 필요한 조건은, 인자로 넘겨주는 uuidList에 있는 요소들을 모두 찾았을 때 스캔을 종료하는 것이다. 몇시간 삽질 끝에 결국 전부 원래대로 되돌렸다. 생각을 해보자. 1. startScan 액션은, startDeviceScan 만 해줄 것. 2. startScan 액션은, 단 한번만 호출될것. 즉 렌더링 될 때마다 호출 되면 안된다. 3. startDeviceScan은 startScan 안..

BABIL_PROJECT/BLE 2022.04.10

React 와 Redux 불변성 (Immutability in React and Redux)

Immutability in React and Redux: The Complete Guide (daveceddia.com) Immutability in React and Redux: The Complete Guide Learn about side effects and how to avoid them, how to wield immutablity to update objects and arrays in Redux reducers, and the easy way to update state with Immer. daveceddia.com 누군가가 내가 궁금한 부분을 딱 집어 포스팅 해놨다. 중요한 내용이니 번역하여 올려두려고 한다. Immutability in React and Redux: The Compl..

BABIL_PROJECT/BLE 2022.03.31

BLE-PLX

react-native-ble-plx가 안정적으로 동작할 수 있도록 기록을 남겨두려고 한다. constructor 와 componentDIdMount 의 lifecycle에 대해 아직 제대로 파악을 하지 못한것 같다. 하단 코드는 도움을 받아 작성한 코드로, 내용에 대한 정확한 파악은 이루어지지 않은 상태이다. class App extends Component { constructor() { super(); this.manager = new BleManager(); } componentDidMount() { setTimeout( () => { if (Platform.OS === 'android') { // Calling the permission function const granted = Permiss..

BABIL_PROJECT/BLE 2022.01.29