神攝手 ESP32CAM × EV3 × Pybricks
這一頁只講 Pybricks v4/EV3 MicroPython v2:在 MINDSTORMS EV3 上用它讀神攝手 ESP32CAM的安裝步驟、每個值怎麼讀、能用的命令與範例。要換產品、主機或軟體,用上方的切換列。
安裝與設定
你需要
- 感應器:神攝手 ESP32CAM(EV3 版,RJ12 接頭)。
- 主機:LEGO MINDSTORMS EV3。
- 軟體(二選一):
- Pybricks v4:用 Chrome 打開 code.pybricks.com,EV3 要先裝 Pybricks 韌體(正式版已內建 EV3 韌體,2026-10 是 v4.1.1)。
- EV3 MicroPython v2.0:樂高官方「EV3 MicroPython」microSD 開機卡+VS Code 的「LEGO MINDSTORMS EV3 MicroPython」擴充套件。已經在用的人選這個。
安裝軟體
Pybricks v4
- 用 Chrome 打開 code.pybricks.com。
- 照網站說明把 EV3 換成 Pybricks 韌體。code.pybricks.com 正式版已內建 EV3 韌體(2026-10 是 v4.1.1)。本站範例最早在 v4.0.0b10 上機測過,v4.1.1 寫法相同。
- 打開範例:把
.py檔拖進編輯區,按執行。
EV3 MicroPython v2.0
- 用樂高官方 EV3 MicroPython 的 microSD 開機卡開機。
- 在 VS Code 裝好「LEGO MINDSTORMS EV3 MicroPython」擴充套件。
- 打開範例:把程式內容貼到
main.py,按 F5 下載執行。
讓軟體認得感應器
新手範例不用裝函式庫,直接讀感應器的資料:
- Pybricks v4 用
LUMPDevice(Port.S1),sensor.read(模式)拿到該模式的數值。 - EV3 MicroPython v2.0 一律用
Ev3devSensor讀。EV3 顯示成紅外線感應器的產品不要用InfraredSensor:換模式固定等約 1.1 秒,buttons()/beacon()/keypad()會丟錯或改掉數值。 - 可以直接讀 EV3-G、Classroom 讀不到的模式,所以標「僅 Pybricks/EV3 MicroPython/clev3r」的範例也能跑。
重要
不要在主迴圈裡頻繁切換模式。 EV3 硬體每次切換感應器模式都會有通訊等待延遲。依任務選定一種模式,整趟都用它。
接線
- 用連接線把感應器插在 EV3 的 1 號孔(1~4 任一孔都可以;程式裡
Port.S1~Port.S4選同一個孔)。 - EV3 先開機,再插感應器。
- 接頭卡榫朝上,輕輕推進去。
先在感應器上設定顏色
神攝手的設定都在感應器背面的彩色螢幕與按鍵上完成,不用電腦:
- 感應器要接上已經開機的主機才會啟動(螢幕先顯示「LEGO Sync...」),出現鏡頭畫面就可以使用。
- 短按側鍵進入設定選單,用左/右鍵選擇、確認鍵進入;在選單中長按側鍵 1 秒清除該組顏色。
- 設定好的顏色與鏡頭參數(亮度、對比、飽和度、曝光、白平衡、翻轉、鏡像)會自動保存,下次開機直接使用。
兩種 EV3 韌體
| 韌體 | EV3 上顯示成 | 能用的軟體 |
|---|---|---|
| 學校老師創意賽版(取色+色塊追蹤+動態偵測) | 紅外線感應器 | EV3-G、EV3 Classroom、Pybricks、clev3r |
| WRO 2026 版(HUE12,12 個色點) | 第三方感應器(type 95) | EV3-G(MBC 自訂積木)、clev3r、Pybricks;EV3 Classroom 讀不到 |
第一次測試
- 打開本頁範例 1,按執行(MicroPython 版按 F5)。
- EV3 螢幕上的數字跟著感應器前方的東西變化,就是接好了。
常見問題
- 找不到 EV3 的 Pybricks 韌體? 確認用的是 code.pybricks.com 正式版(2026-10 起內建 EV3 v4.1.1);舊的 ev3dev 版 Pybricks(microSD 卡)是另一套,本頁不適用。
- 數字一直不變? 拔掉感應器重插一次(EV3 要先開機再插)。
- 程式反應忽快忽慢? 主迴圈裡交叉讀了不同模式,每次切換都要等,改成只用一種模式。
- 匯入函式庫時出錯? 函式庫檔要匯入到同一個 Pybricks 專案,檔名必須跟
import的名字完全一致。
讀值(學校版)
程式假設感應器插 1 號孔,用 LUMPDevice 讀原始模式;EV3 MicroPython v2 寫法相同。
色相 hue
| 範圍 | 意思 |
|---|---|
-1~100 |
S1 取樣點色相 0 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
hue = sensor.read(0)[0] # 色相:-1~100
hue = sensor.read(1)[0] # 色相:-1~100
hue = sensor.read(2)[0] # 色相:-1~100
hue = sensor.read(3)[0] # 色相:-1~100
hue = sensor.read(5)[0] # 色相:-1~100模式 0 · int8 · IR-PROX 1×int8;模式 1 · int8 · IR-SEEK [色相, 飽和, 明度, 動態, X, Y, W, H];模式 2 · int8 · IR-REMOTE [色相, 飽和, 明度, 動態];模式 3 · int16 · IR-REM-A 1×int16(#65 已修成正確符號延伸,−1 = 0xFFFF);模式 5 · int16 · IR-CAL [色相, 飽和] 2×int16(已鎖住的模式,韌體與主機端都不再改)
飽和度 saturation
| 範圍 | 意思 |
|---|---|
0~100 |
S1 取樣點飽和度 0~100 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
saturation = sensor.read(1)[1] # 飽和度:0~100
saturation = sensor.read(2)[1] # 飽和度:0~100
saturation = sensor.read(5)[1] # 飽和度:0~100模式 1 · int8;模式 2 · int8;模式 5 · int16(已鎖住的模式,韌體與主機端都不再改)
明度 value
| 範圍 | 意思 |
|---|---|
0~100 |
S1 取樣點明度 0~100 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
value = sensor.read(1)[2] # 明度:0~100
value = sensor.read(2)[2] # 明度:0~100模式 1 · int8;模式 2 · int8(已鎖住的模式,韌體與主機端都不再改)
動態 motion
| 範圍 | 意思 |
|---|---|
0~100 |
全畫面動態量 0~100(畫面變化越多越大) |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
motion = sensor.read(1)[3] # 動態:0~100
motion = sensor.read(2)[3] # 動態:0~100模式 1 · int8;模式 2 · int8(已鎖住的模式,韌體與主機端都不再改)
色塊 X blobX
| 範圍 | 意思 |
|---|---|
0~100 |
色塊中心 X 0~100,左 = 0;沒找到 = 0 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
blobX = sensor.read(1)[4] # 色塊 X:0~100
blobX = sensor.read(4)[0] # 色塊 X:0~100模式 1 · int8;模式 4 · int8 · IR-S-ALT [X, Y, W, H](已鎖住的模式,韌體與主機端都不再改)
色塊 Y blobY
| 範圍 | 意思 |
|---|---|
0~75 |
色塊中心 Y 0~75,下 = 0、上 = 75;沒找到 = 0 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
blobY = sensor.read(1)[5] # 色塊 Y:0~75
blobY = sensor.read(4)[1] # 色塊 Y:0~75模式 1 · int8;模式 4 · int8(已鎖住的模式,韌體與主機端都不再改)
色塊寬 blobW
| 範圍 | 意思 |
|---|---|
0~100 |
色塊寬 W 0~100;0 = 沒找到 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
blobW = sensor.read(1)[6] # 色塊寬:0~100
blobW = sensor.read(4)[2] # 色塊寬:0~100模式 1 · int8;模式 4 · int8(已鎖住的模式,韌體與主機端都不再改)
色塊高 blobH
| 範圍 | 意思 |
|---|---|
0~75 |
色塊高 H 0~75;沒找到 = 0 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
blobH = sensor.read(1)[7] # 色塊高:0~75
blobH = sensor.read(4)[3] # 色塊高:0~75模式 1 · int8;模式 4 · int8(已鎖住的模式,韌體與主機端都不再改)
這個軟體讀不到:色塊面積、有找到色塊。要用這些值請改用 Arduino/mBlock/micro:bit。
讀值(WRO 版)
程式假設感應器插 1 號孔,用 LUMPDevice 讀原始模式;EV3 MicroPython v2 寫法相同。
色點 1~12 顏色碼 spotColor
| 範圍 | 意思 |
|---|---|
0~255 |
10 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
spotColor = sensor.read(0)[0:12] # 色點 1~12 顏色碼模式 0 · int32×8 · HUE12 8×int32 LE(32 B):24 byte = [色相, 鮮豔度]×12,每 3 byte 塞一個 int32(byte3 = 0);格 n 色相 = byte 2(n−1) → int32 k = idx/3、byte = idx%3;鎖住(已鎖住的模式,韌體與主機端都不再改)
色點 1~12 鮮豔度 spotVivid
| 範圍 | 意思 |
|---|---|
0~255 |
20 |
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
sensor = LUMPDevice(Port.S1) # 感應器插 1 號孔
spotVivid = sensor.read(0)[0:12] # 色點 1~12 鮮豔度模式 0 · int32×8 · 同 10~1B:格 n 鮮豔度 = byte 2(n−1)+1;鎖住(已鎖住的模式,韌體與主機端都不再改)
範例(學校版)
範例 1:相機看到了什麼?8 個數字一次看
這個範例會做什麼: 模式 1 一次送出 8 個數字:顏色、鮮豔度、亮度、動態、色塊的 X、Y、寬、高。全部顯示在 EV3 螢幕上,對照相機畫面就能看懂每個數字的意思。
要準備什麼:
- 神攝手(學校版)(EV3 版)
- EV3 主機
怎麼接: 神攝手(學校版)插 1 號孔。相機設定:側鍵短按進選單 → 左右鍵選「2:TRACK」→ 確認 → 把十字對準球,依序調好位置、容許範圍與最小面積 → 按確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 01:相機看到了什麼?8 個數字一次看
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(學校版)插 1 號孔
# 這個範例會做什麼:模式 1 一次送出 8 個數字:顏色、鮮豔度、亮度、動態、色塊的 X、Y、寬、高。全部顯示在 EV3 螢幕上,對照相機畫面就能看懂每個數字的意思。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(學校版)插 1 號孔
def read_hue1():
# 顏色(色相):0 ~ 100,-1=黑白灰
return sensor.read(1)[0]
def read_sta():
# 顏色鮮豔度:0 ~ 100
return sensor.read(1)[1]
def read_val():
# 亮度:0 ~ 100
return sensor.read(1)[2]
def read_motion():
# 畫面動了多少:0 ~ 100
return sensor.read(1)[3]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read(1)[4]
def read_y():
# 色塊上下位置:0 ~ 75(下 → 上),沒找到=0
return sensor.read(1)[5]
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read(1)[6]
def read_h():
# 色塊高度(越近越大):0 ~ 75,0=沒找到
return sensor.read(1)[7]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 顏色:紅 0 或 100、黃約 17、綠約 33、藍約 67,-1=黑白灰
ev3.screen.draw_text(0, 0, "HUE " + str(read_hue1()) + " ", Color.BLACK, Color.WHITE)
# 鮮豔度 0~100
ev3.screen.draw_text(0, 16, "STA " + str(read_sta()) + " ", Color.BLACK, Color.WHITE)
# 亮度 0~100
ev3.screen.draw_text(0, 32, "VAL " + str(read_val()) + " ", Color.BLACK, Color.WHITE)
# 畫面動了多少 0~100
ev3.screen.draw_text(0, 48, "MOTION " + str(read_motion()) + " ", Color.BLACK, Color.WHITE)
# 色塊左右位置 0~100
ev3.screen.draw_text(0, 64, "X " + str(read_x()) + " ", Color.BLACK, Color.WHITE)
# 色塊上下位置 0~75
ev3.screen.draw_text(0, 80, "Y " + str(read_y()) + " ", Color.BLACK, Color.WHITE)
# 色塊寬度,0=沒找到
ev3.screen.draw_text(0, 96, "W " + str(read_w()) + " ", Color.BLACK, Color.WHITE)
# 色塊高度,越近越大
ev3.screen.draw_text(0, 112, "H " + str(read_h()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 01:相機看到了什麼?8 個數字一次看
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(學校版)插 1 號孔
# 這個範例會做什麼:模式 1 一次送出 8 個數字:顏色、鮮豔度、亮度、動態、色塊的 X、Y、寬、高。全部顯示在 EV3 螢幕上,對照相機畫面就能看懂每個數字的意思。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(學校版)插 1 號孔
def read_hue1():
# 顏色(色相):0 ~ 100,-1=黑白灰
return sensor.read('IR-SEEK')[0]
def read_sta():
# 顏色鮮豔度:0 ~ 100
return sensor.read('IR-SEEK')[1]
def read_val():
# 亮度:0 ~ 100
return sensor.read('IR-SEEK')[2]
def read_motion():
# 畫面動了多少:0 ~ 100
return sensor.read('IR-SEEK')[3]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read('IR-SEEK')[4]
def read_y():
# 色塊上下位置:0 ~ 75(下 → 上),沒找到=0
return sensor.read('IR-SEEK')[5]
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read('IR-SEEK')[6]
def read_h():
# 色塊高度(越近越大):0 ~ 75,0=沒找到
return sensor.read('IR-SEEK')[7]
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 顏色:紅 0 或 100、黃約 17、綠約 33、藍約 67,-1=黑白灰
ev3.screen.draw_text(0, 0, "HUE " + str(read_hue1()) + " ", Color.BLACK, Color.WHITE)
# 鮮豔度 0~100
ev3.screen.draw_text(0, 16, "STA " + str(read_sta()) + " ", Color.BLACK, Color.WHITE)
# 亮度 0~100
ev3.screen.draw_text(0, 32, "VAL " + str(read_val()) + " ", Color.BLACK, Color.WHITE)
# 畫面動了多少 0~100
ev3.screen.draw_text(0, 48, "MOTION " + str(read_motion()) + " ", Color.BLACK, Color.WHITE)
# 色塊左右位置 0~100
ev3.screen.draw_text(0, 64, "X " + str(read_x()) + " ", Color.BLACK, Color.WHITE)
# 色塊上下位置 0~75
ev3.screen.draw_text(0, 80, "Y " + str(read_y()) + " ", Color.BLACK, Color.WHITE)
# 色塊寬度,0=沒找到
ev3.screen.draw_text(0, 96, "W " + str(read_w()) + " ", Color.BLACK, Color.WHITE)
# 色塊高度,越近越大
ev3.screen.draw_text(0, 112, "H " + str(read_h()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)一步一步看懂程式:
- 清除螢幕
- 一直重複
- 顏色:紅 0 或 100、黃約 17、綠約 33、藍約 67,-1=黑白灰
- 鮮豔度 0~100
- 亮度 0~100
- 畫面動了多少 0~100
- 色塊左右位置 0~100
- 色塊上下位置 0~75
- 色塊寬度,0=沒找到
- 色塊高度,越近越大
- 等 0.1 秒
跑起來應該看到: 把球在鏡頭前左右移動,X 跟著變;拿近,W、H 變大;拿走,X、Y、W、H 全部變 0。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- X、Y、W、H 一直是 0? 還沒設定 2:TRACK,或球的顏色不在容許範圍內。
範例 2:紅綠燈車:看到綠色才走
這個範例會做什麼: 用模式 0 只讀「顏色」。看到綠色就往前開,其他顏色(紅色)就停。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(學校版)(EV3 版)
- 紅色、綠色的紙卡各一張
怎麼接: 神攝手(學校版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選「1:COLOR」→ 確認 → 把十字對準要認的顏色,依序調好位置與容許範圍 → 按確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 02:紅綠燈車:看到綠色才走
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:用模式 0 只讀「顏色」。看到綠色就往前開,其他顏色(紅色)就停。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_hue():
# 顏色(色相):0 ~ 100(紅 0 或 100、黃約 17、綠約 33、藍約 67),-1=黑白灰
return sensor.read(0)[0]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果顏色在 25~45 之間(綠色)
if read_hue() >= 25 and read_hue() <= 45:
# 是綠色:往前開
left_motor.dc(30)
right_motor.dc(30)
else:
# 不是綠色:停車
left_motor.brake()
right_motor.brake()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 02:紅綠燈車:看到綠色才走
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:用模式 0 只讀「顏色」。看到綠色就往前開,其他顏色(紅色)就停。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_hue():
# 顏色(色相):0 ~ 100(紅 0 或 100、黃約 17、綠約 33、藍約 67),-1=黑白灰
return sensor.read('IR-PROX')[0]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果顏色在 25~45 之間(綠色)
if read_hue() >= 25 and read_hue() <= 45:
# 是綠色:往前開
left_motor.dc(30)
right_motor.dc(30)
else:
# 不是綠色:停車
left_motor.brake()
right_motor.brake()一步一步看懂程式:
- 一直重複
- 如果顏色在 25~45 之間(綠色)
- 是綠色:往前開
- 否則:
- 不是綠色:停車
- 如果顏色在 25~45 之間(綠色)
跑起來應該看到: 鏡頭前放綠色卡,車子往前開;換成紅色卡,車子停下來。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 綠色卡也不走? 先跑範例 1 看綠色卡實際的 HUE 是多少,再改程式裡的 25 和 45。
範例 3:防盜警報:有東西動就叫
這個範例會做什麼: 模式 1 的第 4 個數字是「畫面動了多少」。相機對著門口,有人經過數字就會變大,超過 20 就嗶嗶叫。這個範例相機不用做任何設定。
要準備什麼:
- 神攝手(學校版)(EV3 版)
- EV3 主機
怎麼接: 神攝手(學校版)插 1 號孔,鏡頭對著要看守的地方,放穩不要晃。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 03:防盜警報:有東西動就叫
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(學校版)插 1 號孔
# 這個範例會做什麼:模式 1 的第 4 個數字是「畫面動了多少」。相機對著門口,有人經過數字就會變大,超過 20 就嗶嗶叫。這個範例相機不用做任何設定。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(學校版)插 1 號孔
def read_motion():
# 畫面動了多少:0 ~ 100
return sensor.read(1)[3]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 螢幕顯示動態值
ev3.screen.draw_text(0, 0, "MOTION " + str(read_motion()) + " ", Color.BLACK, Color.WHITE)
# 如果動態值大於 20
if read_motion() > 20:
# 有東西在動:嗶!
ev3.speaker.beep()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 03:防盜警報:有東西動就叫
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(學校版)插 1 號孔
# 這個範例會做什麼:模式 1 的第 4 個數字是「畫面動了多少」。相機對著門口,有人經過數字就會變大,超過 20 就嗶嗶叫。這個範例相機不用做任何設定。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(學校版)插 1 號孔
def read_motion():
# 畫面動了多少:0 ~ 100
return sensor.read('IR-SEEK')[3]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 螢幕顯示動態值
ev3.screen.draw_text(0, 0, "MOTION " + str(read_motion()) + " ", Color.BLACK, Color.WHITE)
# 如果動態值大於 20
if read_motion() > 20:
# 有東西在動:嗶!
ev3.speaker.beep()一步一步看懂程式:
- 一直重複
- 螢幕顯示動態值
- 如果動態值大於 20
- 有東西在動:嗶!
跑起來應該看到: 畫面靜止時不叫;手在鏡頭前揮一下,EV3 就嗶嗶叫。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 沒人也一直叫? 日光燈閃爍或相機在晃。把 20 改大(例如 35)。
範例 4:看球轉頭
這個範例會做什麼: 車子原地轉,讓球一直保持在畫面中間:球在左邊就往左轉、在右邊就往右轉、在中間就停;看不到球就原地轉圈找。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(學校版)(EV3 版)
- 一顆顏色鮮豔的球
怎麼接: 神攝手(學校版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選「2:TRACK」→ 確認 → 把十字對準球,依序調好位置、容許範圍與最小面積 → 按確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 04:看球轉頭
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:車子原地轉,讓球一直保持在畫面中間:球在左邊就往左轉、在右邊就往右轉、在中間就停;看不到球就原地轉圈找。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read(1)[6]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read(1)[4]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果色塊寬度=0(沒找到球)
if read_w() == 0:
# 看不到球(寬度=0):原地慢慢轉圈找
left_motor.dc(15)
right_motor.dc(-15)
# 如果 X 小於 40(左邊)
elif read_x() < 40:
# 球在左邊:往左轉
left_motor.dc(-15)
right_motor.dc(15)
# 否則,如果 X 大於 60(右邊)
elif read_x() > 60:
# 球在右邊:往右轉
left_motor.dc(15)
right_motor.dc(-15)
else:
# 球在中間:停住
left_motor.brake()
right_motor.brake()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 04:看球轉頭
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:車子原地轉,讓球一直保持在畫面中間:球在左邊就往左轉、在右邊就往右轉、在中間就停;看不到球就原地轉圈找。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read('IR-SEEK')[6]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read('IR-SEEK')[4]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果色塊寬度=0(沒找到球)
if read_w() == 0:
# 看不到球(寬度=0):原地慢慢轉圈找
left_motor.dc(15)
right_motor.dc(-15)
# 如果 X 小於 40(左邊)
elif read_x() < 40:
# 球在左邊:往左轉
left_motor.dc(-15)
right_motor.dc(15)
# 否則,如果 X 大於 60(右邊)
elif read_x() > 60:
# 球在右邊:往右轉
left_motor.dc(15)
right_motor.dc(-15)
else:
# 球在中間:停住
left_motor.brake()
right_motor.brake()一步一步看懂程式:
- 一直重複
- 如果色塊寬度=0(沒找到球)
- 看不到球(寬度=0):原地慢慢轉圈找
- 否則:
- 如果 X 小於 40(左邊)
- 球在左邊:往左轉
- 否則:
- 否則,如果 X 大於 60(右邊)
- 球在右邊:往右轉
- 否則:
- 球在中間:停住
- 否則,如果 X 大於 60(右邊)
- 如果 X 小於 40(左邊)
- 如果色塊寬度=0(沒找到球)
跑起來應該看到: 拿著球在車子前面左右移動,車頭會跟著球轉。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 左右顛倒? 把兩個 tank 的 -15 和 15 對調。
範例 5:追球:靠近到一定距離就停
這個範例會做什麼: 把範例 4 改成會往前開:一邊對準球一邊前進,球的高度 H 夠大(夠近)就停下來。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(學校版)(EV3 版)
- 一顆顏色鮮豔的球
怎麼接: 神攝手(學校版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選「2:TRACK」→ 確認 → 把十字對準球,依序調好位置、容許範圍與最小面積 → 按確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 05:追球:靠近到一定距離就停
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:把範例 4 改成會往前開:一邊對準球一邊前進,球的高度 H 夠大(夠近)就停下來。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read(1)[6]
def read_h():
# 色塊高度(越近越大):0 ~ 75,0=沒找到
return sensor.read(1)[7]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read(1)[4]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果寬度=0(沒找到球)
if read_w() == 0:
# 看不到球:原地轉圈找
left_motor.dc(15)
right_motor.dc(-15)
# 否則,如果 H 大於 30
elif read_h() > 30:
# 球的高度大於 30(夠近了):停車
left_motor.brake()
right_motor.brake()
else:
# 轉彎力量 turn =(X − 50)× 0.6:球偏右是正數
turn = (read_x() - 50) * 0.6
# 左輪=25+turn、右輪=25-turn:邊對準邊前進
left_motor.dc(25 + turn)
right_motor.dc(25 - turn)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(學校老師創意賽版) EV3 新手範例 05:追球:靠近到一定距離就停
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(學校版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:把範例 4 改成會往前開:一邊對準球一邊前進,球的高度 H 夠大(夠近)就停下來。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(學校版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def read_w():
# 色塊寬度:0 ~ 100,0=沒找到
return sensor.read('IR-SEEK')[6]
def read_h():
# 色塊高度(越近越大):0 ~ 75,0=沒找到
return sensor.read('IR-SEEK')[7]
def read_x():
# 色塊左右位置:0 ~ 100(左 → 右),沒找到=0
return sensor.read('IR-SEEK')[4]
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果寬度=0(沒找到球)
if read_w() == 0:
# 看不到球:原地轉圈找
left_motor.dc(15)
right_motor.dc(-15)
# 否則,如果 H 大於 30
elif read_h() > 30:
# 球的高度大於 30(夠近了):停車
left_motor.brake()
right_motor.brake()
else:
# 轉彎力量 turn =(X − 50)× 0.6:球偏右是正數
turn = (read_x() - 50) * 0.6
# 左輪=25+turn、右輪=25-turn:邊對準邊前進
left_motor.dc(25 + turn)
right_motor.dc(25 - turn)一步一步看懂程式:
- 一直重複
- 如果寬度=0(沒找到球)
- 看不到球:原地轉圈找
- 否則:
- 否則,如果 H 大於 30
- 球的高度大於 30(夠近了):停車
- 否則:
- 轉彎力量 turn =(X − 50)× 0.6:球偏右是正數
- 左輪=25+turn、右輪=25-turn:邊對準邊前進
- 否則,如果 H 大於 30
- 如果寬度=0(沒找到球)
跑起來應該看到: 把球放在地上,車子會轉向球、開過去,在球前面停下來。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 還很遠就停了? 把 30 改大。
還有問題?歡迎到 聯絡我們 留言,附上你用的軟體和程式截圖,我們會幫你看。
範例(WRO 版)
範例 1:色點 S1 看到什麼顏色?
這個範例會做什麼: WRO 版有 12 個色點,每個色點回報「那一個位置現在的顏色」。先設定 S1,把它的顏色碼和鮮豔度顯示在螢幕上。
要準備什麼:
- 神攝手(WRO 版)(EV3 版)
- EV3 主機
- 各種顏色的積木
怎麼接: 神攝手(WRO 版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選 S1 → 確認 → 移動十字游標到要看的位置(X、Y)→ 調容許範圍 → 確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 01:色點 S1 看到什麼顏色?
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(WRO 版)插 1 號孔
# 這個範例會做什麼:WRO 版有 12 個色點,每個色點回報「那一個位置現在的顏色」。先設定 S1,把它的顏色碼和鮮豔度顯示在螢幕上。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(WRO 版)插 1 號孔
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read(0)
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
def read_sta1():
# 色點 S1 的鮮豔度:0 ~ 255(黑色固定 1)
return slot_byte(1)
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行:S1 的顏色碼
ev3.screen.draw_text(0, 0, "S1 " + str(read_hue1()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行:S1 的鮮豔度
ev3.screen.draw_text(0, 16, "T1 " + str(read_sta1()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 01:色點 S1 看到什麼顏色?
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(WRO 版)插 1 號孔
# 這個範例會做什麼:WRO 版有 12 個色點,每個色點回報「那一個位置現在的顏色」。先設定 S1,把它的顏色碼和鮮豔度顯示在螢幕上。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(WRO 版)插 1 號孔
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read('HUE12')
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
def read_sta1():
# 色點 S1 的鮮豔度:0 ~ 255(黑色固定 1)
return slot_byte(1)
# ---------- 程式從這裡開始 ----------
# 清除螢幕
ev3.screen.clear()
# 一直重複
while True:
# 第 1 行:S1 的顏色碼
ev3.screen.draw_text(0, 0, "S1 " + str(read_hue1()) + " ", Color.BLACK, Color.WHITE)
# 第 2 行:S1 的鮮豔度
ev3.screen.draw_text(0, 16, "T1 " + str(read_sta1()) + " ", Color.BLACK, Color.WHITE)
# 等 0.1 秒
wait(100)一步一步看懂程式:
- 清除螢幕
- 一直重複
- 第 1 行:S1 的顏色碼
- 第 2 行:S1 的鮮豔度
- 等 0.1 秒
跑起來應該看到: 在 S1 的位置放不同顏色的積木,顏色碼會跟著變:紅約 0、黃約 40、綠約 80、藍約 160。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 數字一直是 255? 那個色點還沒設定(沒啟用)。照上面的相機設定做一次 S1。
- 顏色數字的意思? 0
239 是彩色:紅 0(或 239)、黃 40、綠 80、青 120、藍 160、紫 200;240245 白;246~250 黑。 - 相機畫面上下顛倒? 到選單把 V-Flip 打開。改完方向後,色點的位置要重新設定一次。
- 原本燒的是學校版,改燒 WRO 版後色點怪怪的? 兩版的設定存在同一個地方,請先在選單做一次 Reset Default,再重新設定色點。
範例 2:顏色播報:螢幕顯示顏色名稱
這個範例會做什麼: 把顏色碼分成幾段,判斷是紅、綠、藍、白、黑,在螢幕上顯示英文名稱並嗶一聲。
要準備什麼:
- 神攝手(WRO 版)(EV3 版)
- EV3 主機
- 紅、綠、藍色積木
怎麼接: 神攝手(WRO 版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選 S1 → 確認 → 移動十字游標到要看的位置(X、Y)→ 調容許範圍 → 確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 02:顏色播報:螢幕顯示顏色名稱
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(WRO 版)插 1 號孔
# 這個範例會做什麼:把顏色碼分成幾段,判斷是紅、綠、藍、白、黑,在螢幕上顯示英文名稱並嗶一聲。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(WRO 版)插 1 號孔
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read(0)
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 把 S1 的顏色碼存進 hue
hue = read_hue1()
# 清除螢幕
ev3.screen.clear()
# 如果是紅色
if hue < 15 or (hue > 225 and hue < 240):
# 0~14 或 226~239:紅色
ev3.screen.draw_text(0, 0, "RED ", Color.BLACK, Color.WHITE)
# 否則,如果是綠色
elif hue >= 60 and hue <= 100:
# 60~100:綠色
ev3.screen.draw_text(0, 0, "GREEN ", Color.BLACK, Color.WHITE)
# 否則,如果是藍色
elif hue >= 140 and hue <= 180:
# 140~180:藍色
ev3.screen.draw_text(0, 0, "BLUE ", Color.BLACK, Color.WHITE)
# 否則,如果是白色
elif hue >= 240 and hue <= 245:
# 240~245:白色
ev3.screen.draw_text(0, 0, "WHITE ", Color.BLACK, Color.WHITE)
# 否則,如果是黑色
elif hue >= 246 and hue <= 250:
# 246~250:黑色
ev3.screen.draw_text(0, 0, "BLACK ", Color.BLACK, Color.WHITE)
else:
# 其他顏色
ev3.screen.draw_text(0, 0, "OTHER ", Color.BLACK, Color.WHITE)
# 等 0.3 秒
wait(300)EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 02:顏色播報:螢幕顯示顏色名稱
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(WRO 版)插 1 號孔
# 這個範例會做什麼:把顏色碼分成幾段,判斷是紅、綠、藍、白、黑,在螢幕上顯示英文名稱並嗶一聲。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port, Color
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(WRO 版)插 1 號孔
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read('HUE12')
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 把 S1 的顏色碼存進 hue
hue = read_hue1()
# 清除螢幕
ev3.screen.clear()
# 如果是紅色
if hue < 15 or (hue > 225 and hue < 240):
# 0~14 或 226~239:紅色
ev3.screen.draw_text(0, 0, "RED ", Color.BLACK, Color.WHITE)
# 否則,如果是綠色
elif hue >= 60 and hue <= 100:
# 60~100:綠色
ev3.screen.draw_text(0, 0, "GREEN ", Color.BLACK, Color.WHITE)
# 否則,如果是藍色
elif hue >= 140 and hue <= 180:
# 140~180:藍色
ev3.screen.draw_text(0, 0, "BLUE ", Color.BLACK, Color.WHITE)
# 否則,如果是白色
elif hue >= 240 and hue <= 245:
# 240~245:白色
ev3.screen.draw_text(0, 0, "WHITE ", Color.BLACK, Color.WHITE)
# 否則,如果是黑色
elif hue >= 246 and hue <= 250:
# 246~250:黑色
ev3.screen.draw_text(0, 0, "BLACK ", Color.BLACK, Color.WHITE)
else:
# 其他顏色
ev3.screen.draw_text(0, 0, "OTHER ", Color.BLACK, Color.WHITE)
# 等 0.3 秒
wait(300)一步一步看懂程式:
- 一直重複
- 把 S1 的顏色碼存進 hue
- 清除螢幕
- 如果是紅色
- 0
14 或 226239:紅色 - 否則:
- 否則,如果是綠色
- 60~100:綠色
- 否則:
- 否則,如果是藍色
- 140~180:藍色
- 否則:
- 否則,如果是白色
- 240~245:白色
- 否則:
- 否則,如果是黑色
- 246~250:黑色
- 否則:
- 其他顏色
- 否則,如果是黑色
- 否則,如果是白色
- 否則,如果是藍色
- 否則,如果是綠色
- 0
- 等 0.3 秒
跑起來應該看到: 把紅、綠、藍積木放到 S1 的位置,螢幕分別顯示 RED、GREEN、BLUE。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 數字一直是 255? 那個色點還沒設定(沒啟用)。照上面的相機設定做一次 S1。
- 顏色數字的意思? 0
239 是彩色:紅 0(或 239)、黃 40、綠 80、青 120、藍 160、紫 200;240245 白;246~250 黑。 - 相機畫面上下顛倒? 到選單把 V-Flip 打開。改完方向後,色點的位置要重新設定一次。
- 原本燒的是學校版,改燒 WRO 版後色點怪怪的? 兩版的設定存在同一個地方,請先在選單做一次 Reset Default,再重新設定色點。
範例 3:交通號誌柱:紅停綠走
這個範例會做什麼: WRO 未來工程師常見的紅綠柱子:S1 對準前方,看到紅色就停車、看到綠色就往前開。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(WRO 版)(EV3 版)
- 紅色、綠色的柱子或積木
怎麼接: 神攝手(WRO 版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選 S1 → 確認 → 移動十字游標到要看的位置(X、Y)→ 調容許範圍 → 確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 03:交通號誌柱:紅停綠走
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:WRO 未來工程師常見的紅綠柱子:S1 對準前方,看到紅色就停車、看到綠色就往前開。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read(0)
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 把 S1 的顏色碼存進 hue
hue = read_hue1()
# 如果是綠色(60~100)
if hue >= 60 and hue <= 100:
# 綠色:往前開
left_motor.dc(30)
right_motor.dc(30)
# 否則,如果是紅色
elif hue < 15 or (hue > 225 and hue < 240):
# 紅色:停車
left_motor.brake()
right_motor.brake()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 03:交通號誌柱:紅停綠走
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:WRO 未來工程師常見的紅綠柱子:S1 對準前方,看到紅色就停車、看到綠色就往前開。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read('HUE12')
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 把 S1 的顏色碼存進 hue
hue = read_hue1()
# 如果是綠色(60~100)
if hue >= 60 and hue <= 100:
# 綠色:往前開
left_motor.dc(30)
right_motor.dc(30)
# 否則,如果是紅色
elif hue < 15 or (hue > 225 and hue < 240):
# 紅色:停車
left_motor.brake()
right_motor.brake()一步一步看懂程式:
- 一直重複
- 把 S1 的顏色碼存進 hue
- 如果是綠色(60~100)
- 綠色:往前開
- 否則:
- 否則,如果是紅色
- 紅色:停車
- 否則,如果是紅色
跑起來應該看到: 前面放綠色柱子,車子往前開;換成紅色,車子停下來。其他顏色會維持原本的動作。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 數字一直是 255? 那個色點還沒設定(沒啟用)。照上面的相機設定做一次 S1。
- 顏色數字的意思? 0
239 是彩色:紅 0(或 239)、黃 40、綠 80、青 120、藍 160、紫 200;240245 白;246~250 黑。 - 相機畫面上下顛倒? 到選單把 V-Flip 打開。改完方向後,色點的位置要重新設定一次。
- 原本燒的是學校版,改燒 WRO 版後色點怪怪的? 兩版的設定存在同一個地方,請先在選單做一次 Reset Default,再重新設定色點。
範例 4:看到黑線就停車
這個範例會做什麼: 把 S1 設在畫面下方對著地面,車子往前開,S1 看到黑色(246~250)就停。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(WRO 版)(EV3 版)
- 白色地面上貼一條黑膠帶
怎麼接: 神攝手(WRO 版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:側鍵短按進選單 → 左右鍵選 S1 → 確認 → 移動十字游標到畫面下方(對著地面)(X、Y)→ 調容許範圍 → 確認存檔。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 04:看到黑線就停車
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:把 S1 設在畫面下方對著地面,車子往前開,S1 看到黑色(246~250)就停。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read(0)
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 往前開
left_motor.dc(25)
right_motor.dc(25)
# 等到 S1 的顏色碼在 246~250(黑色)
while not (read_hue1() >= 246 and read_hue1() <= 250):
wait(10)
# 停車
left_motor.brake()
right_motor.brake()
# 嗶一聲
ev3.speaker.beep()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 04:看到黑線就停車
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:把 S1 設在畫面下方對著地面,車子往前開,S1 看到黑色(246~250)就停。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read('HUE12')
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
# ---------- 程式從這裡開始 ----------
# 往前開
left_motor.dc(25)
right_motor.dc(25)
# 等到 S1 的顏色碼在 246~250(黑色)
while not (read_hue1() >= 246 and read_hue1() <= 250):
wait(10)
# 停車
left_motor.brake()
right_motor.brake()
# 嗶一聲
ev3.speaker.beep()一步一步看懂程式:
- 往前開
- 等到 S1 的顏色碼在 246~250(黑色)
- 停車
- 嗶一聲
跑起來應該看到: 車子往前開,壓到黑線時停下來並嗶一聲。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 數字一直是 255? 那個色點還沒設定(沒啟用)。照上面的相機設定做一次 S1。
- 顏色數字的意思? 0
239 是彩色:紅 0(或 239)、黃 40、綠 80、青 120、藍 160、紫 200;240245 白;246~250 黑。 - 相機畫面上下顛倒? 到選單把 V-Flip 打開。改完方向後,色點的位置要重新設定一次。
- 原本燒的是學校版,改燒 WRO 版後色點怪怪的? 兩版的設定存在同一個地方,請先在選單做一次 Reset Default,再重新設定色點。
範例 5:左中右三個色點:紅色在哪邊?
這個範例會做什麼: 設定 S1(左)、S2(中)、S3(右)三個色點,看紅色出現在哪一個,車子就往那邊轉。
要準備什麼:
- EV3 主機+教育版基本車(左輪接 B、右輪接 C)
- 神攝手(WRO 版)(EV3 版)
- 一個紅色積木
怎麼接: 神攝手(WRO 版)插 1 號孔,裝在車頭、鏡頭朝前。相機設定:把 S1 設在畫面左邊、S2 中間、S3 右邊,三個點高度一樣。
下載程式(選你用的軟體):
⬇ Pybricks v4 | ⬇ EV3 MicroPython v2.0
Pybricks v4 程式碼
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 05:左中右三個色點:紅色在哪邊?
# 軟體:Pybricks v4(用 Chrome 打開 https://code.pybricks.com ,EV3 版目前是 Beta)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:設定 S1(左)、S2(中)、S3(右)三個色點,看紅色出現在哪一個,車子就往那邊轉。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import LUMPDevice
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = LUMPDevice(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read(0)
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
def read_hue3():
# 色點 S3 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(4)
def read_hue2():
# 色點 S2 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(2)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果 S1 是紅色
if read_hue1() < 15 or (read_hue1() > 225 and read_hue1() < 240):
# 紅色在左邊(S1):往左轉
left_motor.dc(-15)
right_motor.dc(15)
# 否則,如果 S3 是紅色
elif read_hue3() < 15 or (read_hue3() > 225 and read_hue3() < 240):
# 紅色在右邊(S3):往右轉
left_motor.dc(15)
right_motor.dc(-15)
# 否則,如果 S2 是紅色
elif read_hue2() < 15 or (read_hue2() > 225 and read_hue2() < 240):
# 紅色在中間(S2):往前開
left_motor.dc(25)
right_motor.dc(25)
else:
# 沒看到紅色:停住
left_motor.brake()
right_motor.brake()EV3 MicroPython v2.0 程式碼
#!/usr/bin/env pybricks-micropython
# ============================================================
# 神攝手 ESP32CAM 視覺感應器(WRO 2026 版 HUE12) EV3 新手範例 05:左中右三個色點:紅色在哪邊?
# 軟體:樂高官方 EV3 MicroPython v2.0(microSD 開機卡+VS Code「LEGO MINDSTORMS EV3 MicroPython」擴充套件)
# 接法:神攝手(WRO 版)插 1 號孔;左輪馬達接 B、右輪馬達接 C
# 這個範例會做什麼:設定 S1(左)、S2(中)、S3(右)三個色點,看紅色出現在哪一個,車子就往那邊轉。
# ============================================================
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor
from pybricks.iodevices import Ev3devSensor
from pybricks.parameters import Port
from pybricks.tools import wait
ev3 = EV3Brick()
sensor = Ev3devSensor(Port.S1) # 神攝手(WRO 版)插 1 號孔
left_motor = Motor(Port.B) # 左輪
right_motor = Motor(Port.C) # 右輪
def slot_byte(n):
# 神攝手 WRO 版每 3 個 byte 打包成一個數字,這裡把第 n 個 byte 拆出來
data = sensor.read('HUE12')
return (data[n // 3] >> (8 * (n % 3))) & 255
def read_hue1():
# 色點 S1 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(0)
def read_hue3():
# 色點 S3 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(4)
def read_hue2():
# 色點 S2 的顏色碼:0 ~ 239 彩色(紅 0/239、黃 40、綠 80、青 120、藍 160、紫 200);240~245 白;246~250 黑;255=色點沒開
return slot_byte(2)
# ---------- 程式從這裡開始 ----------
# 一直重複
while True:
# 如果 S1 是紅色
if read_hue1() < 15 or (read_hue1() > 225 and read_hue1() < 240):
# 紅色在左邊(S1):往左轉
left_motor.dc(-15)
right_motor.dc(15)
# 否則,如果 S3 是紅色
elif read_hue3() < 15 or (read_hue3() > 225 and read_hue3() < 240):
# 紅色在右邊(S3):往右轉
left_motor.dc(15)
right_motor.dc(-15)
# 否則,如果 S2 是紅色
elif read_hue2() < 15 or (read_hue2() > 225 and read_hue2() < 240):
# 紅色在中間(S2):往前開
left_motor.dc(25)
right_motor.dc(25)
else:
# 沒看到紅色:停住
left_motor.brake()
right_motor.brake()一步一步看懂程式:
- 一直重複
- 如果 S1 是紅色
- 紅色在左邊(S1):往左轉
- 否則:
- 否則,如果 S3 是紅色
- 紅色在右邊(S3):往右轉
- 否則:
- 否則,如果 S2 是紅色
- 紅色在中間(S2):往前開
- 否則:
- 沒看到紅色:停住
- 否則,如果 S2 是紅色
- 否則,如果 S3 是紅色
- 如果 S1 是紅色
跑起來應該看到: 紅色積木放在車子左前方,車子往左轉;放右前方往右轉;正前方就往前開。
常見問題:
- 相機螢幕一直停在「LEGO Sync...」? 相機要接上「已經開機」的 EV3 才會啟動。EV3 先開機,再插相機的線。
- 數字一直是 255? 那個色點還沒設定(沒啟用)。照上面的相機設定做一次 S1。
- 顏色數字的意思? 0
239 是彩色:紅 0(或 239)、黃 40、綠 80、青 120、藍 160、紫 200;240245 白;246~250 黑。 - 相機畫面上下顛倒? 到選單把 V-Flip 打開。改完方向後,色點的位置要重新設定一次。
- 原本燒的是學校版,改燒 WRO 版後色點怪怪的? 兩版的設定存在同一個地方,請先在選單做一次 Reset Default,再重新設定色點。
還有問題?歡迎到 聯絡我們 留言,附上你用的軟體和程式截圖,我們會幫你看。
其他問題
- EV3 顯示成紅外線感應器? 正常:感應器模擬成樂高原廠感應器,用原廠積木就能讀。
- 切換模式時卡一下? EV3 每次換模式要等約 1 秒。整趟任務盡量只用同一個模式的積木。
還有問題?到 聯絡我們 附上你用的軟體和程式截圖。
下載
本頁依據
- 主機與軟體清單:
_build/guides.json - 值與命令:
_build/protocol/cam_school.json、_build/protocol/cam_wro.json(單一真相來源) - 安裝與設定:
_build/guides/software/ev3-pybricks.zh.md、_build/guides/product/esp32cam/ev3-pybricks.zh.md - 範例:
sensors/esp32cam/ev3-examples(-wro).md