2026年9月4日 星期五

雲端網路的核心概念:從智慧養殖到 AI 互動導覽

雲端網路的核心概念:從智慧養殖到 AI 互動導覽

當我們使用手機看影片、上傳照片、網路購物或遠端控制家電時,背後都離不開「雲端網路」。 雲端網路不只是把資料放到遠端伺服器,更是透過網路把人、設備、資料、服務與人工智慧連結起來, 讓系統能夠即時互動、彈性擴充與集中管理。

一、什麼是雲端網路?

雲端網路是指透過網際網路,使用遠端資料中心提供的運算、儲存、資料庫、應用程式及網路服務。 使用者不必自己購買大量伺服器或網路設備,只要透過電腦、手機、感測器或機器人連上網路, 就能使用雲端上的資源。

一句話理解:
雲端網路就是把「運算、儲存、網路與智慧服務」放到雲端,讓各地的使用者與設備可以隨時連線使用。

二、雲端網路的核心概念

  1. 虛擬化(Virtualization)
    將一台實體伺服器、硬碟或網路設備,切分成多個可獨立使用的虛擬資源,例如虛擬機器、虛擬硬碟與虛擬網路。
  2. 軟體定義網路(SDN, Software Defined Networking)
    將網路設備的管理與決策集中到軟體控制器。管理者可以用軟體調整資料傳輸路徑、頻寬與安全規則, 讓網路管理更有彈性。
  3. 網路功能虛擬化(NFV, Network Function Virtualization)
    原本要使用專用硬體才能完成的路由器、防火牆、負載平衡器等功能,改以軟體方式在一般伺服器上執行, 可降低成本,也更容易擴充。
  4. 基礎設施即代碼(IaC, Infrastructure as Code)
    用程式或設定檔建立伺服器、資料庫、網路與防火牆規則。這樣可以重複部署、保留版本紀錄, 並減少人工設定造成的錯誤。
  5. 彈性擴充與負載平衡
    當使用者增加時,雲端可以自動增加伺服器資源;當流量下降時,再減少資源以節省成本。 負載平衡則把大量使用者的請求分配到多台伺服器。
  6. 資安、身分驗證與資料保護
    雲端系統會利用帳號權限、防火牆、加密、VPN、網路分區與備份機制, 保護資料與設備,避免未授權使用者存取。

三、雲端網路在生活與產業上的應用

領域 應用例子 雲端網路的功能
智慧家庭 遠端控制冷氣、攝影機、門鎖與掃地機器人 讓家電與手機透過雲端交換資料與控制指令。
串流影音 YouTube、Netflix、線上直播與雲端遊戲 利用雲端伺服器、CDN 與負載平衡,提供大量使用者穩定服務。
線上學習 Google Classroom、Moodle、視訊課程 集中提供教材、作業、測驗、影片與學習紀錄。
電子商務 網路商店、行動支付、物流追蹤 整合商品、訂單、庫存、金流與配送資訊。
智慧製造 機台監控、品質檢測、預測維護 收集設備資料,透過雲端 AI 分析異常與預估故障。
智慧農漁業 水質、土壤、氣象、影像與設備控制 讓感測器即時上傳資料,並由手機或電腦遠端監控。

四、三個智慧生活與地方創生應用案例

案例一:水井村智慧養殖

在養殖現場,可利用溶氧、水溫、pH 值等感測器蒐集魚塭資料,再透過 HUB8735、 Wi-Fi、4G/5G 或 LoRa 網路傳送到雲端平台。養殖戶只要打開手機,就能即時查看水質狀況。

當溶氧過低或水溫異常時,雲端平台可以自動發出告警通知,並進一步連動打氣機或抽水設備。 若累積足夠資料,還能運用 AI 分析水質變化,協助養殖戶及早處理問題。

核心價值:讓養殖管理從「靠經驗巡池」走向「即時監測、遠端管理與智慧決策」。

案例二:水井三寶智慧互動導覽平台

水井村可將烏龜、白馬與姻緣花等地方文化故事,建置成雲端智慧導覽平台。 遊客掃描 QR Code、使用手機網頁或操作互動螢幕後,即可取得故事、照片、語音、影片與地圖資訊。

