Arduino傳奇故事:開發秘辛

任職於Arduino S.R.L(arduino.org網站)的Gillian和Kevin告訴我,《超圖解Arduino互動設計入門》書籍第一章,有關Arduino控制板的歷史介紹部分內容,與事實不符。

這是本書第一章開頭的前兩段文字:

2005年時,任教於義大利北部伊夫雷亞(Ivrea)一所互動設計學院(Interaction Design Institute Ivrea)的Massimo Banzi和David Cuartielles教授,希望能替學生和互動藝術設計師,找到一種能幫助他們學習電子和感測器基本知識,並快速地設計、整合互動作品原型(prototype)的微電腦裝置。

有鑑於當時市面上的微電腦控制相關產品所費不貲,而有些產品採用的程式語言深奧難懂,也不適合設計學院的學生使用。所以他們找來幾個志同道合的夥伴和學生,以11世紀北義大利的一個國王”Arduino”為名,設計出開放式(open source)微電腦控制板(以下簡稱「微電腦板」或「控制板」)以及程式開發工具。

Kevin傳給我一份Wiring開源軟硬體(註:Wiring的原意是電子元件之間的接線)的發明者Hernando Barragán(埃爾南多·巴拉甘,以下稱「埃爾南多」)撰寫的The Untold History of Arduino(直譯為「不為人知的Arduino歷史」)文件連結。這份文件詳述Arduino前傳,有英文和日文版。原文內容頗長,筆者摘譯其中一部分,並嘗試像一般的科普書籍一樣,把外國人名翻成中文,提供有興趣的讀者一窺Wiring和Arduino的發明史,以及Arduino創始團隊對簿公堂的緣由。

原文末尾列舉了各大媒體,如Wired(連線)、Makezine(Make雜誌)、Arduino紀錄片…等,對Arduino開發過程的錯誤報導,筆者僅翻譯其中的紀錄片部份,因為《超圖解Arduino互動設計入門》書本第一章也有提到紀錄片內容。事先聲明:筆者沒有資格替原作者表達任何立場,純粹只是義務性質的翻譯。

為了讓本文更通順,摘譯的內容並未完全按照原文的順序安排。以下內文中的第一人稱「我」,指的是原作者,照片的版權也都歸原作者所有。

一開始,先有了Wiring

底下這些所有Arduino使用者都熟知的指令,你知道是誰創造的嗎?正是埃爾南多,這些指令最早出現在Wiring:

  • pinMode()
  • digitalRead()
  • digitalWrite()
  • analogRead()
  • analogWrite()
  • delay()
  • millis()
  • 等等…

Wiring是埃爾南多就讀IDII時的論文作品,其指導教授是Massimo Banzi (馬西摩·班吉,擁有arduino.cc網站)以及Casey Reas(凱西·瑞斯,Proccessing程式語言的共同創建者)。

為何要製作Wiring?

Wiring是我在2003年,於義大利Interaction Design Institute Ivrea(互動設計學院伊夫雷亞,以下簡稱IDII,該校創立於2001年,2005年被整併退場)進行的碩士論文專案。

該專案的目標是把複雜的電子元件,以簡單易懂的元素呈現,讓藝術家和設計師得以全神專注在創作本身,不受電子學知識的束縛。

完整的論文可以在這裡下載:
http://people.interactionivrea.org/h.barragan/thesis/thesis_low_res.pdf

這個專案在IDII非常受矚目,並且從2004年開始,直到2005年學校關閉,它也被應用在其他幾個專案上。

因為這篇論文,我獲頒傑出畢業生獎(Graduates with Distinction);也是唯一在2004年於IDII獲此殊榮的畢業生。之後,我任職於哥倫比亞的Universidad de Los Andes(洛斯安第斯大學),教授互動設計課程,並繼續開發Wiring。

以下列舉Wiring的特色:

  • 簡單易用的整合開發環境(IDE),基於可在Microsoft Windows、Mac OS X和Linux運作的Processing.org IDE。其中包含簡單的編輯器,可建立軟體程式(也稱為“sketch”)。
  • 替微控制器打造的簡單「程式語言」或者程式「框架」
  • 完全整合編譯程式所需的各項軟體工具(用戶無須了解背後的運作方式)
  • 方便上傳程式的開機啟動程序(bootloader)
  • 用於檢視以及傳送或接收微控制器資料的序列監控程式
  • 開源(開放原始碼)軟體
  • 基於Atmel微控制器的開源硬體設計
  • 在網路上提供完整的程式指令和程式庫說明文件,以及範例、教學、論壇和採用Wiring完成的專案展示。

程式指令和語法

