LINE의 IoT 플랫폼 ‘LINE Things’의 Developer Trial 사용해 보기

LINE Things 플랫폼 개발을 맡고 있는 Kawata입니다. 여러분은 LINE의 Bluetooth LE(Low Energy) 기반 IoT 플랫폼인 ‘LINE Things’를 아시나요? 올해 11월에 열린 LINE Developer Day 2018에서는 개발자가 손쉽게 사용할 수 있는 Developer Trial이 공개되었습니다. 오늘 포스팅에서는 LINE Things의 예시 코드를 바탕으로 실제 LINE에서 연동 가능한 기기를 ESP32-DevKitC를 이용해 생성한 뒤 작동시키는 방법을 소개하겠습니다.

LINE Things란?

LINE Things란 Bluetooth LE가 지원되는 IoT 기기를 LINE 앱에서 접속하여 bot이나 웹서비스와 연동시킬 수 있는 플랫폼을 말합니다. 

지금까지 Bluetooth LE(BLE) 기기를 스마트폰에서 실행시키려면 전용 앱을 만들거나 Web Bluetooth를 이용해야 했습니다. 이에 LINE Things는 여러분께서 매일 사용하시는 LINE 앱에서 bot이나 LINE Front-end Framework(LIFF)만 있으면 손쉽게 기기와 연동시킬 수 있는 플랫폼을 제공하기 위해 개발되었습니다.  LINE Things는 크게 다음과 같은 세 가지 기능을 제공합니다. 

  • LINE 앱에서 Bluetooth LE에 접속할 수 있는 LINE Things 지원 기기를 등록한다. 
  • LIFF에서 JavaScript API를 통해 LINE Things 지원 기기를 조작한다.
  • LINE 앱과 기기가 자동으로 통신하여 대상 bot에 정보를 전송한다(향후 지원 예정).

즉, LINE과 연결된 ‘것’이기에 LINE Things이며, 또 이를 실현하는 플랫폼 전체를 아울러 LINE Things라 칭하는 것이지요. LINE Things의 자세한 내용이 적힌 문서는 LINE Developers 사이트에서 제공하고 있는데요. 기본적으로 Bluetooth LE의 특징(characteristic)인 read, write, notify를 LIFF에서 JavaScript를 통해 조작할 수 있는 API를 제공합니다. LINE Things 용 JavaScript API는 Web Bluetooth의 API를 참고하여 만들어졌기 때문에 Web Bluetooth API를 아신다면 친숙함이 느껴지실 겁니다. 또 아직은 아니지만, 앞으로 bot과 IoT 기기를 밀접히 연결해 줄 자동 통신 기능도 지원될 예정입니다. LIFF가 무엇인지 궁금하신 분은 ‘Messaging API의 신규 기능, LIFF를 소개합니다‘ 편을 읽어보시기 바랍니다.

LINE Things Developer Trial

LINE Things는 여러분께서 손쉽게 플랫폼의 가능성을 체험할 수 있도록 Developer Trial 기능을 제공하고 있습니다. Developer Trial에서는 몇몇 정해진 규격만 지키면 개발자 여러분께서 자유롭게 Bluetooth LE 지원 기기와 LIFF 앱을 만든 뒤 LINE Things 플랫폼에서 개발테스트해 볼 수 있습니다. Developer Trial에 대해서 더 자세히 알고 싶으신 분은 여기에서 확인하실 수 있습니다.

Developer Trial에는 제품이나 기기의 개수에 제한이 있고, 연결된 bot과 제품이 친구일 경우에만 검색된다는 점 등 몇 가지 제약사항이 있습니다. 하지만, 기본적으로 개인이나 소규모 인원으로 실험을테스트를 진행하기에는 문제가 없습니다. 혼자 전자 공작취미나 테스트 차원에서 Bluetooth LE를 사용해 보고자 하는 분께 딱 안성맞춤이니 꼭 한번 사용해 보시기 바랍니다. Developer Trial을 이용해 LINE Things 플랫폼에서 개발을 하려면 다음과 같은 준비가 필요합니다. 

  • LINE 계정
  • 신규 채널(bot) 생성
  • 신규 LIFF 앱 작성 후 Bluetooth LE 기능 부여
  • 신규 LINE Things 제품 생성
  • LINE Things 지원Bluetooth LE 기기