平台也可結合 AI 導覽 Agent。當遊客詢問「姻緣樹有多久歷史?」、 「下一個景點怎麼走?」或「水井三寶代表什麼意義?」時, AI Agent 可根據地方知識庫即時回答,成為不受時間限制的數位導覽員。

核心價值:讓地方文化能被數位保存、持續更新,並以互動方式傳遞給更多遊客與下一代。

案例三:Q-Robot AI 結合 AI Agent

Q-Robot 可結合麥克風、喇叭、螢幕、按鈕、燈光與感測器,成為能與人互動的智慧機器人。 當孩童、長者或遊客向 Q-Robot 說話或按下按鈕時,Q-Robot 可透過雲端網路連接 AI Agent 與知識庫, 理解問題後,再以語音、文字、燈光或動作回應。

例如,Q-Robot 可以扮演下列角色:

  • 地方文化小導遊:介紹水井三寶與村庄故事。
  • 兒童學習夥伴:帶領孩子完成程式設計、環保、食農與 AI 體驗任務。
  • 長者陪伴助手:以較慢的語速聊天、播放懷舊故事,提醒社區活動。
  • 活動任務引導員:依照參與者的回答與活動進度,安排下一個互動關卡。
核心價值:讓機器人不只是播放指令,而是能連接地方知識、理解問題並提供個人化互動的 AI 夥伴。

五、三個案例的比較

案例 主要對象 雲端網路的角色 AI 的角色
水井村智慧養殖 養殖戶 傳送感測資料、遠端控制設備 分析水質與異常預警
水井三寶智慧互動導覽 遊客、社區居民 提供故事、地圖、影音與使用紀錄 回答地方文化與導覽問題
Q-Robot AI Agent 兒童、長者、學習者 連接機器人、知識庫與後台服務 理解提問、規劃任務、產生個人化回應

六、結語

雲端網路的價值,不只是把資料存放在遠端,而是把現場設備、使用者、資料平台與 AI 智慧服務連接起來。 從水井村智慧養殖的水質監測,到水井三寶的文化導覽,再到 Q-Robot 的 AI 互動陪伴, 都說明了雲端網路可以成為地方創生、智慧教育與永續生活的重要基礎。

善用雲端網路,讓地方的故事、產業與學習,連結成更智慧、更永續的未來。

2026年9月3日 星期四

不是AI寫完才測: 用 Red、Green、Refactor 學會可靠的 Python 程式設計

TEST-DRIVEN DEVELOPMENT

不是AI寫完才測:
用 Red、Green、Refactor 學會可靠的 Python 程式設計

先定義成功,再讓程式與AI一起追上來。

生成式AI可以快速寫出Python程式,但「看起來能執行」不等於「真的符合需求」。在大三的Python程式實習中,我們要學習一種更可靠的工作方式:先寫測試,再寫程式,最後整理程式。這就是測試驅動開發(Test-Driven Development,簡稱TDD)。

RED 先寫會失敗的測試
GREEN 用最小修改通過
REFACTOR 整理而不改行為
一句話理解TDD: 不是AI寫完才測,而是測試牽著AI走。先說清楚「成功是什麼」,再要求程式做到。

一、什麼是 Red、Green、Refactor?

1. Red:先寫一個會失敗的測試

Red代表「紅燈」。在還沒有功能程式之前,先把我們期待的結果寫成測試。因為功能尚未完成,測試理應失敗;這正好證明測試真的有在檢查需求。

例如,我們要撰寫一個函式,計算一組成績的平均值。先定義成功條件:輸入[80, 90, 100]時,結果應該是90

RED|先定義成功
def test_average_of_three_scores(): assert average([80, 90, 100]) == 90

此時average()尚未建立,執行測試會失敗。這不是挫折,而是我們明確知道:下一步要完成的是什麼。

2. Green:用最少的程式碼讓測試通過

Green代表「綠燈」。現在才開始寫功能程式,目標是讓剛才的測試通過。此階段不必急著追求最漂亮、最完整的寫法,而是先讓需求正確實現。

