本文目的
大家好,我是Hazel。目前在LINE Taiwan的Technical Consulting Team擔任Software Engineer,負責LINE Things專案。
相信大家在 TechPulse2018 已經看過LINE Things的介紹了,LINE Things 是 LINE 為了讓 App 能夠連接各種 BLE 裝置而推出的低功耗藍牙平台。
只要你的裝置有藍牙晶片,都可以和LINE App做連結。 本篇文章將會以官方推薦的ESP32開發版為範例,示範如何啟動範例檔案,以及製作出一個可
透過LIFF開啟的智慧安全鎖。
開發環境: MacOS
裝置: Android手機
開發版: ESP32
LINE Things 是什麼?
在這個大物聯網時代,智慧家電百家爭鳴,每一款智慧家電都有很多好用的功能。然而當智慧家電越來越多的時候,使用者也遇到一個棘手的問題:「App數量暴增」。
一款App的開發牽涉到三方,假若作業系統API有更動,可能會有以下幾點的影響:
筆者家裡有多達十幾款不同的家電,分別是五家不同廠商的產品,而每個廠商都有自己的App。如果要能夠完全使用這些家電的功能的話,筆者必須安裝至少五個App,
其中有些廠商甚至推出兩個以上不同功能導向的App, 這讓有手機潔癖的筆者感到相當困擾,索性有些功能就棄之不用。 而為了解決這種App過多的問題,LINE Things應運而生!
LINE Things 可以分成三部分來看:LINE App本身、前端的LIFF Page以及藍牙裝置。目前LINE Things 允許已註冊的藍牙裝置藉由配對方式在網頁交換資料,
並且會配發給申請者固定的識別碼,開發者毋須考慮識別碼的格式以及BLE協定的實作,只需專注在傳輸的內容以及想實踐的點子即可。
對BLE有興趣的開發者可以參考這篇文章:https://learn.adafruit.com/introduction-to-bluetooth-low-energy?view=all,您會對 BLE有大概的了解。
如何正確地讓範例動起來?
本篇文章會以 ESP32-DevKitC 開發版在Android OS上跑起來為示範,也可以使用樹莓派或聯發科LinkIt7697開發版做開發。
- 首先請先到LINE Things Starter repository,並把程式Clone下來。
- 接下來請到Arduino官網下載Arduino IDE,我們將會使用這款IDE開發。
- 請檢查開發板是否正確連接(Mac, windows 位置以及名稱可能不一樣)
4. 請檢查開發板是否正確連接(Mac, windows 位置以及名稱可能不一樣)
如果一直沒有看到 PORT "/dev/
5. 開啟剛剛Clone下來的程式碼, 並且upload到ESP32開發板
等到狀態顯示為Done updating,就表示已經完成程式碼上傳了。
6. 接著打開你的LINE 並且掃描這個QR Code
第一次掃這個QR Code的人會被加一個 LINE Things starter OA 是正常的,如果使用者跟裝置註冊的 LINE OA or LINE@ 不是好友的話,會看不到該裝置。
7. LINE App 設定 → LINE Things tab → 裝置列表
在裝置列表上即可看到範例裝置
8. 點選裝置後可以看到範例的LIFF Page
9. 接著請照這張圖連接開發板以及LED燈泡,請將短腳接在GND Pin,長腳接在02 Pin上面。 (筆者的LED燈泡可以直接吃3V的電壓, 所以可以不用接電阻, 這邊請各位開發者自行斟酌)
10. 接著按下 LIFF Page 上的 「Switch LED ON」按鈕,就可以看到燈泡亮起來
11. 接下來測試Button Click Count
如何註冊自己的產品?
- 如果你還沒有LINE@可以註冊一個,因為LINE Things product需要綁在 LINE OA or LINE@
2. 將LIFF ID, Channel Access Token 按照文件上的指示,註冊產品
3. 註冊完之後,請將serviceUuid複製下來,貼到範例 Code(sample.ino) 和範例的LIFF APP code(liff-app >
4. 接下來就可以自己修改範例的LIFF Code,並且Deploy
成果如下:
範例延伸: 智慧門鎖應用
應用情境
「 如果有一天,我可以用我的手機當作家門鑰匙,那該有多方便呢?」
不知道多少人曾經因為忘記攜帶鑰匙,而有被反鎖的經驗呢?
筆者改編了一下範例程式碼並且簡單組了一個常見的電磁門鎖, 這是還沒有打開門鎖的樣子
簡單的電路圖如下,方向沒有特定,紅色為火線:
這是打開門鎖(通電中)的樣子
結合liff.getProfile()可以顯示使用者名稱以及照片:
按下「開鎖」即可將門鎖打開,會變成下面這個畫面,
為了操作方便,按下按鈕之後電磁鎖會一直處於通電狀態,為了防止線圈被燒壞,最多只能通電十秒。
開鎖之後會將開鎖的人以LINE Notify Message通知聊天室,就可以知道是誰開了你家的門
範例程式碼
- ESP32的部分: https://github.com/hazel-shen/Smart-Lock
- LIFF的部分: https://github.com/hazel-shen/Smart-Lock-LIFF
如何部署範例程式碼
- ESP32的部分
- 請將esp32 > arduino > sample > sample.ino 中的 USER_SERVICE_UUID 改成你自己申請的service uuid
- 把sample.ino上傳到開發版
- LIFF app
- 請先申請一組LINE Notify access token
- 請申請一組LIFF App, 並且將LIFF App ID記下來
- 請使用這組LIFF App ID申請LINE Things product,並把user service UUID記下來
- 請到範例Github,點選紫色的Deploy Button,輸入LINE Notify access token,並根據您填入的heroku app name 填入 unlock URL(例. https://demo-line-things.herokuapp.com/unlock), 以及 user service UUID
- 將Heroku App部署完之後,請將Heroku endpoint URL記下來,回到LIFF後台修改設定
展示影片
更多詳細的資訊可以參照以下優先順序閱讀:
- LINE Things Product從開發到上線: https://developers.line.biz/en/docs/line-things/getting-started/
- 註冊 LINE Things Product: https://developers.line.biz/en/docs/line-things/regist-product/
- 與LINE Things相容的產品規格: https://developers.line.biz/en/docs/line-things/create-product/
開發中可能會遇到的問題以及眉角
- Click count 沒有作用?!
經筆者測試是要按ESP32開發板上面的Boot按鈕才有效,然而也有可能是因為連線斷掉而Cache還在的原因,請試著將裝置Unlink後再重新連線。 - 我已經改了名稱也Deploy前端頁面和程式碼到開發版了,怎麼還是LINE Things Starter?
如同上一個問題,修改程式碼之後請務必將連線解除後重新連線,然而在部分手機上有出現Cache無法立即清除的情況,如果在App裡面解除連動沒有用,麻煩到手機的「設定」> 「藍牙」找到您的裝置並且解除連動。 - 為什麼Unlink之後在裝置列表上面看不到我的裝置?
如果您的裝置是正常運行的狀態下,請退出LINE Things tab後再進去一次,您的裝置便會重新顯示。
結語
筆者私人的手機是iPhone,筆者自己測試在雙平台都可以使用,目前除了Cache的問題還有待解決之外,可以需要開發的部分其實只有網頁以及板子的部分。相較於以往傳統的App開發,開發者只需要專注在產品上面。
以往要控制智慧家電,使用者必須要安裝專用App,導致手機裡充斥著各家廠商的App。有時會想說如果有一個遙控器可以控制家裡所有的家電那該有多好,而現在這個想法在LINE Things上終得實現。
只需要一個Channel便可以在上面註冊不同的產品,使用者可以在LINE裡面控制各式各樣的智慧家電,不需要額外安裝過多的應用程式了。