Bot이나 LIFF를 만들어야 하므로 과정이 조금 복잡하지만, 관련 문서가 잘 갖춰져 있으니 그다지 어렵지 않을 것입니다. Developer Trial을 진행한 뒤 더 많은 사용자에게 공개하고 싶거나, 실제 제품에 접목해 보고 싶을 때는 이곳을 통해 연락 주시면 정성껏 답변 드리겠습니다. 

LINE Things Starter 사용하기

여기까지 읽어보니 LINE Things를 사용해 보고 싶다는 생각이 들지 않나요? 하지만 ‘LINE Things가 지원되는 Bluetooth LE 기기는 만들기 어려울 것 같은데’ 하는 분도 많으실 것 같네요. 그래서 여러분께서 LINE Things를 바로 체험해 볼 수 있도록, LINE Things Starter로 쉽게 사용해 볼 수 있는 기기의 펌웨어와 LIFF 앱의 예시 코드를 GitHub에 공개해 놓았습니다. 

현재 LINE Things Starter 개발에는 Bluetooth LE가 지원되는 다음 세 가지 시판 보드를 사용할 수 있습니다. 모두 기술기준적합 마크를 획득한 개발 보드이고, 일본에서는 비교적 쉽게 구할 수 있습니다. ESP32는 Wi-Fi도 지원되는 모듈이며, Nordic nRF52는 장시간 배터리 구동이 가능한 저 소비 전력 모듈입니다. 펌웨어는 현재 모두 Arduino IDE로 개발할 수 있게 되어 있습니다.

이번 글에서는 ESP32-DevKitC를 사용한다는 전제 하에 설명해 보겠습니다. ESP32-DevKitC는 아래 사이트에서 구입할 수 있습니다. 이 밖에도 Arduino IDE에서 ESP32 Dev Module처럼 다룰 수 있는 것이라면 사용 가능할 텐데요. 이 부분은 직접 판단하신 후 사용하시기 바랍니다.

그럼 LINE Things Starter의 코드를 이용해서 LINE Things를 실제로 사용해 보겠습니다.

LINE Things Starter 펌웨어 작성

먼저 LINE Things Starter의 ESP32 용 펌웨어를 개발 보드에 작성합니다. 펌웨어 작성에는 Arduino IDE를 사용합니다. 이 GitHub에 Arduino IDE 설치 방법 및 보드 설정 방법이 나와 있으니 참고하시기 바랍니다. 

LINE과 LINE Things 기기 연결하기

펌웨어 작성을 마쳤다면 이제 본격적으로 LINE에 기기를 연결해 보겠습니다. 먼저 LINE이 설치되어 있는 여러분의 스마트폰에서 아래 QR 코드를 스캔하고 규정에 동의한 뒤 LINE Things 기능을 활성화해 주세요.

그러면 다음과 같은 기기 연결 화면이 나타날 텐데요(처음에 한번 활성화해 두면 다음부터는 설정>LINE Things에서 기기 연결 화면을 확인할 수 있습니다). 이때 펌웨어를 작성해 둔 기기의 전원을 켜면 LINE Things 기기가 검색되면서 Available devices(연결 가능한 기기) 부분에 LINE Things Trial(Default Firmware)이 보입니다. 보이지 않는다면 스마트폰의 Bluetooth가 꺼져 있지는 않은지 확인하시기 바랍니다. 

