본문 바로가기
개발이야기

Ble 자동 점검 개발 스토리

by Chars4785 2022. 3. 30.

배경

그 동안 개발했던 내용들을 정리하고 있는 차 가장 공드리면서 개발했던 Ble 개발에 대해서 이야기 해볼생각이다.

씽씽에서 제공하는 킥보드는 많은 기능들을 갖고 있었다. LTE, BLE, NFT 등.. 많은 기능들을 제공하고 있는데 그중에서 Ble 에 대한 이야기를 할 생각이다.

 킥보드안에 LTE 모듈은 존재하지만 iot가 망가지는 경우는 허다하게 많아서 서버와의 통신이 안될때가 많다 그래서 실제로 고장수리로 인해서 들어온 킥보드의 iot가 망가져서 아무것도 못하는 경우가 많고 수리 할때 ble가 더 빠른 반응을 보이기 때문에 Ble 통신 기능 개발이 필요하게 되어 진행하게 되었다. 또한 추가적으로 손쉽게 작업자가 수리후 해당 킥보드의 기본 기능들을 순차적으로 확인할수 있도록 하면 좋을것 같아서 자동 점검 기능까지 개발하게 되었다.


ble 모듈은 (react-native-ble-plx)을 이용해서 개발하게 되었다. 하지만 휴대폰과 ble 통신에 대한 내용을 전혀알지 못했고 킥보드 자체가 중국에서 왔기 때문에 해당 킥보드에 ble 모듈에 대한 설명도 그렇게 친절하지 못했다. 어쩔수 없이 중국 회사에서 전달해준 킥보드 ble 안드로이드 앱을 디컴파일해서 ble의 command 값과 규칙을 역으로 추정해 가면서 개발을 진행했다.

링크 : ble 연결방법 과정

 

자동점검 개발

ble 연결을 통해서 배터리 덮개 락, 언락/ 라이트 온,오프/ 스쿠터 락,언락/ 운송모드 ( 킥보드의 전원을 끔 ) 등의 기능들을 이용할수 있게 되었다. 자동점검 기능은 아래 작업들을 순차적으로 진행하면서 사용자에게 실제로 기기의 기능이 실행되었지 물어보고 추후 결과를 사용자에게 보여주는 기능입니다.

const jobs = [{
                name:"sendLockScooter",
                actionFunction: bleStore.sendLockScooter,
                callbackFunction: bleStore.onRecvLockScooter,
                testCallbackFunction: onTemporaryCallBack,
                idleTime: 500,
            },{
                name:"sendUnlockScooter",
                actionFunction: bleStore.sendUnlockScooter,
                callbackFunction: bleStore.onRecvUnlockScooter,
                testCallbackFunction: onResultUnLockScooter,
                idleTime: 500,
            },
            ...
            ...

우선 가장 필요한 부분은 작업의 순차적인 진행이 필요했습니다. 처음에 선택한 건 재귀 함수였습니다. 작업에 action 함수와 callback 을 만들어서 넘겨 action 에 대한 작업후 response 가 오는 watching 함수의 callback를 받도록 설계해 두었습니다.

const action = async function( jobs, index, scooter, bleStore ) {
	...
	..
	await actionFunction({
        scooter,
        commandName:name,
        callback: async function ( data ) {
            if ( data ) {
                const { isSuccess, decodeData } = await callbackFunction( data, scooter );
                ...
                setTimeout(async function() {
                    await action( jobs, index, scooter, bleStore);
                }, idleTime);
                ...
            }

            // 재귀로 다시 시작
            if ( !job.isTimeout ) {
                setTimeout(async function() {
                    scooterAutomationTest.retry = 0
                    await action( jobs, ++index, scooter,bleStore);
                }, idleTime);
            }
        },
    });
    ...
    ..
}

 

 

'개발이야기' 카테고리의 다른 글

그로잉 서비스 개발 이야기-2  (0) 2023.03.21
그로잉 서비스 개발 이야기-1  (0) 2023.03.21
JWT 인증방식  (0) 2022.03.29
React-native 네이버 지도 마커 부분 속도 개선  (0) 2022.03.29
프런트 지식  (0) 2021.07.29

댓글