動機:可否在 Excel 動態圖表展示 micro:bit 的各項感測數據(acceleration、light level、compass、temperature)...
準備環境:
1.Windows 10筆電
2.Microsoft Excel 2016
3.BBC micro:bit(需插USB數據線)
實作步驟:
業經Google搜尋後找到 Yigal Edery ( https://techcommunity.microsoft.com/t5/Excel-Blog/Excel-and-Micro-Bit-Hacking-for-fun-and-creativity/ba-p/63603 )分享一則作法,並看了其 Data Flow,如下圖
發現這就是我要的效果!!
確認了接收數據正常...
再下載Yigal Edery提供的範例 Excel 檔案 ( https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/ExcelBlog/48.6/1/SensorVisualizer_BlogVersion.zip )
並改寫其 巨集VBA程式 及 儲存格公式,如下:
提供.hex分享連結:https://drive.google.com/file/d/0B_4eUrknq7N1M2NkR2VCSmxBaVE/view?usp=sharing
影片展示:
後記:其實,也可以運用Google Apps Script 與 Spreadsheet 來做...蒐集了raw data數據後就可以做後續統計分析及應用了~~~
感謝:
Yigal Edery, Principal Program Manager in the Excel Team, https://techcommunity.microsoft.com/t5/Excel-Blog/Excel-and-Micro-Bit-Hacking-for-fun-and-creativity/ba-p/63603
準備環境:
1.Windows 10筆電
2.Microsoft Excel 2016
3.BBC micro:bit(需插USB數據線)
實作步驟:
業經Google搜尋後找到 Yigal Edery ( https://techcommunity.microsoft.com/t5/Excel-Blog/Excel-and-Micro-Bit-Hacking-for-fun-and-creativity/ba-p/63603 )分享一則作法,並看了其 Data Flow,如下圖
![]() |
圖摘自: https://techcommunity.microsoft.com/t5/Excel-Blog/Excel-and-Micro-Bit-Hacking-for-fun-and-creativity/ba-p/63603 |
- 先將 micro:bit 插上筆電,並查詢其COM port位置,如下圖
- 再到Microsoft MakeCode開發環境( https://makecode.microbit.org/ )拉選積木(我另外增加了二個數據),如下圖
- 並按下 [Download] 產生 .hex 檔案,再 傳送到 MICROBIT磁碟(N:)...micro:bit 會顯示 draw a circle 畫個圈圈會變成 smiley face...
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
basic.forever(() => { | |
serial.writeString("D:") | |
serial.writeNumber(input.acceleration(Dimension.Strength)) | |
serial.writeString(",") | |
serial.writeNumber(input.lightLevel()) | |
serial.writeString(",") | |
serial.writeNumber(input.compassHeading()) | |
serial.writeString(",") | |
serial.writeNumber(input.temperature()) | |
serial.writeLine("") | |
basic.pause(100) | |
}) |
- 接著,我需要確認(測試) USB Serial 接收micro:bit數據是否正常?!所以,我依照官方建議( https://www.microbit.co.uk/td/serial-library )安裝了 Tera Term 並操作如下圖...
確認了接收數據正常...
再下載Yigal Edery提供的範例 Excel 檔案 ( https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/ExcelBlog/48.6/1/SensorVisualizer_BlogVersion.zip )
並改寫其 巨集VBA程式 及 儲存格公式,如下:
- 先開啟 Excel 中的 開發人員/巨集 修改 VBA 的程式碼,如下圖
- 程式如下:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
' Option Explicit | |
Dim StopReading As Boolean | |
Sub StartBtn_Click() | |
' | |
' StartBtn - Starts reading from the Micro:Bit into the grid | |
' | |
Dim COM_Byte As Byte | |
StopReading = False | |
Cells(1, 1) = "Reading..." | |
' Debug.Print "Reading..." | |
On Error GoTo ErrorHandler | |
Open "COM3:115200,N,8,1" For Random As #1 Len = 1 ' Open the com port(must be modified) | |
PrevRow = 0 | |
Row = 0 | |
While (StopReading = False) | |
EOL = False | |
Data$ = "" | |
While (Not EOL And Not StopReading) | |
Get #1, , COM_Byte | |
If COM_Byte = 13 Then | |
EOL = True | |
ElseIf (COM_Byte <> 10) And (COM_Byte <> 0) Then | |
Data$ = Data$ & Chr(COM_Byte) | |
End If | |
Wend | |
If Not StopReading And Left(Data$, 2) = "D:" Then | |
Row = (Row + 1) Mod 30 | |
Cells(PrevRow + 2, 4) = "" ' Clear previous location indicator | |
Cells(Row + 2, 4) = "'==>>" ' Display new location indicator | |
Cells(Row + 2, 5) = "'" + Right(Data$, Len(Data$) - 2) ' Enter data into the grid as a string | |
PrevRow = Row | |
DoEvents | |
DoEvents ' Hack - Apparently, two DoEvents are required to get the charts to update live | |
End If | |
Wend | |
Cells(1, 1) = "Stopped!" | |
GoTo CloseFile | |
ErrorHandler: | |
Select Case Err.Number | |
Case 62 ' Nothing to read | |
Err.Clear | |
Resume Next | |
End Select | |
Cells(1, 1) = "Error :" + Err.Description | |
CloseFile: | |
Close #1 | |
' | |
End Sub | |
Sub StopBtn_Click() | |
StopReading = True | |
End Sub |
- 有關 Excel 內容說明如下:
- D欄:顯示目前讀取micro:bit數據的 raw data 在那一行
- E欄:利用VBA讀取 USB COM port 的數據並去除前面的 "D:" 二個字元
- F欄:利用公式 =FIND(",",En,1) 找出E欄字串的第一個comma(,逗號) 位置
- G欄:利用公式 =FIND(",",En,Fn+1) 找出E欄字串的第二個comma(,逗號) 位置
- H欄:利用公式 =FIND(",",En,Gn+1) 找出E欄字串的第三個comma(,逗號) 位置
- I欄:流水編號
- J欄:利用公式 =NUMBERVALUE(LEFT(En,Fn-1)) 取出E欄字串的 acceleration數據並轉換成 Number
- K欄:利用公式 =NUMBERVALUE(MID(En,Fn+1,Gn-Fn)) 取出E欄字串的 light level數據並轉換成 Number
- L欄:利用公式 =NUMBERVALUE(MID(En,Gn+1,Hn-Gn)) 取出E欄字串的 compass數據並轉換成 Number
- M欄:利用公式 =NUMBERVALUE(RIGHT(En,LEN(En)-Hn)) 取出E欄字串的 temperature數據並轉換成 Number
- 四個圖表類型:依數據表示方式,選擇折線圖、XY散佈圖、區域圖...等,並以顏色對應儲存格資料
- 二個按鈕( Start、Stop )分別對應VBA的 StartBtn_Click()、StopBtn_Click() 事件
- 有關 VBA程式碼 編修環境,我習慣展開如下圖,並使用 偵錯工具(F8) 來逐行debug...
問題&解決:
當我一切就序後,卻一直無法在 Excel 按下 [Start] 接收 micro:bit 的數據,且 Excel檔案會當掉,搜尋了Google很久也未獲解決方法,只好自己土法亂搞,因此,我刪除了所有的 COM port只剩下一個COM3,如下圖
就可以正常運作了...( 之前的 mbed Serial Port 是安裝micro:bit的官方驅動程式 https://os.mbed.com/media/downloads/drivers/mbedWinSerial_16466.exe 產生的,至於無法由VBA讀取的原因就有待查證了?!)
提供Excel分享連結:https://drive.google.com/file/d/0B_4eUrknq7N1RWpMUHB6d3hsYkk/view?usp=sharing
當我一切就序後,卻一直無法在 Excel 按下 [Start] 接收 micro:bit 的數據,且 Excel檔案會當掉,搜尋了Google很久也未獲解決方法,只好自己土法亂搞,因此,我刪除了所有的 COM port只剩下一個COM3,如下圖
就可以正常運作了...( 之前的 mbed Serial Port 是安裝micro:bit的官方驅動程式 https://os.mbed.com/media/downloads/drivers/mbedWinSerial_16466.exe 產生的,至於無法由VBA讀取的原因就有待查證了?!)
提供Excel分享連結:https://drive.google.com/file/d/0B_4eUrknq7N1RWpMUHB6d3hsYkk/view?usp=sharing
提供.hex分享連結:https://drive.google.com/file/d/0B_4eUrknq7N1M2NkR2VCSmxBaVE/view?usp=sharing
後記:其實,也可以運用Google Apps Script 與 Spreadsheet 來做...蒐集了raw data數據後就可以做後續統計分析及應用了~~~
感謝:
Yigal Edery, Principal Program Manager in the Excel Team, https://techcommunity.microsoft.com/t5/Excel-Blog/Excel-and-Micro-Bit-Hacking-for-fun-and-creativity/ba-p/63603
留言