GREEN|讓測試通過
def average(scores): return sum(scores) / len(scores)

再執行一次測試,若結果通過,就代表程式至少符合目前定義的基本需求。

3. Refactor:整理程式,但不能改變原本行為

Refactor代表「重構」。當測試已經通過,我們可以安心改善程式的可讀性與可維護性,例如取清楚的名稱、抽出重複程式、補上輸入檢查或撰寫註解。

REFACTOR|程式更清楚、更可靠
def average(scores): """計算成績平均;空串列不允許計算。""" if not scores: raise ValueError("成績不可為空") total_score = sum(scores) student_count = len(scores) return total_score / student_count

重構後,原本的測試仍必須通過。也就是說,程式的內部結構可以變好,但對使用者而言,正確行為不能被改壞。

二、為什麼要先測試,再請AI寫程式?

如果直接對AI說「幫我寫一個平均成績的程式」,AI可能產生看似正確的答案;但它不一定知道您如何處理空白資料、文字輸入、缺考成績或小數點。若先把需求寫成測試,就能把模糊的想法變成可驗證的規格。

直接請AI寫程式 先寫測試,再請AI協作
容易只看程式能不能執行。 先確認程式是否符合明確需求。
需求改變時,不容易知道哪裡受影響。 新增測試即可描述新需求,再修改程式。
AI產生錯誤時,常難以察覺。 測試失敗會立即指出程式尚未達標。
修改後可能不小心破壞舊功能。 所有舊測試都能協助確認原有功能仍正確。

三、用AI進行TDD的實作方式

在Python程式實習中,可以依照下列流程與AI協作:

  1. 先用自己的話寫下需求與成功條件。
  2. 先完成一至兩個測試案例,例如正常資料、空白資料或錯誤輸入。
  3. 把測試與需求交給AI,請它只修改功能程式,直到測試通過。
  4. 請AI解釋每一行程式,而不是只複製答案。
  5. 要求AI協助重構後,再次執行所有測試。
  6. 由自己檢查輸出結果是否符合常識與真實情境。

四、從「平均成績」到真實專題

TDD不只適合成績計算。未來同學處理YouBike資料、感測器資料、社區問卷、智慧農業資料或網站API時,都可以先寫下「資料正確時應得到什麼結果」,再開始撰寫程式。

  • 資料缺少某個欄位時,程式是否能顯示清楚錯誤?
  • 感測器數值超出合理範圍時,是否會產生警示?
  • API沒有回傳資料時,系統是否仍能安全處理?
  • 修改功能後,原本已經成功的功能是否仍能正常運作?
AI讓我們更快寫出程式;
Red、Green、Refactor讓我們更有能力寫出可信任的程式。

國立虎尾科技大學|Python程式實習

AI十秒就能交出一段Python,為什麼大三還要學Python程式實習?

AI十秒就能交出一段Python,為什麼大三還要學Python程式實習?

適用課程:大三「Python程式實習」第一堂課

生成式AI出現後,只要輸入一句話,例如:「輸入5位學生成績,計算平均、最高、最低」,AI往往在十秒內就能產生一段看起來完整的Python程式。

因此,同學很自然會問:既然AI會寫程式,我們為什麼還要花一學期學Python?

答案是:AI可以很快交出程式碼初稿,但真正困難的工作,是從拿到程式碼後才開始。Python程式實習要培養的,不只是「打出程式」,而是能夠判斷、驗證、除錯、改進與應用程式的能力。


一、AI十秒能做什麼?——快速產生程式初稿

面對一個簡單需求,AI可以依照自然語言描述產生程式。例如下列程式碼表達的是:「請AI依照題目,產生一段解題程式」的概念:

prompt = "輸入 5 位學生成績,計算平均、最高、最低"
answer = AI.generate(prompt)
print(answer)

不過,這段不是可直接執行的標準Python程式,而是用來說明AI協助寫程式的流程。真正可以執行的Python版本,可能像下面這樣:

scores = []

for i in range(5):
    score = float(input(f"請輸入第 {i + 1} 位學生的成績:"))
    scores.append(score)

print("平均:", sum(scores) / len(scores))
print("最高:", max(scores))
print("最低:", min(scores))