如上文所述,Arduino使用者所熟知的程式指令,是我在開發Wiring時定義的。

毫無疑問地,將功能複雜的微控制器引腳用簡單的數字代表,對微控器程式設計而言,是個重大的改變,而這個語法設計是在決定硬體平台之前就先定義好的。所有程式指令的命名和語法都是我嘔心瀝血的設計成果,其中包括邀請學生進行使用者測試、觀察、分析、調整以及反覆修正。

在我開發硬體原型的過程中,它的程式語言也自然地被開發成型。但直到最後的原型板被製作出來,程式語言才趨於完善。

我的論文有詳細說明設計過程,其中還包括後來被屏棄的,在設計階段初期所設定的指令名稱和語法。

硬體

從設計師的角度看來,這可能是最難解決的部分。我曾向不同廠商徵詢或購買評估板。

以下是在Wiring硬體設計過程中的一些關鍵時刻。

原型1

Wiring的第一個原型板採用Parallax公司的Javelin Stamp 微控制器。這是因為Wiring控制板的IDE是基於Processing語言的IDE,Processing語言及其IDE則是用Java語言開發的,而這個微控器的程式語言是Java的子集,所以我很自然的選用了它。

問題:如同論文第40頁的說明,編譯、連結(linking,把編譯完成的主程式和其他程式碼合成一個檔案)以及上傳用戶的程式檔,都得仰賴Parallax公司的專屬工具程式。由於我打算將Wiring專案開源,Javelin Stamp就不是一個可行的方案。

在後續的原型板開發過程中,微控制器的選用方式,是基於編譯、連結和上傳用戶程式檔等工具(註:這一系列工具軟體統稱toolchain,直譯為「工具鏈」),是否有開放原始碼的版本。這個決定導致非常流行的Microchip PIC系列單晶片,在設計階段初期就被剔除了,因為當時(大約是2003年),Microchip公司並沒有開放原始碼的toolchain(譯註:2016年一月,Microchip宣佈將以$35.6億美元併購Atmel,並於同年四月完成交易)。

原型2

Wiring硬體的第二個原型板,選用了基於ARM的Atmel微控制器AT91R40008,並且獲得很好的成果。第一個程式範例檔,以及程式指令的命名和試驗,都是從這個控制板開始。例如,現在大家所熟知的digitalWrite(),最早叫做pinWrite()。

在我評估此原型板功能的過程中,Atmel R40008擔任數位輸出/入API和序列通信API的測試平台。Atmel R40008是個非常強大的單晶片,但是它太複雜了,一般人無法自行將它焊接到印刷電路板上。

更多有關此原型板的說明,請參閱論文第42頁。

原型3

前一個原型板實驗衍生出第三個原型板,它採用效能比較弱但仍足以應付專案所需,而且不需要特殊工具或其他週邊設備,即可動手組裝的微控制器。

我選用Atmel公司的ATmega128微控制器,並且購買一個Atmel STK500評估板,板子上有個ATmega128的插座。

在STK500控制板上的實驗,一試就成功,所以我從BDMICRO 買了已經焊接好ATmega128的MAVRIC控制板。Brian Dean(布萊恩·迪恩)在當時為他的MAVRIC控制板投入大量的心力,因而驅使他製作一個可以輕鬆上傳新程式檔給控制板的軟體工具。直到今天,這個稱為“AVRDUDE”的軟體,依然被Arduino IDE採用。

由於傳統的COM(RS-232序列)介面逐漸從電腦上消失,我選擇了FTDI硬體,讓控制板透過USB介面和電腦通訊。FTDI有提供Windows,Mac OS X和Linux版本的驅動程式,符合Wiring在所有系統平台運作的需求。

2004年初,在基於MAVRIC控制板(原型3)的原型上,我參考布萊恩·迪恩和Pascal Stang(帕斯卡爾·史丹)的電路圖,設計出第一個Wiring控制板。它的特點如下:

  • 採用ATmega128微控制器
  • 採FTDI232BM用於序列轉USB通訊
  • 控制板內建連接微控器一個引腳的LED
  • 包含電源LED以及顯示RX/TX序列通訊狀態的 LED

我使用Cadsoft公司的Eagle PCB軟體來設計電路圖和印刷電路板。

在第三個原型板上,進行了最終版API的測試和調校,並且新增更多範例,而我寫的第一個LED閃爍範例,直到今日,仍然是Arduino控制板的初學者認識開發環境所接觸的第一個程式碼。支援液晶顯示器(LCD)、序列埠通訊、伺服馬達,甚至透過序列通訊介面連接Wiring和Processing…等許多範例,也陸續被開發出來。詳情可在論文第50頁找到。

