꿈꾸는 시스템 디자이너

Flutter와 Arduino간 한글이 포함된 시리얼 통신 방법(base64, utf-8) 본문

Development/Flutter

Flutter와 Arduino간 한글이 포함된 시리얼 통신 방법(base64, utf-8)

독행소년 2021. 5. 13. 14:14

시리얼 통신에서는 한글 데이터를 송수신 할 수 없다.

 

시리얼 통신에서는 문자당 1바이트를 할당하는 아스키방식이 사용되는데 한글은 문자당 2바이트를 사용하기 때문에 아스키코드 방식을 이용할 수 없기 때문이다.

 

몇가지 해결방식이 있지만, Flutter 앱과 Arduino간에 한글 데이터의 교환이 필요한 경우에는 utf-8과 base64 인코딩/디코딩 방식을 이용하면 해결할 수 있다.

 

Flutter에서 한글이 포함된 String을 인코딩/디코딩하는 방법은 다음과 같다.

import 'dart:convert';

// 인코딩
String korean = base64.encode(utf8.encode("한글데이터"));

// 디코딩
utf8.decode(base64.decode(korean));

 

인코딩한 문자열을 BLE나 WIFI 통신을 통해 아두이노로 전송하고, 반대로 수신한 문자열을 반대로 디코딩을 하면 복원할 수 있다.

 

다만 아두이노 자체가 기본적으로 아스키코드만을 지원하기 때문에 아두이노측에서 수신된 한글 데이터를 바로 이용하는 것은 불가능하다고 한다.

임의의 라이브러리 주입을 통해 아두이노 IDE의 시리얼 모니터에 출력되는 데이터의 한글을 정상출력되도록 할 수는 있다.

Comments