AI確實能很快給出這樣的答案。但是,當程式出現在你面前時,真正的問題才剛開始。

重要觀念:
AI可以在十秒內產生程式初稿;但程式是否正確、安全、可維護,仍需要懂程式的人來判斷與負責。

二、真正難的問題,從程式碼出現後才開始

問題1:這段程式一定對嗎?

不一定。AI產生的是根據大量資料推測出的「合理答案」,不是保證完全正確的答案。程式可能有語法錯誤、變數名稱不一致、計算邏輯錯誤,甚至看起來可以執行,結果卻不符合題目要求。

例如,若題目要求「計算五位學生的平均」,AI卻只讀到四筆資料,或誤把總分除以6,程式仍可能執行,但答案已經錯了。

因此,學習Python的第一個目的,就是能看懂程式碼在做什麼,並能自己設計測試資料來驗證結果。

問題2:使用者輸入 abc 會怎樣?

上面的範例預期使用者輸入數字,但真實世界中的使用者不一定完全配合。若輸入abc、空白或「九十分」等文字,下面這行程式就會發生錯誤:

score = float(input("請輸入成績:"))

Python會出現ValueError,然後程式中斷。這時,我們必須加入例外處理,讓程式能提醒使用者重新輸入:

while True:
    try:
        score = float(input("請輸入成績:"))
        break
    except ValueError:
        print("輸入錯誤,請輸入數字,例如:85 或 92.5。")

這就是程式實習的重要價值:不只讓程式「跑得動」,更要讓程式面對錯誤輸入時,仍能穩定而友善地運作。

問題3:如果資料有10,000筆呢?

五筆成績可以一筆一筆輸入;但如果面對全校一萬名學生、社區問卷資料、感測器每分鐘上傳的資料,人工輸入已不可能完成。

此時,程式需要從CSV檔、Excel檔、資料庫或網路API讀取資料,並進一步進行清理、分析與視覺化。例如:

  • 讀取一萬筆學生資料。
  • 找出缺漏值、錯誤值與重複資料。
  • 計算各班平均、及格率與成績分布。
  • 將結果畫成圖表或輸出成報表。

這正是大三Python程式實習會逐步學到的能力:從基本語法,走向真實資料與實務問題的處理。

問題4:需求突然改變呢?

真實專題中,需求幾乎一定會改變。原本只要計算平均、最高與最低,後來老師或使用單位可能提出新的要求:

  • 缺考學生不納入平均。
  • 列出低於60分的學生名單。
  • 計算全班及格率。
  • 依照班級、性別或科系分組分析。
  • 自動輸出Excel成績報表。
  • 將資料放上網頁,供教師或學生查詢。

如果只會複製AI產生的程式,一旦需求改變,就很容易不知道該從哪裡修改;但如果理解變數、串列、條件判斷、迴圈、函式與模組,就能和AI協作,快速調整程式。

問題5:結果算錯,你看得出來嗎?

最危險的錯誤,不是程式直接當掉,而是程式看似正常執行,卻產生錯誤結果。

例如,缺考資料以0表示時,若直接納入平均,班級平均就會被拉低;或者讀取Excel欄位時,誤把「學號」當成「成績」,程式仍會算出一個數字,但那個數字毫無意義。

因此,程式設計者必須具備資料判讀與驗證能力,包括:

  • 用少量資料手算,和程式結果比對。
  • 測試正常、極端與錯誤輸入。
  • 確認資料欄位與資料型態是否正確。
  • 檢查結果是否符合常識與題目要求。
  • 保留程式、資料來源與處理過程,讓結果可追溯。

三、AI時代,我們為什麼還要學Python?

在AI時代,學Python不是為了和AI比誰打字快,而是為了成為能夠善用AI、檢查AI、改進AI成果的人。

AI可以協助 學生必須具備
快速產生程式初稿 看懂程式的邏輯與結構
提供可能的解法 判斷解法是否符合需求
協助修改與補充程式 描述問題、定位錯誤與驗證修改
協助撰寫文件與註解 確認資料、結果與責任歸屬