2004年3月,向SERP(註:,一家位於義大利伊夫雷亞的印刷電路板工廠)訂製的25個Wiring印刷電路板被生產出來,並且透過IDII支付費用。

我動手焊接完成這25個控制板,並開始和IDII的一些同學進行可用性測試。那真是令人振奮的時刻!

繼續開發

2004年從IDII畢業之後,我搬回哥倫比亞,並開始在Universidad de Los Andes擔任互動設計課程講師。在我持續開發Wiring的同時,IDII於2004年末,決定生產、組裝100片Wiring控制板,用於IDII實體運算(physical computing)教學課程。Bill Verplank(比爾·維普蘭克,前IDII職員)要求Massimo Banzi寄送10片板子給我在哥倫比亞的課堂上使用。

2004年,前教職員Yaniv Steiner(葉尼弗·施泰納),以及之前的學員Giorgio Olivero和Paolo Sancis,在IDII使用Wiring板製作Instant Soup Project(直譯為「速食湯品專案」)作品。

首次重大成功 :Strangely Familiar

2004年秋天,Wiring板被應用在IDII的Strangely Familiar(直譯為「奇怪又熟悉的感覺」)實體運算教學專案,22名學生在此專案中完成了11個成功的作品。這個為期四週的專案,由四位教職員執導:

  • Massimo Banzi
  • Heather Martin
  • Yaniv Steiner
  • Reto Wettach

對學生和教授而言,這個教學活動圓滿成功。Strangely Familiar專案證明了Wiring有潛力作為互動設計的創新平台。

2004年12月16日,比爾·維普蘭克發了封郵件給我:

[這個專案]很精彩。每個人都做出可以運作的東西。其中五個作品還用到馬達!最先進的作品(由兩位MIT的畢業生──建築師和數學家製作),透過Wiring板結合滾輪/馬達,能讓人在Processing繪圖時感覺到筆觸…
很顯然地,這個專案成功的要素之一是採用Wiring板。

底下是該課程的簡介文件:
http://wiring.org.co/exhibition/images/brief.pdf

這是介紹專案成果的小冊子:
http://wiring.org.co/exhibition/images/book01.pdf

在世界其他地區

2005年5月,我和美國的Advanced Circuits公司簽約,在IDII以外生產首批200片印刷電路板,並且在哥倫比亞組裝。我開始出售控制板給一些學校,到2005年底,Wiring已被世界各地採用。

Arduino的形成

在IDII生產出的第一個Wiring板,當時一片的製造成本大約$50美元。(我不知道實際的費用,因為不是由我經手,但我在哥倫比亞販售的價格約$60美元)。這個價格已經比當時其他控制板低不少,但是對多數人來說,還是有點貴。

2005年,Massimo Banzi、David Mellis(大衛·梅利斯,當時是IDII的學生)和David Cuartielles,一起替Wiring加入支援更便宜的ATmega8單晶片。接著,他們fork(相當於「複製」)Wiring的原始碼,然後另外發起新的專案,這個專案就叫Arduino。

其實他們沒有必要另起爐灶,我很樂意幫助一起支援ATmega8和任何其它微控制器。我也曾計劃這樣做。

Wiring和Arduino早期,都使用了前IDII的學生Nicholas Zambetti(尼可拉斯·桑姆貝堤),也是David Mellis(大衛·梅利斯)同班同學的開發成果。尼可拉斯曾短暫地被視為Arduino團隊的一員。

大約在同一時間,Gianluca Martino(詹盧卡·馬蒂諾,他在SERP印刷電路板工廠擔任顧問)加入Arduino團隊,協助製造和硬體開發。為了降低Arduino控制板的價格,Gianluca在David Cuartielles的協助下,開發出採用ATmega8、價位更低廉的硬體。

Tom Igoe(湯姆·伊果,NYU2的ITP教師)被Massimo Banzi邀請參加IDII的一個工作坊,並成為Arduino團隊的一員。

直到今日,我完全不知道為什麼Arduino團隊要fork(複製)Wiring的程式碼。至於為何我沒有加入Arduino團隊?因為我從未被徵詢過。

雖然Arduino團隊fork(複製)程式碼的舉動讓我感到錯愕,我仍持續開發Wiring,而且我和其他程式碼貢獻者對Wiring做出的改進,幾乎全都被合併到Arduino的原始碼。我試圖忽視Arduino團隊仍在擷取我的工作成果的事實,但不明白,他們為何要做這種冗贅的重複性和浪費資源的事。

