又寫了一段時間的OpenBMC,有時候在想嵌入式的範圍其實很廣,老是寫BMC這個領域有點太狹隘了,如果只是剛畢業的學生,最常問我的問題就是...「我的實驗室不是做這一塊,我應該自學一點什麼嗎?」或者是「要做什麼side project嗎?」?????(寶妮這邊用很多問號,表示都有接收到大家焦慮的心情。)
我自己研究所的時候也是在machine learning 和computer vision的實驗室,結果一畢業就開始進入到server, storage .... BMC這個嵌入是系統的領域。不瞞大家說,很多來找我諮詢的同學在學校都有接觸過linux command (bash shell) ....etc. 但是我不會耶!我進公司的時候只有主打我會寫C語言如此而已,因為OpenCV那時候用C寫的,研究所好歹也碰了兩年的C語言。至於比較偏硬體的部分,我只知道我用的攝影機提供了什麼API可以讓我控制鏡頭上下左右移動,以及把影片一個個frame拿出來做分析和判斷。完全就是一個門外漢。但是我進來了,也幹了這行十年了,事實證明沒有那麼難。
如果再重來一次,我希望我大學/研究所的時候除了學習C也可以把C++練得再更好一點。印象中我大學也有點害怕電子電路,但是如果我可以也玩個幾張電路板,我覺得我應該會在這條入行學習的路上更加自信一點。對許多剛離開校園的同學來說,「嵌入式系統」這四個字往往帶有一點神秘色彩。它既不像你熟悉的筆記型電腦,也不完全像課堂裡講過的微處理器,而當你真正開始搜尋 IoT(Internet of Things)、智慧家居、機器人或自動化相關的 side project 時,YouTube 上的所有教學影片卻都告訴你:「你需要一塊 Raspberry Pi!」或是「先買一塊 Arduino 開始吧!」
但到底什麼是嵌入式系統?為什麼 Raspberry Pi 有人把它當電腦用,有人卻把它當作機器的大腦?Arduino 又和它有什麼根本差異?而身為剛畢業的你,要為第一個 side project 選擇哪一塊板子才對?
什麼是嵌入式系統?從 Raspberry Pi 的定位開始理解
Raspberry Pi 在這篇文章裡的定位:「這次我們不會把它當作桌機使用」——這是一個非常關鍵的切入點。Raspberry Pi 當然可以接鍵盤、滑鼠、顯示器,甚至用來當小型桌機,但這不是嵌入式開發的方式。課程裡明確指出,我們要把它當作 compute engine,也就是某個裝置背後的「大腦」,通常不會插螢幕、不會接鍵盤,而是以 headless mode 運作,也就是完全透過網路控制與操作。
這樣的使用方式讓 Raspberry Pi 不再是「一台縮小版電腦」,而是成為你所想像的那些 IoT 裝置的核心:
- 智慧家電
- 家庭自動化控制器
- 小型感測節點
- 自動化設備的主控模組
這些就是嵌入式系統。它們不一定有螢幕,也不會等你登入後再執行程式;它們開機就開始工作,長年運作,並透過硬體腳位與外界實體環境互動。
建立這樣的系統必須跨越多個學科,包括 Linux 作業系統、電子電路、Python 程式設計與資安概念。也就是說,嵌入式系統不是學某一種語言或某一片板子就夠,而是需要學會如何讓軟體與硬體、實體世界與網路環境協作。Raspberry Pi 的角色,確實可以是幫助你跨入這個領域的起點。
為什麼 Raspberry Pi 與 Arduino 都很常出現在入門專案裡?
我自己來問自己這個問題,從高層次來看:
Raspberry Pi 是一台電腦,而 Arduino 是一台簡單的小機器。
兩者都具有處理器與儲存空間,也都具備 GPIO、SPI、I²C 等介面——所以表面看起來好像能做相似的事情。但相似之處到此為止。接著我們一一來看一下他們之間有著怎樣的不同。
Raspberry Pi 跑的是作業系統,Arduino 不是
Raspberry Pi 會運行 Linux kernel,因此:
- 你的 Python 程式不是直接在硬體上跑,而是由作業系統排程
- Linux 同時還要處理其他背景工作
- 每行程式實際執行的時間點不確定,而是由 OS 來調度
這個過程大概會像是:
Kernel → Python interpreter → 程式邏輯 → 給 CPU 執行 → 再產生輸出。
因此你不能保證「某一個邏輯信號會在精準的時間產生」。相反地,Arduino 上沒有作業系統,它直接以 compiled code 在處理核心上執行:
- 沒有 OS
- 沒有排程
- 只有單一程式直接執行
這使得 Arduino 的執行時間完全可預測,也能精準控制與時序相關的任務。
Raspberry Pi 設備更完整而Arduino 沒有
Raspberry Pi 本質上是電腦主機板,因此具備:
- Ethernet
- USB
- HDMI
- Camera interface
- Display interface
Arduino 完全沒有這些。這帶來了清楚的結論:Raspberry Pi 適合複雜、網路導向、多工的應用。Arduino 適合簡單、單一功能、需要精準時序的應用。
其實這兩位應該是好朋友互相互補而不是競爭的關係,以馬達控制為例,我們可以這樣來做分工:
- Raspberry Pi 發出「請把馬達轉 1/4 圈」的指令
- Arduino(或專用 HAT 板)負責以精確 timing 執行馬達脈衝訊號
因此 Raspberry Pi 做它擅長的事:複雜邏輯。Arduino 做它擅長的事:超精準硬體控制。
理解 Raspberry Pi 的硬體
當你把 Raspberry Pi 放在手上時,最先看到的會是一組非常熟悉的連接孔:Gigabit Ethernet、USB 2.0、USB 3.0、音訊孔,以及 Raspberry Pi 4 上的雙 HDMI 端口。在電源部分,Raspberry Pi 4 採用 USB-C 作為供電介面。這不只是形式上的更新,而是因為系統本身需要更高的電流。Raspberry Pi 在規格上可能會消耗到 3 安培的電流,以 5 伏特供應時相當於 15 瓦的功率,因此 USB-C 能夠提供足夠的電流,確保整機在高負載運算、網路傳輸或驅動周邊時仍保持穩定。這也意味著在實際部署裝置時,你必須為它準備一個能夠長期提供穩定電力的環境,而不能使用僅能輸出 1 安培的舊式 micro-USB 電源供應器。
除了這些看似一般電腦都會具備的介面之外,Raspberry Pi 上有兩個對嵌入式領域極重要的高速連接端口:CSI(Camera Serial Interface)以及 DSI(Display Serial Interface)。這兩個介面遵循 MIPI Alliance 的規範,常見於行動裝置,用於直接連接相機模組與顯示器。我如果需要為專案加入影像輸入,例如錄影、即時影像擷取或電腦視覺前處理,我會直接使用 CSI 介面來連接官方相機模組。這類高速介面提供比 USB 攝影機更低的延遲與更緊密的整合,使 Raspberry Pi 能夠在影像相關專案中扮演關鍵角色。同樣地,如果專案需要整合外接顯示器,但不想經過 HDMI,DSI 也是能夠直接驅動 LCD 面板的介面,適合作為裝置的內建 UI 顯示。
然而,在所有硬體組件之中,真正讓 Raspberry Pi 成為嵌入式開發核心的是位於板子右上方的 40-pin header。我會稱它為整個平台的中心,因為所有與現實世界的互動都從這裡開始。這些腳位提供 3.3V 的邏輯電平,你可以直接從程式控制它們輸出高電位或低電位,用來驅動 LED、切換繼電器,或讀取按鈕的狀態。GPIO 讓 Raspberry Pi 不只是運行程式,而是能夠與外部電路產生連結。
除了最基本的數位輸入輸出,這些腳位還包含具備更高階功能的硬體模組。例如 PWM(Pulse Width Modulation)能產生週期性高低電位變化。當我使用 PWM 來驅動 LED 時,可以不是讓 LED 只是亮或暗,而是精確調整亮度。控制馬達時,PWM 則可以負責輸出控制速度所需的週期訊號。由於這些 PWM 是由硬體負責產生,而不是透過 Linux 上的軟體計時器切換 GPIO,其時序可靠且穩定,非常適合需要連續波形的應用。
另外,Raspberry Pi 的部分腳位也能切換成 I²C 或 SPI 通訊模式,這兩種通訊協定是嵌入式系統裡最常用來與外部晶片或擴充模組溝通的方式。例如感測器、ADC、馬達驅動晶片、或各種擴充 HAT,都能透過這些高速通訊介面與 Raspberry Pi 建立連結。當專案需要更複雜的周邊,例如溫溼度感測器陣列、顯示器、加速度計、磁力計,甚至多顆外部控制晶片,這些通訊協定就能構成整個硬體架構的骨幹。
在 40-pin header 的世界裡,Raspberry Pi 不再只是一塊運算板,而是能夠與實體世界互動的主控平台。你可以控制電壓、讀取訊號、與周邊晶片溝通,甚至將它作為整個系統的控制中樞。以上如果你真正意義上的去理解每個不同的傳輸訊號和原理,當你開始使用這些腳位時,你真正踏入的就不是 Raspberry Pi 的應用,而是嵌入式系統開發的領域了。(甚至可以說,你準備無痛進入BMC開發的領域)
嵌入式系統不是學一塊板子,而是學會用電腦與世界對話
在理解了 Raspberry Pi 與 Arduino 兩者截然不同的設計哲學之後,選擇第一塊開發板其實就不再是二選一的難題,而更像是一種對專案本質的洞察。每個專案背後都有隱含的邏輯——它需要的是計算與連線能力,還是需要精準時序與穩定的訊號控制?而這個問題的答案,通常直接決定了使用哪一種開發板。
如果你的構想包含了網路連線、影像輸入、資料分析,或需要同時進行多項任務,那 Raspberry Pi 幾乎總是最自然的選擇。Raspberry Pi 本質上是一台完整的電腦,它運行 Linux 作業系統,擁有多工能力,能夠同時執行網路服務、檔案處理、邏輯判斷,並與外部世界溝通。當一個專案需要整合多個感測來源、建立網路 API、處理來自相機的影像串流,或在背景運行資料記錄時,Raspberry Pi 能夠提供一個穩定且功能齊全的開發環境。我如果要架設 IoT 控制中心、建立一個家庭自動化中樞、使用 MIPI CSI 相機擷取影像、或在本地端進行任何形式的資料處理,我會毫不猶豫地選擇 Raspberry Pi,因為這些都是它的強項。
然而,當專案的核心需求從「運算能力」轉向「時序精準性」時,選擇就會完全不同。Arduino 沒有作業系統,它執行的程式不需要經過任何排程機制,不需要與其他背景任務競爭 CPU 時間,也沒有解譯器層層轉換的過程。每一個指令都直接在硬體上執行,因此可以達到極為精準的時間控制。在需要驅動步進馬達、產生高速脈衝、讀取對時間變化極度敏感的感測器,或不斷重複固定控制迴圈的場景裡,Arduino 的穩定度與可靠性都遠高於 Raspberry Pi。當我需要一個能在微秒等級保持穩定輸出的控制器時,我會優先選擇 Arduino,因為 Raspberry Pi 在這類應用中受限於作業系統排程,不可能提供一致、可預測的時序表現。
雙機協作架構在現代的許多專案中屢見不鮮。例如自走車常常仰賴 Raspberry Pi 處理攝影機影像與路徑演算法,同時由 Arduino 控制底盤的馬達;CNC 機台與 3D 印表機會使用 Raspberry Pi 作為操作介面與 G-code 解析器,再將需要毫秒甚至微秒精準度的運動控制交給 Arduino 類型的微控制器;而智慧家庭系統中,Raspberry Pi 作為中央控制中心,而各種分散式小模組則以微控制器實現即時回應。
寫到這裡,你大概發現,嵌入式系統不是某一塊電路板,而是一種把「軟體思維」帶進「真實世界」的能力。你需要操作 GPIO,需要理解網路;你要會寫程式,也要知道時間精準度為什麼重要;你可能會從一顆 LED,一個Sensor 開始,但最終你會學會用一整個系統去把你的想法落地。Raspberry Pi 與 Arduino 只是入口,它們讓你有機會把抽象邏輯變成具體行為。如果你願意踏出第一步,無論你大學念什麼、研究所做什麼,你都能在這個領域玩得很開心。不要害怕從零開始,因為我就是這樣一路跌跌撞撞走過來的,而你也絕對可以。
我最近也想繼續來玩玩樹莓派,有興趣的朋友可以找我聊聊。