未來需要的人才,不只是會使用AI的人,而是能將AI產生的內容轉化為可靠系統、解決真實問題的人。

本課程的學習目標:
讓每位同學都能從「請AI寫程式」,進一步成長為「能與AI一起完成可靠程式與實務專題的人」。

四、第一堂課給同學的提醒

從今天開始,AI可以是你的學習夥伴,但不能取代你的思考。你可以請AI解釋程式、產生範例、協助找錯誤,也可以和AI一起完成專題;但是你要逐步學會提出清楚問題、閱讀程式、測試結果與做出判斷。

AI讓每個人都能很快得到程式碼;
學Python,讓你有能力判斷程式碼是否正確,
並把它真正用在真實問題上。

五、課後思考

  1. 如果AI產生的程式可以執行,你如何確認它的結果正確?
  2. 如果使用者輸入錯誤資料,你希望程式如何回應?
  3. 若資料從5筆增加到10,000筆,你會如何改寫程式?
  4. 你希望在本學期用Python與AI,解決哪一個生活、地方或專業領域的問題?

國立虎尾科技大學|Python程式實習

用 micro:bit Python Editor 學習真正的 MicroPython:從 LED、按鍵到無線互動

用 micro:bit Python Editor 學習真正的 MicroPython:從 LED、按鍵到無線互動

當你已經用 MakeCode 讓 micro:bit 動起來,下一步可以改用 micro:bit Python Editor。它採用 MicroPython,程式結構更接近一般 Python;學生能保留硬體實作的即時回饋,同時學習 importwhile True、函式、序列輸出與模組化程式。

編輯器:micro:bit Python Editor v3
建議對象:具備 MakeCode 基礎、準備進入文字型 Python 程式設計的學生。

一、為什麼要學 micro:bit Python Editor?

學習階段你會學到什麼?
MakeCode 積木程式邏輯、事件、硬體輸入與輸出
MakeCode PythonPython 風格的硬體控制與程式結構
micro:bit Python EditorMicroPython 的 importwhile True、除錯主控台與模組
IDLE Python檔案、資料分析、API、AI 與完整應用程式

micro:bit Python Editor 有模擬器、語法提示、錯誤標示與序列主控台。先在模擬器測試,再傳送到實體 micro:bit,可以降低初次接觸文字程式的挫折感。

二、第一行程式:匯入 micro:bit 工具箱

from microbit import *

這行程式把 micro:bit 的 LED、按鍵、溫度、加速度、腳位與時間功能載入。目前的程式可以使用 displaybutton_asleep() 等名稱。

三、範例 1:讓 LED 顯示愛心

from microbit import *

display.show(Image.HEART)
sleep(1000)
display.clear()

練習:Image.HEART 改成 Image.HAPPYImage.SAD 或自己建立 5×5 圖案。

四、範例 2:按 A 顯示 A,按 B 顯示 B

from microbit import *

while True:
    if button_a.was_pressed():
        display.show('A')
    if button_b.was_pressed():
        display.show('B')

while True: 表示「永遠重複」。程式不是一直盯著按鍵不放,而是持續檢查是否發生「按過一次」的事件。

五、範例 3:搖一搖,顯示隨機點數

from microbit import *
from random import randint

while True:
    if accelerometer.was_gesture('shake'):
        number = randint(1, 6)
        display.show(str(number))
        sleep(800)

這個例子同時練習:感測器、條件判斷、變數、隨機數與字串轉換。

六、範例 4:溫度計與序列主控台

from microbit import *

while True:
    celsius = temperature()
    display.scroll(str(celsius) + 'C')
    print(celsius)
    sleep(2000)

display.scroll() 是給板子上的人看;print() 則會輸出到 Python Editor 的序列主控台,適合觀察資料是否合理、協助除錯。

七、範例 5:兩片 micro:bit 無線傳話

請用兩片 micro:bit,兩端都下載下列程式。按下 A 就送出訊息;接收端會顯示收到的內容。

from microbit import *
import radio

radio.on()
radio.config(group=23)

while True:
    if button_a.was_pressed():
        radio.send('Hello')
        display.show(Image.HAPPY)

    message = radio.receive()
    if message:
        display.scroll(message)

