結合 LINE Things DIY一個智慧門鎖吧 !

本文目的

大家好,我是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開發版做開發。

  1. 首先請先到LINE Things Starter repository,並把程式Clone下來。
  2. 接下來請到Arduino官網下載Arduino IDE,我們將會使用這款IDE開發。
  3. 請檢查開發板是否正確連接(Mac, windows 位置以及名稱可能不一樣)

4. 請檢查開發板是否正確連接(Mac, windows 位置以及名稱可能不一樣)

如果一直沒有看到 PORT “/dev/cu.SLAB_USBtoUART”,請安裝ESP32的開發板驅動程式

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 


如何註冊自己的產品?

  1. 如果你還沒有LINE@可以註冊一個,因為LINE Things product需要綁在 LINE OA or LINE@

2. 將LIFF ID, Channel Access Token 按照文件上的指示,註冊產品

3. 註冊完之後,請將serviceUuid複製下來,貼到範例 Code(sample.ino) 和範例的LIFF APP code(liff-app > liff.js)

4. 接下來就可以自己修改範例的LIFF Code,並且Deploy
成果如下:


範例延伸: 智慧門鎖應用

應用情境

「 如果有一天,我可以用我的手機當作家門鑰匙,那該有多方便呢?」

 不知道多少人曾經因為忘記攜帶鑰匙,而有被反鎖的經驗呢? 

筆者改編了一下範例程式碼並且簡單組了一個常見的電磁門鎖, 這是還沒有打開門鎖的樣子

簡單的電路圖如下,方向沒有特定,紅色為火線:

這是打開門鎖(通電中)的樣子

結合liff.getProfile()可以顯示使用者名稱以及照片:

按下「開鎖」即可將門鎖打開,會變成下面這個畫面,

為了操作方便,按下按鈕之後電磁鎖會一直處於通電狀態,為了防止線圈被燒壞,最多只能通電十秒。

開鎖之後會將開鎖的人以LINE Notify Message通知聊天室,就可以知道是誰開了你家的門

範例程式碼

如何部署範例程式碼

  • 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後台修改設定

展示影片

更多詳細的資訊可以參照以下優先順序閱讀:

  1. LINE Things Product從開發到上線: https://developers.line.biz/en/docs/line-things/getting-started/
  2. 註冊 LINE Things Product: https://developers.line.biz/en/docs/line-things/regist-product/
  3. 與LINE Things相容的產品規格: https://developers.line.biz/en/docs/line-things/create-product/

開發中可能會遇到的問題以及眉角

  1. Click count 沒有作用?!
    經筆者測試是要按ESP32開發板上面的Boot按鈕才有效,然而也有可能是因為連線斷掉而Cache還在的原因,請試著將裝置Unlink後再重新連線。
  2. 我已經改了名稱也Deploy前端頁面和程式碼到開發版了,怎麼還是LINE Things Starter?
    如同上一個問題,修改程式碼之後請務必將連線解除後重新連線,然而在部分手機上有出現Cache無法立即清除的情況,如果在App裡面解除連動沒有用,麻煩到手機的「設定」> 「藍芽」找到您的裝置並且解除連動。
  3. 為什麼Unlink之後在裝置列表上面看不到我的裝置?
    如果您的裝置是正常運行的狀態下,請退出LINE Things tab後再進去一次,您的裝置便會重新顯示。

結語

筆者私人的手機是iPhone,筆者自己測試在雙平台都可以使用,目前除了Cache的問題還有待解決之外,可以需要開發的部分其實只有網頁以及板子的部分。相較於以往傳統的App開發,開發者只需要專注在產品上面。

以往要控制智慧家電,使用者必須要安裝專用App,導致手機裡充斥著各家廠商的App。有時會想說如果有一個遙控器可以控制家裡所有的家電那該有多好,而現在這個想法在LINE Things上終得實現。

只需要一個Channel便可以在上面註冊不同的產品,使用者可以在LINE裡面控制各式各樣的智慧家電,不需要額外安裝過多的應用程式了。

快速更新,快速迭代