React Native BLE Serial with HM-10

한글 버전 : https://goo.gl/IHwMCJ

Let’s summarize the connection between Android and iOS Bluetooth.

Currently, the hardware part is complete, but the bluetooth module is not recognized by iOS devices.

Bluetooth is currently up to version 5, but iOS only supports BLE version (version 4). Current module (product) that converts serial signal to Bluetooth supports only V2.

Since the serial signal (TX / RX) comes out from the product, you can simply change it to the BLE signal, but the problem becomes complicated because the serial protocol has been expelled since version 4 (BLE).

About Bluetooth : https://en.wikipedia.org/wiki/Bluetooth

In summary, every chip maker has to create a workaround to support SPP(Serial Port Service) and a corresponding implementation on each mobile platform. And mobile developer need to implement according to the guideline provided by the chip manufacturer, or the makers of the module using the chip implement and provide to the developers. Anyway the implementation seems to require knowledge of the firmware.

BLE chip etc

Eventually, we searched for the BLE-UART module and narrowed it down to the provider which supports mobile source code (or library), some of which only provided Android.

So, I wanted the most used modules, and eventually I found a cheap, heavily used module called HM-10. There was one in the office. I will test it with the module next week, both iOS and Android sources.

iOS sourcecode : https://github.com/hoiberg/HM10-BluetoothSerial-iOS

One disappointing thing is that I thought it would be easy to link with the react-native-bluetooth-serial module, but I have to connect directly with the native.

2017. 2. 4

I replaced current V2 version with the HM-10 module, no problem with connection and packet receiving on iOS. The above source code was used and tested without any problems.

Next, we need to test Android, which is not urgent.

The source code link : https://github.com/danasf/hm10-android-arduino

2017. 2. 13 추가.

__ to be continued

React Native Tip

리액트 네이티브로 개발을 하면서, 리액티브 개발이 정말 편하다는 것을 느끼지만, 그동안 객체지향이나 MVC 패턴을 워낙 오래 사용했던지라 가끔 벽에 부딪히는 것은 어쩔 수 없는 듯 하다.

그동안 제일 어려웠던 건, 리덕스와 비지니스 로직을 연결하는 방법이었던 것 같은데, 매번 비즈니스 로직을 독립된 클래스로 만들어서 싱글톤으로 사용했더랬다. 여기에 대해서는  좀 더 고민을 하고 결론이 나면 나중에 정리하고 싶다.

❤ 18 업뎃> 오늘 기준으로 (개발 3개월 차 ㅎㅎ) 위에 대해 부연하자면.. Realm DB 스키마와 그 클래시 관련 로직을 담는 모델 클래스를 제외하고는 모든 로직이 리듀서로 들어갔고, 그게 그렇게 나쁘게 보이지는 않다는 겁니다. 하지만, 아직도 코드가 어글리 한데, 이에 대한 원인은.

‘한 액션 처리를 여러 리듀서 파일에서 가능하다는 것’

을 그동안 몰랐었던 데 대부분 있습니다. 자바 스크립트 언어 자체에 대한 깊이가 없으니, import, export 도 새롭고 시행착오도 많았고, 그 대표적인 케이스가 어떤 액션이 있을 때 이를 꼭 한군데서 처리해야될 것 같은 편견이었던 것 같습니다.

별것 아닌 이 부분을 알고나니 모델 클래스를 따로 만들려는 마음보다는 리듀서를 깔끔하게 정리하고자 하는 의욕이 더 강해지는 걸 느낄 수 있었습니다.

</3 18 업뎃> // 리액트 코딩을 하다보니.. 글도 이렇게 쓰게 되더라는 ..ㅎㅎ

이 글에서는 이보다는 간단한, 컴퍼넌트에 기본 값을 주는 방법에 대해 오늘 내린 결론을 정리한다.

컴퍼넌트에 기본 값을 준다.

React Native BLE Serial 구현하기

영문 버전 : https://goo.gl/R58pFo

안드로이드와 iOS 블루투스 연결에 대해서 정리해 봅니다.

현재 하드웨어는 완성된 상태고, 앱에서 블루투스 연결을 시도하는 상태에서 기기 인식을 못하는 증상이 발견되어 해결하는 과정입니다.

블루투스는 현재 버전 5 까지 나와 있습니다만, iOS에서는 BLE 버전(버전 4)만 지원하는데 현재 하드웨어에 시리얼 신호를 블루투스로 변환하는 모듈(제품 페이지)이 V2 입니다.

블루투스 버전 : https://en.wikipedia.org/wiki/Bluetooth

제품에서는 시리얼 신호 (TX/RX)가 나오므로 이를 단순히 BLE 신호로 바꿔주면 되지만, BLE 즉, 버전4에서부터 시리얼 프로토콜이 빠졌기 때문에 문제가 복잡해 집니다.