重點:兩片 micro:bit 的 group 必須相同,才像在同一個無線頻道。請改成不同組別測試,觀察訊息是否還能收到。

八、從 MakeCode Python 搬家時,不能直接複製的地方

MakeCode Pythonmicro:bit MicroPython
basic.show_number(51)display.show('5')display.scroll('51')
basic.forever(...)while True:
radio.send_value()radio.send()radio.receive()

兩者都是 Python,但 API 不同。若要控制 CuteBot、Joystick:bit 等擴充硬體,必須使用廠商提供、可在 MicroPython 使用的模組;MakeCode 的擴充功能不能直接複製過來。

九、課堂任務:微型智慧環境站

  1. 顯示目前溫度;當溫度高於自訂門檻時顯示警示圖案。
  2. 按 A 顯示目前溫度,按 B 顯示光線值。
  3. 每 5 秒用 Radio 傳送一行格式化資料,例如 T=28,L=120
  4. 另一片 micro:bit 收到資料後顯示圖示,並在序列主控台列印收到的原始訊息。

十、學習檢核

  • 我能說明 from microbit import * 的用途。
  • 我能用 while True 撰寫持續運作的程式。
  • 我能用序列主控台檢查 print() 輸出的資料。
  • 我能設定兩片 micro:bit 使用相同的 Radio 群組並互相傳訊息。
  • 我知道 MakeCode Python 與 MicroPython 的語法相似,但 API 不可直接混用。

參考資源:micro:bit Python Editor v3官方 Python Editor 指南

Python 程式實習:MakeCode Python 如何指揮 micro:bit 硬體?

Python 程式實習:MakeCode Python 如何指揮 micro:bit 硬體?

當我們寫下 radio.send_value("x", 35)cuteBot.motors(60, 60) 時,真正發生了什麼?本教材帶你理解:程式碼不是直接碰觸硬體,而是經過編譯、執行環境與硬體介面,最後才變成 LED、無線訊號、感測器讀值與馬達動作。

一、學習目標

  • 分辨 MakeCode Python、MicroPython 與電腦 IDLE Python 的差異。
  • 說明 MakeCode Python 從程式碼到 micro:bit 硬體動作的流程。
  • 理解事件驅動程式與一般由上而下執行程式的差別。
  • 能從 API 名稱推論其操作的硬體資源與通訊方式。

二、先釐清:它們不在同一個 Python 世界

環境主要用途程式在哪裡執行?
MakeCode Python以 Python 風格控制 micro:bit、Radio、馬達與感測器編譯後,在 micro:bit 上執行
IDLE Python檔案、資料分析、網頁、AI 與一般軟體開發電腦上的 CPython
MicroPython在微控制器上執行 Python 直譯器支援 MicroPython 韌體的微控制器

三者都有 ifforwhiledef 等共通語法;但可呼叫的函式庫、執行方式與目標硬體不同。MakeCode Python 的重點是「用接近 Python 的語法,使用 MakeCode 的硬體 API」。

三、從程式碼到硬體:中間經過了什麼?

MakeCode
Python
PXT 轉換
與編譯
.hex
機器碼
micro:bit
執行環境
LED、Radio、
腳位、I2C、馬達

你按下「下載」時,MakeCode 會將程式編譯成 micro:bit 的 ARM 處理器可執行的 .hex 檔。下載到開發板後,micro:bit 的執行環境才依序處理按鍵、時間、無線接收與硬體控制。

四、API 是硬體的翻譯字典

MakeCode Python它要做什麼?底層硬體資源
basic.show_number(51)在板子上顯示 515×5 LED 矩陣
radio.send_value("x", 35)送出 x 軸控制資料2.4 GHz 無線電
pins.digital_write_pin(...)輸出高、低電位GPIO 腳位
cuteBot.motors(60, 60)設定左右輪速度腳位或 I2C 與馬達驅動板

擴充功能的價值,是將複雜的電路與通訊細節包裝成可讀的 API。學生仍要理解:函式不是魔法,它是在請底層系統操作某項硬體資源。

五、MakeCode 為什麼常用事件?

