使用 MacBook + Node.js + Web BlueTooth + BLE 來玩 micro:bit (Part I)

緣由:偶然機會在 micro:bit's FB 社群中看到有人分享一段demo影片 ( https://youtu.be/XEFl0JMgbag ),引發我興趣的是它使用 Web Bluetooth 來傳遞+控制 micro:bit ...之後,作者多次分享了許多的相關應用demo,遂請益之,惟作者高姿態回覆請關注 FB 訊息(就好像說:答案放在你面前,你...竟然還看不懂!!)...引發我的好奇心想要hack解析其技法...記錄如下~(區分成三部分)

目的:使用 MacBook (or Linux) + Node.js + Web BlueTooth BLE 來玩 micro:bit...

準備環境
1.MacBook / Linux 或 Raspberry Pi 3 (此篇用MacBook Pro筆電示範,其實 Windows10經測試不穩定、時好時壞...故放棄)
2.micro:bit板(可外接電池盒)
3.Android手機
4.WEB BlueTooth API

插播一段小插曲~
X                                                                        X                                                                           X
其實,我一開始在 Web BlueTooth API ( https://webbluetoothcg.github.io/web-bluetooth/#introduction ) 的官方文件鬼打牆了很久(可能是我笨),在 Windows10的筆電上又實作不出其範例,於是我另外找了一個網文 https://shimz.me/blog/microbit/5476 看了其影片 https://twitter.com/i/videos/tweet/909941838567530496 後確認是我要的(非常感謝作者願意分享了大部分的實作過程,雖然是日文且不太詳細)...
X                                                                        X                                                                           X

步驟
依據日本朋友的網文,具體說明了--二件事前準備,如下圖


  1. 先至網頁 参考:Flashing micro:bit firmware 依指示安裝相關的東東...
    • Prerequisites 中的 [See noble prerequisites] ,可以看到不同的作業系統要安裝的套件是不一樣的,我用 OS X ,只要安裝 install Xcode,但我直覺地反應不用管它...
    • 到 https://github.com/sandeepmistry/node-bbc-microbit#flashing-microbit-firmware 複製源碼 git 路徑,如下圖

    • 開啟 App--終端機,下載源碼(指令: git clone https://github.com/sandeepmistry/node-bbc-microbit.git ),如下圖

    • 再進入該目錄 node-bbc-microbit ,如下圖

    • 到 https://nodejs.org/en/ 下載並安裝 Node.js 如下圖


    • 回到 終端機 ,開始安裝... 看到 package.json 就知道要先安裝npm套件 (npm install),如下圖

    • 回到 https://github.com/sandeepmistry/noble 中的 Install 安裝 noblenpm install noble),如下圖

    • 檢查已安裝的套件 (ls node_modules),如下圖

    • 回到 https://github.com/sandeepmistry/node-bbc-microbit#flashing-microbit-firmware 安裝 bbc-microbitnpm install bbc-microbit -g),如下圖
               我第一次安裝時會出錯,經查 Google大神 加上 -g 可解決問題...

      2.下載 intel-hex file ( https://github.com/sandeepmistry/node-bbc-microbit/tree/master/firmware ) node-bbc-microbit-v0.1.0.hex 並複製至 micro:bit 中,之後在 5x5 LED會出現 Draw a Circle 在 (2,2) 位置,請自行完成畫一個 大O 的遊戲,它會出現不同的幾何圖點表示完成,再按 Reset鈕 重開 micro:bit 又會出現畫O遊戲一次...再出現第三次...如下圖(完成遊戲後會顯示三角形、第二次是六角形、第三次是 笑臉)
在此,解釋為何要更新此hex韌體呢?!
網頁上已有答案了...(This build removes pairing security and enables all BLE services.)
我在此,將 hex 複製到 new:bit 時會有三次畫O遊戲,而 micro:bit 則只會有一次...不知為何?!




經過一番的安裝,終於可以開始測試 examples...

測試
     1. 先進入 examples 目錄,查看有那些...如下圖

     2. 安裝 App -- LightBlue 來查看 Bluetooth BLE Services...如下圖
 
此時,可以看見 上方的 藍牙裝置連線符號,如下圖
 
      3. 測試 javascript 程式(12支),如下圖
請注意執行程式前,藍牙裝置不能有連線狀態(空的)...如下圖
         
在執行.js程式後 才有 藍牙連線符號...才正常(只能對一個 )...如下圖







以上測試,在 micro:bit 板子是正常的,但用 new:bit 執行時則無法顯示結果...不知原因在那?!

經過測試,在 Mac OS X 或 Linux 環境,利用 node.js 及 Web Bluetooth API 來寫 javascript 程式並透過 BLE 來與 micro:bit 互動,是很容易的...接下來,移植到 Web網頁程式 在 Chrome瀏覧器(電腦、平板、手機)上來玩,就不難了!!

在此,先暫停打住,且聽下回(Part II)分解...



後記:在我的資訊學習之路,我一直走的慢、不知所以然...也自認頭腦差、學歷差、閱讀技巧差、英文能力差等原因及藉口(也沒有財團或有錢的老闆資助栽培)&(家人也不是很支持--因為當我瘋狂專注於電腦時常常會忽略了陪伴家人),經常學學停停、虛度光陰,在職場也是起起落落。但憑藉著20%的電腦興趣+80%的白癡自學法,讓我這隻已經凋零的老笨鳥飛到了現在的境界(其實也沒什麼?!),深感受惠於網路及先進大神的眷顧,希望有朝一日回饋給後面的人我所看過的東西,也期望後進不要像我一樣浪費美好時光(且反對有人築起知識高牆),可以踏實的踩在我背上...看得更遠、更高...:-)

留言