MBC EXP6 六路馬達擴充器 × 樂高官方 SPIKE App

三個步驟用官方 SPIKE App 的 Python 控制 EXP6

在樂高官方 SPIKE App 寫 Python 一定照這個順序:先匯入函式庫,再建立物件、幫 EXP6 取名字,最後才用這個名字去呼叫功能(轉馬達、讀感應器)。左邊一步一步做,右邊的程式會跟著長出來;在模擬 EXP6 上選每個擴充孔接什麼,就能看到馬達怎麼轉、程式會印出什麼。

你的主機:SPIKE Prime,用官方 App 的教育版(SPIKE 3)。官方 App 的積木只能控制樂高自己的零件,EXP6 要用 Python。EXP6 只能接 SPIKE Prime(不能接 EV3),要接上自己的電池,馬達才會動。
1

匯入函式庫

官方 App 不能像 Pybricks 那樣匯入檔案,所以要先把 EXP6 的函式庫裝進主機一次,之後每個 Python 專案最上面寫三行匯入就能用。沒有匯入,後面寫的 MBC_EXP6 主機看不懂,會出現 ImportError 或 NameError。

  1. 下載 install_exp6_lib.llsp3(安裝程式)。檔名是 MBC_exp6_SPIKE_App_Lib(裝進主機的函式庫名字)。
  2. 主機用 USB 或藍牙連上官方 SPIKE App,「檔案」→「開啟」→ 選這個檔,按 ▶ 執行一次。下方主控台出現「安裝成功!(Installation Successful!)」就裝好了。
  3. 只要裝一次;主機重新安裝或更新韌體之後函式庫會被清掉,要再執行一次。不要了就執行下載包裡的 Uninstall_MBC_exp6_Lib.py。
  4. 新增一個 Python 專案,在最上面寫下面這三行(右邊程式標 ① 的地方)。

第一次裝?一步一步的版本(也可以複製貼上 Install_MBC_exp6_Lib.py 來裝):教育版安裝教學。

2

建立物件:幫 EXP6 取名字

要「建立一個物件」:告訴程式 EXP6 的 Host 線插在主機哪個孔,並幫它取個名字。之後要轉馬達、讀感應器,都是叫這個名字。官方 App 版沒有多工,程式一行一行往下跑,等待用 time.sleep()。

EXP6 的 Host 線插在主機哪個孔?

程式裡的 port.C 是主機的孔:port.A~port.F(官方 App 寫字母;Pybricks 才寫數字 3)。後面功能括號裡的第一個數字,才是 EXP6 上的擴充孔 1~6,兩個不要搞混。

3

使用功能

寫法都是「exp6.功能名稱(擴充孔, …)」:名字+小數點+功能,括號裡第一個數字通常是 EXP6 上的擴充孔 1~6。點一個功能,程式和輸出會換成它的範例,模擬 EXP6 的馬達也會照著動。

模擬 EXP6(從上面看):選每個擴充孔接什麼,看馬達怎麼轉、右邊印出什麼

一開始孔 1、2 接馬達,孔 4 顏色、孔 5 超音波、孔 6 力量感應器,跟範例程式用的孔一樣。模擬畫面是示意:馬達速度 1% 當成每秒 10 度(實際要看馬達型號),感應器的數值也簡化過;紅色指針是轉軸的朝向,↻ = 順時針。官方 App 版沒有看門狗:程式跑完(或按停止),馬達會維持最後一個指令一直轉,所以程式最後要寫 exp6.stop_all(1)。顏色照官方 App 版函式庫用紅綠藍換算(綠色是 5、看不到顏色是 0,跟 Pybricks 版不一樣);超音波看不到東西讀到 -1。

每個功能的範例

33 個功能(官方 App 版函式庫的功能;Pybricks 版的 connected、run_task 這裡沒有),每個都有一段範例。轉馬達、停止這類動作多半放在迴圈外只做一次;讀值放進迴圈一直讀。按「試試看」會切到第 3 步,右邊的程式和輸出會換成這個範例。

完整範例

兩輪小車走正方形(左輪孔 1、右輪孔 2)

        

!只改最上面「要改的地方」就好。轉不到 90 度:把 TURN 改大一點;轉太多:改小。邊太長或太短:改 SIDE(720 度大約 35 公分)。車子往後退:把 set_motor_inverted(1, True) 的 1 改成 2。

直接開範例最快:已經寫好的 5 個官方 App 專案(.llsp3)