在 IDLE 中,我們常把程式想成由上而下執行;但硬體系統必須隨時等候按鍵、無線資料或感測器變化,因此 MakeCode 常採用事件驅動。

def on_received_value(name, value):
    if name == "x":
        xValue = value

radio.on_received_value(on_received_value)

這段程式的意思不是「立刻執行一次後結束」,而是向執行環境登記:以後只要收到廣播鍵值,就呼叫這個函式。

相對地,basic.forever() 則適合放需要持續檢查的工作,例如馬達輸出、逾時判斷或感測距離。

六、程式實驗:觀察同一個概念在不同環境的差異

實驗 A:顯示與輸出

# MakeCode Python:對硬體說話
basic.show_number(51)

# IDLE Python:對終端機說話
print(51)

實驗 B:重複執行與逾時安全

def on_forever():
    if control.millis() - lastReceiveTime > 500:
        cuteBot.motors(0, 0)

basic.forever(on_forever)

請學生回答:這段程式為何要持續執行?若只檢查一次,斷線安全還有效嗎?

七、常見錯誤與除錯方法

現象可能原因檢查方式
IDLE 找不到 basic在錯誤環境執行 MakeCode API改回 MakeCode Python;或重寫為電腦版程式。
程式不能轉回積木某些 Python 寫法無法雙向轉換保留 Python 模式並檢查是否可編譯下載。
小車不動群組不同、未收到資料或安全條件成立先顯示群組、資料值與逾時計時。

八、挑戰任務:從硬體控制走向系統設計

  1. 為 Q霸小車新增一個「狀態回報」訊息,讓搖桿知道小車是否避障或斷線。
  2. 把遙控系統畫成資料流圖,標示程式、執行環境、無線傳輸與硬體輸出。
  3. 比較 MakeCode Python 與 IDLE Python:若要做「兒童館小車使用紀錄」應在哪一端執行?為什麼?
本課結論:MakeCode Python 讓我們用接近 Python 的方式撰寫硬體邏輯;編譯器與 micro:bit 執行環境則負責把這些指令變成真正的電氣訊號與裝置行為。理解這層關係,才能從「會寫積木」進階到「能設計可靠的智慧系統」。

網際網路應用:我的搖桿,只開我的小車!

網際網路應用:我的搖桿,只開我的小車!

今天我們用搖桿控制 Q霸小車,也用它認識網路。網路的工作就是:送訊息、收訊息、確認是不是傳給對的人。

今天完成後,你可以做到:
① 用搖桿開車 ② 讓小車不會撞到東西 ③ 讓你的搖桿不會開到別人的車

一、網路像傳話遊戲

生活中的角色小車系統裡是誰?
說話的人搖桿
傳話的路無線電波
聽話的人Q霸小車
回覆「收到」嗶一聲、震一下、顯示勾勾

二、開車四步驟

  1. 看同色號:搖桿和小車要有一樣的顏色與號碼。
  2. 等一下:看到勾勾、聽到嗶聲、感覺震動,表示配對成功。
  3. 推搖桿:往前推前進;往左、右推就轉彎。
  4. 遇到危險:按紅色 F,立刻停!

三、四個按鍵

C慢慢開
D正常開
E快快開
F立刻停

四、小車的三個安全規則

  1. 太久沒聽到搖桿:小車會自己停下來。
  2. 前面太近:小車會先慢慢走;再靠近就停下來。
  3. 按 F:小車一定先停,按 C、D 或 E 才能再開。

五、我們也會看懂一點程式

下面這段意思是:「如果太久沒收到訊息,小車停止。」

if control.millis() - lastControlTime > 500:
    cuteBot.motors(0, 0)

下面這段意思是:「第 2 組只聽第 2 組的搖桿。」

pairId = 2
radio.set_group(100 + pairId)

六、闖關任務

  1. 和同學同時開兩組小車,看看會不會互相影響。
  2. 讓小車靠近障礙物,觀察它什麼時候會慢下來、什麼時候會停。
  3. 行駛中按 F,確認小車能不能立刻停止。
  4. 用自己的話說出:為什麼搖桿和小車要同色同號?