요약하면 BLE 칩 제조사마다 이를 지원하기 위한 우회로를 만들고 모바일에서는 이에 상응하는 구현을 해야 하는 겁니다. 결국 칩 제조사가 내놓은 가이드라인을 따라 직접 구현하던가, 칩을 이용하여 모듈을 만드는 업체들에서 구현해서 배포하던가 하는데, 이 내용은 펌웨어에 대한 지식이 필요해 보입니다.

블루투스 칩 관련 참고 자료

결국 BLE – UART 모듈을 검색하고, 이 중에서 모바일 쪽 소스코드(혹은 라이브러리)를 제공하는 업체로 좁히게 되는데, 어떤 업체는 안드로이드만 제공하는 경우도 있었습니다.

그래서, 가장 많이 사용하는 모듈을 수배했고, 결국 HM-10 이라는 싸고, 많이 쓰이는 모듈을 발견했습니다. 마침 사무실에도 하나 있었구요.  다음 주에 모듈을 장착하면 테스트 해 볼 예정이고, iOS 소스, 안드로이드 소스 모두 있습니다.

iOS sourcecode : https://github.com/hoiberg/HM10-BluetoothSerial-iOS

한가지 아쉬운 점은 react-native-bluetooth-serial 모듈을 쓰면 쉽게 링크될 것이라고 생각했는데, 직접 네이티브와 연결해야 한다는 것인데요, 이참에 공부해야겠습니다.

2017. 2. 4 여기까지

기존 V2 버전을 HM-10 모듈로 교체하니 iOS 에서 패킷이 잘 들어오네요. 위의 소스코드가 바로 설치되어 문제 없이 테스트 했습니다.

다음은 안드로이드를 테스트 해야하는데, 이건 나중에 해도 되니 일단 소스코드 링크만.

https://github.com/danasf/hm10-android-arduino

2017. 2. 13 추가.

 

__ to be continued..

 

 

 

 

ML in Action.. Ch. 1

올해 6월에 쓰고는 처음 포스팅이네요. 그간 직장을 옮기고, 자바 / 클로져 공부하고, 빅데이터 좀 파보고.. 300 줄 이내의 안드로이드 앱 하나 만드니 반년이 갔네요..

12월부터는 머신 러닝 살짝 파보려고 합니다.

매닝의 인 액션 시리즈..  참 좋은 것 같네요..

Part 1   Classification

이 책의 첫 두 파트는 supervised learning.  관리된 러닝은 목표 변수를 규정하고 데이터로부터 배우도록 지시한다.
목표 값의 두 경우.  노미널 : 참/거짓, 물고기, 포유류, 식물 …
실수 : 이 경우 ‘회기’ 라고 불림.  이것은 파트 2 에서 공부한다.
첫번째 파트는 분류 .. 에 촛점을 맞춘다.

7장의 분류 불균형으로 마무리. 다른 클래스들보다 한 클래스의 데이터가 더 많을 경우… 실세계의 문제.

Ch. 1 … Machine learning basics

머신 러닝의 여러 사례. 스팸 필터, 제품 추천, 얼굴 인식..

파이썬 : 머신러닝에 적합.  NumPy : 매트릭스 연산 등 제공.

1.1   What is ML ?

스팸 메일을 제목의 한 단어만 갖고 판단하기는 힘들다. 하지만, 여러 단어의 조합을 보고, 메일 전체의 길이 등 여러 요소를 같이 보면 더 잘 판단할 수 있다. 머신 러닝은 데이터를 정보로 바꾼다.

머신러닝은 컴퓨터 공학, 엔지니어링, 통계, 기타 다른 분야 등의 교차점에 놓여있다. 정치학, 지질학에 적용되기도 한다.

머신러닝은 통계학을 사용한다. 통계학은 회사가 소비자를 속이기 위해 악용되기도 한다.
인간의 동기는 모델링하기 어렵다.  사회 과학에서 60% 가 맞으면 성공적으로 간주된다. 사람 행동의 60%만 예측하면 잘 한 것이다.
항상 맞을 수는 없나?

완전한 모델링이 불가능한 예. 인간은 행복을 최대화 하기 위해 행동하지 않는가? 이것에 근거해 행동을 예측할 수 있는가?  아마도,  하지만 모든 사람의 행복은 다르기 때문에 어렵다.  그러므로, 사람의 행복을 극대화하는 것에 대한 가정이 옳을 지라도 행복의 정의는 너무 복잡하다.
인간 행동을 결정론적으로 모델링하기 어려운 다른 예들이 많다. 이런 문제에 대해서 통계의 몇몇 도구를 사용할 필요가 있다.

1.1.1 Sensors and the data deluge

