🟠 micro:bit(MakeCode 擴充)

MBC 通用 I2C 版的循行者、測距者、掌控者、IMU 陀螺儀與神攝手,都能接 BBC micro:bit V1/V2:在 MakeCode 加一個擴充 pxt-mbc-sensors v2,積木區就多出「MBC 感應器」分類,每個數值一顆積木,內部走 MBC 通用 I2C 協議 v2。

重要

上機待測:擴充 v2.0.5 已在 MakeCode 編譯通過(V1+V2),但還沒有接實機逐顆積木核對數值。積木名稱以 GitHub 發布版為準:https://github.com/contactmbcrobot/pxt-mbc-sensors。實測後本頁會更新。


加入擴充

  1. 打開 https://makecode.microbit.org/ → 新專案。
  2. 點積木區下方的 進階 → 擴充(齒輪選單裡也有「擴充」)。
  3. 在搜尋框貼上網址 https://github.com/contactmbcrobot/pxt-mbc-sensors,按 Enter。
  4. 點出現的 mbc-sensors 卡片,積木區會多出「MBC 感應器」分類(循行者、測距者、掌控者、陀螺儀、神攝手、裝置 六組)。
  5. 編輯器語言切到 繁體中文(右上齒輪 → Language),積木就會顯示中文。

提示

不需要送審、不需要下載檔案:老師把上面這個網址給學生貼就能用。要固定版本可貼 https://github.com/contactmbcrobot/pxt-mbc-sensors#v2.0.5。

接線

micro:bit 的 I2C 腳位是固定的:P19 = SCL、P20 = SDA(金手指邊緣接頭,要用擴充板或鱷魚夾轉接板才接得到)。MBC 4P 感應器線的 TX 接 SCL、RX 接 SDA,跟接 Arduino 時是同一條線。

感應器 micro:bit 說明
SCL(TX) P19 I2C 時脈
SDA(RX) P20 I2C 資料
VCC 3V 或外部 5 V 看下表,耗電大的產品不能吃 micro:bit 的 3V
GND GND 外部供電時 GND 要和 micro:bit 共地
產品 供電 原因
循行者 8/16 路、測距者 2 路、掌控者 PS2、IMU 陀螺儀 micro:bit 3V 可用(電池供電時建議外部 5 V) STM32 產品,耗電小
測距者 8 路 一定要外部 5 V 8 顆雷射同時量測,電流超過 3V 腳能給的
掌控者 PS4/PS5 一定要外部 5 V ESP32 藍牙接收,瞬間電流大
神攝手(含舊版) 一定要外部 5 V ESP32 相機+螢幕

多個產品可以串在同一組 P19/P20 上,只要 I2C 位址不同(出廠位址:循行者 0x16、測距者 0x29、掌控者 0x42、陀螺儀 0x6A、神攝手 0x4C)。

硬體關卡

項目 狀況
電壓準位 MBC 產品的穩壓器吃 3.3 V 或 5 V 都可以,I2C 線是 3.3 V 準位,跟 micro:bit 相容,不需要準位轉換。
3V 腳電流 V1 約 90 mA、V2 約 190 mA;用電池時電壓可能掉到 2 V 多。超過的產品(上表)一律外部供電。
V1 與 V2 差異 V1 的 I2C 線和板上加速度計共用,感應器卡住 SDA 會連帶讓指南針、加速度計失效;V2 把外部 I2C 分開了。兩版都用 100 kHz。
時脈延展(clock stretching) STM32 產品(循行者、測距者、PS2、陀螺儀)準備資料時會拉住 SCL;micro:bit V2 的 nRF52 對時脈延展有已知問題(errata 219),V1/V2 各要實測,不穩就改韌體不延展。ESP32 產品(PS4、神攝手)不延展,擴充已內建「寫完編號等 2 ms 再讀」。
上拉電阻 micro:bit 板上已有 4.7 kΩ 上拉;產品板也有時並聯會變強,正常情況仍可用。
同位址不能同接 循行者 8 路和 16 路都是 0x16、測距者 2 路和 8 路都是 0x29、PS2 和 PS4 都是 0x42,兩個同類產品要一起接時,先用「裝置 → 把位址 … 改成位址 …」積木把其中一個改掉(存在感應器裡,重開機生效),再用「循行者 改用位址」這類積木告訴擴充新位址。
裝置沒接時 讀值積木回 0(內部的 −32768 已過濾)、是/否積木一律回 否,不會報錯也不會停。0 也可能是真的讀值(線在正中間、東西貼在前面、色相紅色),所以先用「裝置 → 等位址 … 的裝置就緒」或「位址 … 的裝置就緒?」確認接線。