記住:網路不是只有手機和電腦。搖桿、小車、感測器也可以互相傳訊息,這就是物聯網!

延伸閱讀:V1V2V3V4V5

網際網路應用:一支搖桿如何可靠地控制一台 Q霸小車?

網際網路應用:一支搖桿如何可靠地控制一台 Q霸小車?

「遙控車」看似只是硬體活動,其實是一個縮小版的網際網路系統:裝置收集輸入、封裝成訊息、透過無線網路傳送、接收端解讀資料並做出行動。本教材從 Joystick:bit × Q霸小車 V1~V5,認識網際網路應用最重要的可靠性、安全性與多人協作問題。

一、學習目標

  • 說明感測端、傳輸端、服務端與致動端的角色。
  • 理解廣播群組、鍵值訊息、回覆確認與逾時處理。
  • 以「安全優先」思維分析物聯網應用。
  • 設計多人共用場域的一對一裝置配對方案。

二、一台遙控車就是一個網路應用

系統角色本案例網路概念
輸入端Joystick:bit x、y 軸與四鍵資料產生者
傳輸端micro:bit Radio無線通道與群組
處理端小車端 Python 程式訊息解析、狀態機、規則
輸出端馬達、燈號、蜂鳴器服務回應與人機介面

三、V1~V5 對應的網路議題

  1. V1|訊息傳遞:搖桿將 x、y 值以鍵值訊息送出,小車依名稱接收。
  2. V2|可靠性:死區避免雜訊;超過 0.5 秒未收到訊息便停車,這就是逾時偵測。
  3. V3|邊緣運算:小車本地讀取超音波距離,快速做出降速或停止決策。
  4. V4|事件驅動:C、D、E、F 鍵不是持續輪詢,而是在按下事件發生時更新系統狀態。
  5. V5|識別與回覆:pairId 選擇專屬群組,並用 pair / ack 做握手確認。

四、資料封包設計:不要只傳數字

有意義的訊息必須包含「名稱」與「值」。例如 ("x", 35) 表示向右 35,("stop", 1) 表示緊急停止。這種設計比只傳一串數字更容易除錯與擴充。

# 搖桿端
radio.send_value("x", x)
radio.send_value("y", y)
radio.send_value("stop", 1)

# 小車端
if name == "x":
    xValue = value
elif name == "stop":
    emergencyStop = value == 1

討論:如果未來要加入「車燈」、「任務開始」與「低電量」,應如何命名訊息?請提出一份小組通訊協定表。

五、可靠性與安全性:先判斷不能做什麼

真正的網路應用不能假設每個封包都會到達。小車端的決策順序應為:

未配對/緊急停止 → 斷線停車 → 避障 → 一般控制
if emergencyStop:
    cuteBot.motors(0, 0)
elif control.millis() - lastControlTime > 500:
    cuteBot.motors(0, 0)
elif yValue > 0 and distance <= 15:
    cuteBot.motors(0, 0)
else:
    cuteBot.motors(leftSpeed, rightSpeed)

六、多人同時使用:廣播群組就像班級頻道

若所有設備都使用群組 51,一位學生的搖桿可能控制全班的小車。V5 將每一組設備設為專屬頻道:

pairId = 3
radio.set_group(100 + pairId)  # 第 3 組使用群組 103

radio.send_value("pair", pairId)
# 小車確認後:radio.send_value("ack", pairId)

這相當於網路上的「位址+連線確認」。雖然不是完整的 TCP/IP,卻已經具備辨識對象、建立關係與回覆確認的核心精神。

七、3 小時課堂任務

  1. 30 分鐘:畫出 V5 的資料流,標記每一種訊息與方向。
  2. 50 分鐘:完成兩組小車同時運作,驗證不互控。
  3. 40 分鐘:刻意關閉搖桿或遮住超音波,記錄安全機制的反應。
  4. 40 分鐘:設計一項新服務,例如車位預約、任務通知或低電量警示。
  5. 20 分鐘:用「問題、資料、規則、結果」分享設計。

八、延伸閱讀

V1 基礎遙控V2 可靠控制V3 安全避障V4 事件互動V5 配對與回饋