웹에는 인간으로 부터의 데이터가 있는데, 요즘은 그 외의 데이터가 더 쌓이고 있다. 센서의 기술은 새롭지 않지만, 그것을 웹에 연결하는 것은 새롭다.

지진의 예.  센서.. 핸드폰..  의 3축 magnetometers.  지진 예측에 사용 가능.. 최소 비용.

1.1.2 ML will be more important in the future

향후 10년간 가장 매력적인 직업은 ‘통계학자’ 일 것이다.

1.2   Key terminology

새 분류 시스템. 엑스퍼트 시스템.    분류..

알고리즘을 만들고는.. 훈련시켜야..  또는 배우는 것을 허락해야..  이를 위해 training set 이라는 데이터를 먹여야 한다.
분류에서 타겟 변수는 노미널 값을 받고 회기 작업에서 값은 연속적일 수 있다.
트레이닝 셋트에서 타겟은 알려져 있다. 기계는 특징과 타겟 변수사이의 관계를 찾음으로 학습한다.
타겟 변수는 ‘종’ 이고 노미널 값을 취함으로 이것을 줄일 수 있다.
분류에서 타겟 값은 classes 로 불리고 유한한 개수의 클래스가 있다고 가정한다.

보통은 트레이닝 셋트와 별개의 테스트 세트가 있다. 초기엔 트레이닝 예제가 먹여진다. 이것이 기계학습이 일어날 때이다.
다음에 테스트 셋을 적용한다.  알고리즘이 얼마나 정확한지 추정.

새 분류작업을 한 후 기계가 뭘 학습했는지 알 수 있나?  이것이 knowledge representation 이다.
답은 ‘경우에 따라 다름’ 이다. 어떤 알고리즘은 사람이 읽기 더 좋은 KR 을 갖는다. 이것은 몇개의 법칙으로 표현될 수 있다.
어떤 것은 가능성의 분포 또는 트레이닝 세트로부터의 예 일 수도 있다.
어떤 경우 우리는 엑스퍼트 시스템을 만드는 것 보다 오직 ‘인지 표현’ 에만 관심이 있을 수도 있다.

1.3   Key tasks of ML

이전 예제는 ‘분류’ 에 관한 것.  인스턴스가 어떤 클래스에 들어갈 것이냐.  기계학습의 다른 분야는 ‘회기’ 임.
이것은 수치 예측이다.  이 두가지는 감독된 학습의 예임. 뭘 예측할 지 주어지기 때문에 ‘감독’ 된 것임.
이 반대는 ‘비감독 학습’.  여기선 데이터에 주어진 라벨이나 목표 값이 없다.
비슷한 아이템을 그루핑하는 작업은 ‘클러스터링’ 이라 한다.  비감독 학습에서 데이터를 설명하는 통계학적 값을 찾길 원할 수 있다.
이것은 density estimation 으로 알려져 있다.
다른 예는 많은 특성에서 데이터를 단순화시켜 2, 3차원 형태로 시각화하는 것이다.

1.4  How to choose the right algorithm

노미널, 목표값?. missing value 가 있나? outliers ?  needle in a haystack. ..

1.5  Steps in developing a ML application

> Collect data.
> Prepare the input data.
> Analyze the input data
> Human involvement
> Train and algorithm.  ML
> Test the algorithm
> Use it.

1.6   Why Python?

clear syntax. easy text manipulation

1.6.1 Executable pseudo-code

풍부한 기본 자료형, 객체 지향, procedual, 함수형 형태로 가능.  정규식 없이 텍스트 다루기.  …

1.6.2 Python is popular

NumPy, SciPy, Matplotlib ==>  Pylab

1.6.3 What Python has that other languages don’t have

Matlab, Mathmatica .. expensive.  Java, C … too many ceremony.

1.6.4 Drawbacks

Not as fast as Java or C.
Boost C++ library,  Python, PyPy.

1.7  Getting started with the NumPy library

Swift 정리.. The Basics

스위프트.. 괜찮은 언어 같다. C#은 자바를 카피. 스위피트는 모든 언어를 참조해서 기존 개발자들이 큰 혼란 없이 개발할 수 있도록 만든것 같다.

레플을 사용하는 걸 보고 클로져와 비슷할 것으로 잠시 착각했었슴.

자바같은 언어를 써보고 함수형 언어에 대한 고민을 해봤다면 빠르게 습득할 수 있을 것으로 판단됨.

일이 없다면 하루에 한 챕터는 나갈 수 있을것 같다…

요점 정리..

> Optional : C# 의 nullable .. .. 과 같은 거 아니게씀? … ㅎㅎ

> ; 필요 없음.. 써도 되고.

> Int 는 플랫폼의 워드 사이즈를 따라감. 32비트에서는 32비트. 64 에서는 64 ..

> type aliase :  타잎 이름 대신 쓸 수 있슴..  uint 대신 money… 이렇게..