積木清單(83 顆)

每顆一行:積木文字(繁中 | 英文)、功能、範圍。標 進階 的在分類的「…更多」裡。

裝置(共用,進階)

積木 功能 範圍
位址 … 的裝置就緒? | device at … is ready 裝置有回應且 F3 bit0 = 1 是/否
等位址 … 的裝置就緒,最多 … 毫秒 | wait for device at … ready, timeout … ms 等到就緒或逾時 0 ~ 60000 ms,預設 5000
位址 … 的裝置 出廠 ID | device at … factory id F0 低 byte:出廠位址(改位址後不變) 0x16/0x29/0x42/0x6A/0x4C
位址 … 的裝置 類別 | device at … kind F0 高 byte:循行者路數 8/16、測距者顆數 2/8、掌控者 1=PS2/2=PS4、陀螺儀 1、神攝手 3=目前的神攝手(1=舊版學校版/2=舊版 WRO 版) 0 ~ 255
位址 … 的裝置 協議版本 | device at … protocol version F1,這個擴充要 2 2
位址 … 的裝置 韌體版本 | device at … firmware version F2 換成「主.次」字串 例 "4.0"
位址 … 的裝置 狀態旗標 | device at … status flags F3 整個 byte 0 ~ 255
位址 … 的裝置 狀態 bit … | device at … status bit … F3 的某一個 bit bit 0 ~ 7
位址 … 的裝置 更新序號 | device at … update counter F4,每 10 ms +1,不動=裝置忙碌 0 ~ 255
位址 … 的裝置 開機秒數 | device at … uptime (s) F5 0 ~ 32767
把位址 … 的裝置 改成位址 … | change device at … to address … F8 換位址,存進 EEPROM,重開機生效 0x08 ~ 0x77
位址 … 的裝置 回出廠位址 | restore factory address of device at … F8 [00][FF],重開機生效 —
位址 … 的裝置 重新開機 | reboot device at … EF —

循行者(8 路/16 路,0x16)

積木 功能 範圍
循行者 線位置 | line position 線在哪一路,站在車後往前看 負=左 −8 ~ +8(8 路)/−16 ~ +16(16 路),0 = 正中
循行者 細位置 | fine line position 線位置的細分,與線位置同號 −100 ~ +100
循行者 看到線? | line is seen 線段數 > 0 是/否
循行者 線寬 | line width 壓到線的路數 0 ~ 8/16,0 = 沒線
循行者 線段數 | line segments 0 丟線、1 一條線、≥2 分岔/十字 0 ~ 4(8 路)/0 ~ 8(16 路)
循行者 壓線位元圖 | line bitmap bit0 = 第 1 路(最左)… 0 ~ 255/0 ~ 65535
循行者 第 … 路在線上? | channel … is on the line 位元圖的某一路 路 1 ~ 16
循行者 第 … 路光值 | channel … reflect 校準後光值,0 黑 ~ 100 白 0 ~ 100
循行者 最後離線方向 | last exit direction 丟線前線在哪一側,負=左 −8 ~ +8/−16 ~ +16
循行者 門檻 | line threshold 目前「在線上」的光值門檻 1 ~ 99,預設 8 路 50、16 路 40(16 路 2026-11-03 以前出貨的是 50)
循行者 校準次數 | line calibration count(進階) 開機後完成的校準次數 0 ~ 255
循行者 校準中? | line follower is calibrating(進階) F3 bit2 是/否
循行者 循 … 線 | line follower follow … line 黑線(E0,預設)/白線(E1) 黑/白
循行者 校準 … | line follower calibrate … 目前讀值記為黑(E2)/記為白(E3)/5 秒動態掃描(E7),存進 EEPROM 3 種
循行者 門檻設為 … | line follower set threshold … E4,只存 RAM,重開機回預設(8 路 50、16 路 40) 1 ~ 99
當循行者 … | on line … 事件:丟線/找回線/分岔 3 種
循行者 改用位址 … | line follower use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

測距者 2 路(0x29)

積木 功能 範圍
測距者 2 路 … 距離(…) | distance 2-ch … (…) 左/右那一顆的距離,公分或公釐 0 ~ 120 cm(120 = 沒東西)/0 ~ 1200 mm
測距者 2 路 較近距離(公分) | distance 2-ch nearest (cm) 左右取較近 0 ~ 120
測距者 2 路 平均距離(公釐) | distance 2-ch average (mm) 左右平均(=EV3 模式 3/SPIKE 模式 6) 0 ~ 1200
測距者 2 路 … 感應器正常? | distance 2-ch … sensor is OK(進階) 該顆初始化成功且沒故障 是/否
當測距者 2 路 距離小於 … 公分 | on distance 2-ch nearer than … cm 較近距離跌破門檻時觸發一次 1 ~ 120,預設 10
測距者 2 路 改用位址 … | distance 2-ch use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

測距者 8 路(0x29)

積木 功能 範圍
測距者 8 路 最近距離(…) | distance 8-ch nearest (…) 8 顆裡最近的,公分或公釐 0 ~ 120/0 ~ 1200
測距者 8 路 最近方向 | distance 8-ch nearest direction 最近目標在哪個方向,負=左 −8 ~ +8,0 = 正前方,±8 = 沒目標
測距者 8 路 最空曠距離(公分) | distance 8-ch most open (cm) 最遠那個方向的距離 0 ~ 120
測距者 8 路 最空曠方向 | distance 8-ch most open direction 最遠的方向,負=左 −7 ~ +7
測距者 8 路 正前方距離(…) | distance 8-ch front (…) 第 4、5 顆平均 0 ~ 120/0 ~ 1200
測距者 8 路 第 … 顆距離(…) | distance 8-ch sensor … (…) 單顆,1 = 最左、8 = 最右 顆 1 ~ 8
測距者 8 路 第 … 顆正常? | distance 8-ch sensor … is OK(進階) 該顆初始化成功且沒故障 是/否
當測距者 8 路 距離小於 … 公分 | on distance 8-ch nearer than … cm 最近距離跌破門檻時觸發一次 1 ~ 120,預設 10
測距者 8 路 改用位址 … | distance 8-ch use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

開機後約 2 ~ 4 秒 8 顆才初始化完成,先用「裝置 → 等位址 0x29 的裝置就緒」再讀距離。

掌控者(PS2/PS4/PS5,0x42)

積木 功能 範圍
掌控者 按鈕 … 被按住? | gamepad button … is pressed 16 鍵任一顆 select/share、L3、R3、start/options、上右下左、L2、R2、L1、R1、▲●✕■
掌控者 十六鍵位元圖 | gamepad buttons bit mask PSX 排列:bit0 select、1 L3、2 R3、3 start、4 上、5 右、6 下、7 左、8 L2、9 R2、10 L1、11 R1、12 ▲、13 ●、14 ✕、15 ■ 0 ~ 65535
掌控者 …(0~15) | gamepad … buttons (0-15) 四鍵一組:方向鍵(上 1 右 2 下 4 左 8)/形狀鍵(▲1 ●2 ✕4 ■8)/肩鍵(L2 1 R2 2 L1 4 R1 8)/功能鍵(select 1 L3 2 R3 4 start 8) 0 ~ 15
掌控者 搖桿 … | gamepad joystick … 左 X/左 Y/右 X/右 Y,右、上為正 −100 ~ +100,0 = 中間
掌控者 扳機 … 類比值 | gamepad trigger … analog L2/R2 壓力(PS2 數位手把按下 = 255) 0 ~ 255
掌控者 手把已連線? | gamepad is connected F3 bit1 是/否
掌控者 電量(百分比) | gamepad battery percent PS4/PS5 手把電量;PS2 恆 0 0 ~ 100
掌控者 系統鍵 … 被按住? | gamepad system button … is pressed PS 鍵/擷取鍵(PS4/PS5 才有) 是/否
掌控者 手把類型 | gamepad type 0 無、1 PS2 數位、2 PS2 類比、3 PS4、4 PS5 0 ~ 4
掌控者 震動 強度 … | gamepad rumble strength … E5,PS4/PS5 手把震動 200 ms;PS2 忽略 0 ~ 255,0 = 停
掌控者 燈條顏色 … | gamepad light bar colour … E6,PS4/PS5 燈條 RGB;PS2 忽略 顏色
當掌控者 按鈕 … … | on gamepad button … … 事件:某鍵按下/放開 16 鍵 × 2
掌控者 改用位址 … | gamepad use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

陀螺儀 IMU(0x6A)

積木 功能 範圍
陀螺儀 … 航向(°) | IMU heading … (°) 融合/陀螺 3D/陀螺 1D/磁力 四種航向,超過 360 繼續累加,左轉為負 −32768 ~ 32767
陀螺儀 轉向角速度(0.1 °/s) | IMU turn rate (0.1 °/s) 垂直軸角速度,123 = 12.3 °/s −32768 ~ 32767
陀螺儀 俯仰角(°) | IMU pitch (°) 抬頭/低頭角度 °
陀螺儀 俯仰角速度(0.1 °/s) | IMU pitch rate (0.1 °/s) 俯仰方向角速度 −32768 ~ 32767
陀螺儀 … … 軸 | IMU … axis … 原始值:角速度(0.1 °/s)/加速度(mg)/磁力(mG)的 X/Y/Z −32768 ~ 32767
陀螺儀 朝上的面 | IMU face up 0 +X、1 +Y、2 +Z、3 −X、4 −Y、5 −Z 0 ~ 5
陀螺儀 朝上的面是 …? | IMU face up is … 判斷某一面朝上 6 面
陀螺儀 磁力信任度 | IMU magnetic trust 磁力計被採信的程度 0 ~ 255
陀螺儀 磁場干擾度 | IMU magnetic disturbance 越高干擾越大 0 ~ 255
陀螺儀 …? | IMU is … 狀態旗標:靜止/已擷取安裝軸/安裝過歪/加速度計校準中/磁力計校準中/磁力融合已初始化/磁力自動校準已收斂 是/否
陀螺儀 航向歸零 | IMU zero heading E0,所有航向歸 0 —
陀螺儀 校準 … | IMU calibration … E1 ~ E4:加速度計開始/結束、磁力計開始/結束,結果存在感應器 4 步
當陀螺儀 轉了 … ° | on IMU turned by … ° 融合航向每變化指定角度觸發一次 例 90
陀螺儀 改用位址 … | IMU use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

神攝手舊版(學校版/WRO 版,0x4C,停止支援)

這一組積木給舊版神攝手用。目前的神攝手在擴充裡還沒有積木,用 MakeCode 的 JavaScript 讀,看 神攝手 × micro:bit。

積木 功能 範圍
神攝手 有找到色塊? | camera blob is found 學校版:有找到目標顏色的色塊 是/否
神攝手 色塊 … | camera blob … 學校版:X/Y/寬/高/面積 X 0 ~ 100、Y 0 ~ 75(下→上)、寬 0 ~ 100、高 0 ~ 75、面積 = 寬×高
神攝手 顏色 … | camera colour … 學校版取色點:色相/飽和度/明度 色相 0 ~ 100(−1 = 黑白灰)、飽和 0 ~ 100、明度 0 ~ 100
神攝手 顏色是黑白灰? | camera colour is black / white / grey 取色點沒有色相 是/否
神攝手 動態 | camera motion 學校版畫面變化量 0 ~ 100
神攝手 色點 … 顏色碼 | camera spot … colour code WRO 版(HUE12):0 ~ 239 彩色、240 ~ 245 白、246 ~ 250 黑、255 = 色點沒開 色點 1 ~ 12
神攝手 色點 … 鮮豔度 | camera spot … vividness WRO 版該色點飽和度 0 ~ 255
神攝手 色點 … 是 …? | camera spot … is … WRO 版:彩色/白/黑/沒開 是/否
當神攝手 色塊 … | on camera blob … 學校版事件:找到/丟失 2 種
神攝手 改用位址 … | camera use address …(進階) 位址改過時告訴擴充 0x08 ~ 0x77

舊版神攝手的 I2C 用 SDA = IO3、SCL = IO1(2026-10-21 定案),接上 I2C 後 USB 序列監看就沒了;硬體已確認可做,上機待測。

各產品的 micro:bit 頁與範例

每款產品一頁,列出它用到的積木、對應的 I2C 值編號與 JavaScript 寫法;範例頁每款 5 支(.ts,可直接貼進 MakeCode 的 JavaScript 模式)。

產品 積木說明 範例(5 支)
循行者 8 路 line8 × micro:bit 範例
循行者 16 路 line16 × micro:bit 範例
測距者 2 路 tof2 × micro:bit 範例
測距者 8 路 tof8 × micro:bit 範例
掌控者 PS2 ps2 × micro:bit 範例
掌控者 PS4/PS5 ps4 × micro:bit 範例
IMU 陀螺儀 imu × micro:bit 範例
神攝手 神攝手 × micro:bit 範例
神攝手舊版(停止支援) esp32cam × micro:bit 範例

注意

MBC EXP6 六路馬達擴充器(適用 SPIKE™)走 UART,不在這個擴充裡;Servo6 沒有 micro:bit 版。

JavaScript 寫法

積木都對應 mbc 命名空間的函式,切到 JavaScript 模式可以直接寫:

basic.forever(function () {
    if (mbc.waitReady(mbc.ADDR_TOF, 5000)) {
        basic.showNumber(mbc.tof8Nearest(MbcDistUnit.Cm))
    }
    basic.pause(100)
})

進階:mbc.readValue(位址, 編號) 直接讀任一個 I2C v2 值(int16 小端,裝置不在回 −32768),mbc.writeCmd(位址, 編號, [參數]) 送命令,編號看各產品的指令參考。

下載與原始碼

LINE 詢價選購指南