!先裝好函式庫,再用官方 App「檔案」→「開啟」這個檔,按 ▶ 就能跑(EXP6 的 Host 線插主機 C 孔、接上 EXP6 的電池)。每個範例的說明、接線和「會看到什麼」在 EXP6 SPIKE 新手範例頁;全部指令的說明在 官方 App 專區。

MBC 感應器插在 EXP6(循行者、測距者、掌控者、神攝手)

主機的孔不夠用時,MBC 感應器可以直接插在 EXP6 的 1~6 號孔,跟插在主機上一樣,插上就能用、不用另外設定。EXP6 韌體要 2026-11-03 以後。官方 App 版只要裝好上面那一個函式庫(裡面已經有 MBC 感應器),不用另外匯入產品檔。跟上面一樣三步:選感應器、選它插在 EXP6 的幾號孔、選功能,右邊的程式會跟著換。

1

匯入

插在 EXP6 上的是哪一款?

官方 App 版的函式庫 MBC_exp6_SPIKE_App_Lib 已經包含 MBC 感應器,裝進主機一次之後,每個專案寫上面三行就好(from hub import port、import time、from MBC_exp6_SPIKE_App_Lib import MBC_EXP6)。

    2

    建立物件:先 EXP6,再感應器

    感應器插在 EXP6 的幾號孔?

    3

    使用功能:名稱跟直插主機一樣

    對 MBC 感應器下命令:cmd()、wait_done()、cmd_state()

    循行者 8 路:改二值化門檻(E4)

    除了讀值,也可以透過 EXP6 對 MBC 感應器下命令,命令碼和參數跟感應器直接插主機時一樣(循行者 8 路見指令參考)。cmd(命令碼, 參數…):命令碼 0xE0~0xEE、參數最多 5 個(-9999~9999),回傳序號;同一個命令、同樣參數預設不重送,要重做加 again=True。wait_done():等做完,True 完成,False 是失敗、拒絕或逾時(預設等 10 秒);cmd_state():0 完成、1 執行中、2 失敗(參數不對)、3 拒絕(這款沒有這個命令);busy():還沒做完是 True。每個命令從送出到收到結果約 0.1~0.2 秒。

    from hub import port
    import time
    from MBC_exp6_SPIKE_App_Lib import MBC_EXP6
    
    exp6 = MBC_EXP6(port.C)
    line8 = exp6.line8(5)          # 循行者 8 路插在 EXP6 的 5 號孔
    
    seq = line8.cmd(0xE4, 60)      # 二值化門檻改成 60(1~99,重開機回到 50)
    if line8.wait_done():          # 等感應器做完:True 完成
        print("門檻改好了,序號", seq)
    else:
        print("沒成功,狀態", line8.cmd_state())   # 2 失敗、3 拒絕
    print("黑白:", line8.bin_raw())
    line8.cmd(0xE4, 50)            # 改回預設 50
    line8.wait_done()

    !黑白校準 E2/E3、5 秒校準 E7 會寫進感應器,練習時不要亂送;E4、E9 重開機就回到預設。目前只有 8 路循行者實測過下命令。改失敗、拒絕的例子在下載包裡的範例 10(examples/10_MBC_Commands.py)。

    使用注意

    1. 一定要接 EXP6 的電池。擴充孔上的馬達全部靠 EXP6 自己的電池(建議 2S 鋰電池),只接 Host 線、不接電池,什麼都不會動。EXP6 的擴充孔可以接樂高馬達、樂高 SPIKE 的顏色、超音波、力量感應器,也可以接 MBC 感應器(見上面「MBC 感應器插在 EXP6」)。
    2. 兩種孔不要搞混。MBC_EXP6(port.C) 的 port.C 是主機的孔;exp6.motor_run(1, 50) 的 1 是 EXP6 上的擴充孔(板子上印的 1~6)。
    3. 沒有看門狗,馬達要自己停。程式跑完、當掉或按停止,馬達都會維持最後一個指令。每個程式最後都寫一行 exp6.stop_all(1)。等待用 time.sleep();keep_alive_wait()、keep_alive() 只是為了讓 Pybricks 版的程式也能跑才保留。
    4. 轉角度送出就往下做,不會等轉完。motor_run_degrees()、motor_track_target() 後面要等一下,或一直讀角度等它到。剛開機時馬達大約要 1~2 秒才準備好,程式開頭先等 get_device_id(孔) == 5。
    5. 換另一種寫法之前,先讓 EXP6 斷電一次(關主機或拔掉 Host 線)。EXP6 一旦跑過 Pybricks 程式,就會一直用 Pybricks 的方式溝通,直到重新開機,這時候官方 App 會連不上。