기기명을 탭해 보겠습니다. 페어링 요청을 승낙하면 LIFF 앱이 실행되면서 아래와 같은 화면이 나타납니다. 이 화면에서 Device connected라는 문구가 나타났다면 스마트폰과 LINE Things 기기의 연결이 완료되었다는 뜻입니다.

LIFF 화면을 열어둔 상태로 개발 보드의 USB 커넥터 왼쪽 옆에 있는 Boot 버튼을 눌러봅니다. LIFF 앱의 Button state에 변경된 버튼 상태가 반영될 것입니다(EN 버튼을 누르면 기기가 리셋됩니다. 동작이 잘 안 될 때는 EN 버튼을 눌러 리셋해 주세요). 이는 기기에서 자체적으로 이벤트가 발생했을 경우 알림이 가게 되어 있는 BLE의 Notify 기능을 이용한 것입니다. 이처럼 LINE Things를 이용하면 기기로부터 BLE를 통해 다양한 정보를 손쉽게 전달받아 LIFF에 반영시킬 수 있습니다.

브레드보드에 LED 배선 후 조작해 보기

다음으로 개발 보드에 LED를 꽂고 스마트폰으로 조작해 보겠습니다. 이른바 ‘LED 깜빡이기’인데요, 아래 그림처럼 브레드보드를 이용해서 ESP32-DevKitC와 LED, 저항을 연결하세요. 

그리고 나서 LIFF의 Switch LED ON 버튼을 눌러 보세요. LED에 불이 들어올 겁니다. 다시 한번 버튼을 누르면 LED가 꺼집니다. 이렇게 쉽게 LINE에서 IoT 기기를 조작할 수 있다니, 여러 가지 재미있는 시도를 해 볼 수 있지 않을까요? 

Developer Trial로 나만의 LINE Things 기기 만들기

여기까지 디폴트 상태의 펌웨어와 LIFF 및 GATT Service UUID로 LINE Things 기기를 테스트해 보았습니다. 펌웨어나LIFF를 변경해서 독자적인 개발을 하고 싶다면 LINE Things Developer Trial을 사용해야 합니다. Developer Trial에서는 위에서 설명한 대로 직접 bot과 LIFF를 만들어서 발급된 GATT Service UUID를 advertising 합니다. 이번에는 LINE Things Starter의 펌웨어와 LIFF를 사용해서 UUID를 변경하여 각자의 제품에 맞는 개발 환경을 만들어 보겠습니다. 

신규 채널(bot)생성 및 LIFF 앱 만들기

이 문서(Preparation for accepting BLE-compatible devices on the LINE Platform)를 참고하여 신규 채널을 생성하고 LIFF 앱을 만듭니다. 이번에 사용할 LIFF는 LINE Things Starter 코드와 GitHub Pages를 이용하면 웹서버 없이 설치할 수 있습니다. LINE Things Starter 저장소를 GitHub에서 포크한 뒤, 설정 화면에서 GitHub Pages를 열어 Source를 master branch로 변경합니다. 그러면 Your site is published at {URL}이라는 메시지가 보일텐데요. 이 URL 끝에 liff-app/을 추가하면 LIFF의 엔드포인트 URL이 됩니다. 

또한 LIFF는 LINE Developers 사이트에서 웹 UI로 개발할 수도 있습니다. 단, LINE Things용 LIFF에서는 Bluetooth LE 기능을 부여해야 하는데 현재 웹 UI에서는 이 동작을 지원하지 않습니다. 따라서 다음 curl 명령어와 같이 채널 액세스 토큰으로 직접 LIFF 생성 API를 호출해야 합니다. LINE Things용 LIFF를 생성할 때는 "features": { "ble": true }를 잊지 말고 꼭 설정하도록 합니다. 

curl -XPOST \
-H 'Authorization: Bearer {channel access token}' \
-H "Content-Type: application/json" \
-d '{
    "view": {
        "description": "{liff name}",
        "type": "full",
        "url": "{LIFF endpoint URL (GitHub Pages)}"
    },
    "features": { "ble": true }
}' \
https://api.line.me/liff/v1/apps

LINE Things 제품 만들기

이어서 LINE Things Developer Trial 전용 API로 새로운 LINE Things 제품을 만들어 보겠습니다. 이를 위해서는 앞에서 생성한 bot의 채널 ID와 LIFF 앱의 ID가 필요합니다. 다음은 제품 생성 API를 curl로 호출하는 예시입니다(아쉽게도 현재 웹 UI는 제공되지 않고 있습니다).

curl -X POST https://api.line.me/things/v1/trial/products \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type:application/json' \
-d '{
  "name": "{trial product name}",
  "liffId": "{LIFF APP ID}"
}'

채널 액세스 토큰은 LINE Developers 사이트에서 확인할 수 있습니다. "name"에는 원하는 제품명을 등록합니다. 내 제품임을 알 수 있는 이름으로 설정하면 됩니다. "liffId"에는 앞에서 생성한 LIFF 앱의 ID(LIFF URL의 line://app/ 뒤에 이어지는 문자열)를 지정하면 됩니다. 제품 생성 API를 호출하면 다음과 같은 결과가 반환됩니다. 

{
  "id": {productId},
  "name": "{trial product name}",
  "actionUri": "{LIFF APP URL}",
  "channelId": {channelId},
  "type": "BLE",
  "serviceUuid": "{serviceUuid}",
  "psdiServiceUuid": "{psdiServiceUuid}",
  "psdiCharacteristicUuid": "{psdiCharacteristicUuid}"
}

LINE Things의 Developer Trial 용 제품의 경우 제품을 생성하면 전용 Bluetooth LE의 GATT Service UUID가 발급됩니다. 위 결과 속 "serviceUuid"가 그것입니다. 이 Service UUID를 Advertising Packet에 포함시키면 LINE 앱이 기기의 제품을 식별할 수 있게 되어 기기를 LINE Things에 연동시킬 수 있게 됩니다.

"psdiServiceUuid""psdiCharacteristicUuid"는 기기 식별 ID(PSDI)가 저장된 characteristic 및 이를 제공하는 GATT Service의 UUID입니다. Developer Trial 제품에서 이 값은 고정되어 있습니다. LINE Things 지원 제품에서는 이 characteristic을 read했을 때 기기별로 다른 고유값을 반환해야 합니다. 자세한 사양에 대해서는 Creating LINE Things-compatible devices(일본어, 추후 영문 페이지 제공 예정)을 참고하시기 바랍니다. 

Bluetooth LE 특유의 이러한 방식을 잘 모른다고 해도 위 사양은 LINE Things Starter에 이미 구현되어 있으니 지금 완벽하게 알고 있을 필요는 없습니다. LINE Things Starter는 처음에 Service UUID가 초기 설정 상태로 되어 있는데요. 이것을 발급받은 Service UUID로 변경하면 LINE Things Starter 기반의 독자적인 제품을 개발할 수 있습니다.

LINE Things Starter 변경하기

먼저, 펌웨어에서 Service UUID를 변경하여 기기에 배포합니다. ESP32의 펌웨어의 아래 행에서 "USER_SERVICE_UUID"를 발급받은 Serviced UUID로 변경합니다(참고). 그리고 Arduino IDE를 사용해서 기기에 배포합니다.

// User service UUID: Change this to your generated service UUID
#define USER_SERVICE_UUID "91E4E176-D0B9-464D-9FE4-52EE3E9F1552"

다음으로, LIFF의 JavaScript 내에서 Service UUID 부분을 수정합니다. 아래 "USER_SERVICE_UUID"를 발급받은 Service UUID로 동일하게 변경한 뒤 배포합니다(참고). 

// User service UUID: Change this to your generated service UUID
const USER_SERVICE_UUID = '91E4E176-D0B9-464D-9FE4-52EE3E9F1552'; // LED, Button

작동 확인

우선 앞에서 새로 만든 bot을 친구로 등록합니다. Developer Trial에서는 채널에 연결되어 있는 bot과 친구 사이인 사용자만이 해당 채널에 연결되어 있는 LINE Things 제품을 검색할 수 있습니다. Bot과 친구가 되려면 LINE Developers 사이트에서 채널 기본 설정으로 들어가 하단의 QR 코드를 LINE 앱으로 스캔하면 됩니다. 이어서 기기의 전원을 켠 뒤 LINE Things의 기기 연결 화면에 Developer Trial 등록 제품으로 검색이 된다면 펌웨어가 제대로 작동하고 있다고 볼 수 있습니다. 그리고 LIFF를 열어 잘 동작하고 있다면 작동 확인은 끝난 것입니다.

주의iOS에서는 기기에서 펌웨어를 변경했을 경우 기기 검색이 잘 안 되거나 characteristic이 제대로 동작하지 않는 문제가 발생합니다(iOS 자체 캐시로 인한 문제). 펌웨어를 변경했다면 iOS 설정 화면에서 Bluetooth 기기 등록을 해제한 뒤 Bluetooth를 한번 껐다 켜면 해결될 때가 많습니다. 그리고 LINE Things 연결 화면에서 기기와 기존 제품을 한번 unlink해 보시기 바랍니다. 동작이 잘 되지 않는다면 펌웨어의 Service UUID가 제대로 변경되었는지, 또 변경된 것이 LIFF에 잘 반영되어 있는지 확인해 보시기 바랍니다. Bluetooth LE 디버깅 시에는 BLE 관련 칩 업체 Nordic이 제공하는 ‘nRF Connect for Mobile’ 앱(iOS, 안드로이드)을 사용하면 편리합니다. 

여기까지 잘 따라오셨다면 이제 펌웨어와 LIFF를 자유롭게 개발하실 차례입니다. 기본적으로, 발급된 Service UUID의 advertising과 PSDI service만 잘 구현했다면 거기에 characteristic이나 나만의 GATT Service를 추가할 수도 있고, 혹은 미리 정의되어 있는 GATT Service에 따라 구현하는 등 자유롭게 개발을 진행할 수 있습니다. 

LINE Things의 가능성

자, LINE Things 플랫폼의 가능성이 느껴지시나요? 마지막으로 저희가 LINE Things 플랫폼 개발 과정에서 PoC(Proof of Concept)로 개발한 기기를 짧게 소개해 드리면서 글을 마칠까 합니다. 위 사진은 LINE Things가 지원되는 체중계의 프로토타입, 그리고 LINE Things가 지원되는 전자 종이(E-Ink)를 탑재한 전자 카드의 프로토타입입니다. 둘 다 CR2032 규격의 단추형 전지 하나로 작동됩니다. 체중계의 경우 체중 정보를 Bluetooth로 가져와 기록하는 앱을 LINE에서 만들 수 있고, 전자 종이에서는 LINE 계정이나 이미지 등을 LINE에서 업로드해서 수정할 수 있습니다. 여러분도 Developer Trial을 사용해서 이러한 기기를 직접 만드실 수 있습니다. 이들 PoC 기기는 어디까지나 검증 차원에서 만든 것이라 제품화 계획은 없지만, 기회가 된다면 자세히 소개해 드리겠습니다. 

마지막으로 LINE Things에서는 Developer Trial에 대한 여러분의 다양한 의견, 소감을 기다리고 있습니다. Developer Trial로 만드신 작품을 적극적으로 공개해 주시면 감사하겠습니다. 앞으로 실습이나 이벤트도 준비하고 있으니 본 포스팅 내용대로 잘 되지 않았던 분이나 기술적인 이야기를 더 듣고자 하시는 분은 이벤트 정보를 기다려 보시기 바랍니다.

계속해서 LINE Things에 많은 성원 부탁드립니다.