到了2005年底,我夥同Casey Reas(凱西·瑞斯)撰寫“Processing: A Programming Handbook for Visual Artists and Designers”書本當中的一個章節。這一章簡短地介紹了藝術和電子跨界結合的歷史,其中包括Processing整合Wiring和Arduino的範例。我展示了可用於這兩個平台的範例程式,並確保這些範例都能在Wiring和Arduino控制板運作。

這本書在2013年出了第二版,而凱西和我再次修改那個章節,並自2014年開始,把增訂的部份放在網路上。

以訛傳訛的誤導信息

有人說:

「如果我們不把事情說得透徹清楚,人們會自己導出一個論點,而這個推論將演變成事實,即使我們從來沒有那樣說過。」

在我看來,這是普遍適用的通則,特別是你透過些微扭曲的事實來誤導人們,你可以掌控他們的推論。

Arduino紀錄片(The Arduino Documentary)

2010年出品的Arduino紀錄片(The Arduino Documentary,由Raúl Alaejos和Rodrigo Calv編導)是非常普及的宣傳媒介之一(譯註:原本的Arduino紀錄片網站域名:arduinothedocumentary.org已不存在,但仍可在Vimeo網站觀看英文字幕版)。

這個影片很有意思,特別是從2016年的今日看來。我認為拍攝這種紀錄片的立意非常好,尤其是對蘊含如此豐富歷史的一個專案。

底下是影片中一些有趣的矛盾論述:

1:45 – 「我們希望它是開源的,這樣每個人都可以過來幫忙,並作出貢獻。」這段話暗指Wiring是封閉的。由於Wiring有一部分是基於Processing,Processing及其所有程式庫都是GPL開源,也因此,Wiring和Arduino都必須是開源,不可以封閉程式碼。此外,影片提到Arduino把軟體變得更簡易使用也是一種誤導,因為Arduino是直接沿用Wiring程式語法,沒有改變,而這正是Wiring和Arduino簡單易用的關鍵要素。

3:20 – David Cuartielles早就知道Wiring,因為正如紀錄片所說,他曾在2005年受僱於IDII,設計兩個轉接板(plug-in board)。片中也提到David Mellis(大衛·梅利斯)協助開發軟體,但實際上,梅利斯在2004年時,是個運用Wiring來學習實體運算(physical computing)的IDII學生。有趣的是,Gianluca(贊布羅塔)在片中變成了誰能夠設計電路板的人(他是電路板製作公司的業務承包人員),並成為「Arduino團隊」的一員。

8:53 – David Cuartielles於2005年7月,在馬德里的媒體實驗室做簡報時,提到:「Arduino是最新的專案,我在上週完成了它。我在跟伊夫雷亞學院的技術總監談話時,告訴他:『如果我們能設法提供免費的東西,那不是很棒嗎?』,他說:『免費?好啊!』」。David居然以一個他在「上週」完成的專案的作者身份出現,並且說服IDII的「技術總監」免費將它提供給大眾。

18:56 – Massimo Banzi說:對我們而言,一開始它是一個特定的需求:我們知道學校即將關門大吉,而且我們擔心律師會在某天出現,然後說:這裡的一切都要封箱起來然後被遺忘。 因此,我們想:好吧,如果我們把這一切全都開源,那這個專案就可以在學校關閉之後繼續存活下來。那是我們的第一步。

這段論述相當特別。它讓人誤以為將Arduino開源是學校關閉之後的一個出路。這引發一個問題:為什麼會有一幫律師要求將基於其他開源專案的專案「封箱」?這種想法太奇怪了。但是,普羅大眾可能會認為這是真的,因而替Arduino團隊塑造一個正大無私的開源理由。

原文摘譯自此,完整內容和圖片請參閱“The Untold History of Arduino ”。

5 thoughts on “Arduino傳奇故事:開發秘辛

  1. 這篇的原作者是Hernando?
    所以說Hernando的作品被他的指導教授Banzi拿走…? 變成現在的arduino.cc
    那與arduino.org的關係又是?

    1. arduino.cc和arduino.org之間的糾結已經落幕了,雙方在10/1於紐約的Maker Fair活動同台發表聲明,將在2016年底共同成立”Arduino Holding”,攜手合作促進Arduino產業的發展。他們也將成立”Arduino Foundation”非營利組織,維護電腦版的Arduino IDE,並且透過資助獎學金、社群、開發者等方式,支持開放原始碼運動。

      Arduino srl (arduino.org) 的TWO ARDUINOS BECOME ONE(兩個Arduino合而為一)的聲明。
      Arduino LLC (arduino.cc) 的TWO ARDUINOS BECOME ONE的聲明。

      have fun!
      jeffrey

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *