隨著Maker運動的興起,加上物聯網(Internet of Things,IoT)的各種相關概念不斷地被炒作,Arduino、Raspberry Pi這類開發板,也受到越來越多程式人的關注,不少程式人紛紛插起了麵包板,有人更戲稱現在軟體設計師越來越不軟了,那麼,在試著接觸這些開發板的過程中,程式人自己的定位何在呢?
電子電機逃兵的回歸?
認識我的朋友們都知道,平常我就愛用黏土等各式材料創造些手工小物,只是,這種小技能一直沒能與本身程式設計的能力相結合,直到去年敗了個電子積木,一方面可以動手做做積木,一方面總算可以結合程式設計方面的能力,讓自己腦袋中的想法,不單只是能透過電腦螢幕呈現出來,而是能活生生地與週遭環境作些互動,這也帶動了我朝另一個可能性去探索,開始研究起了Arduino。
經過一陣子的潛心研究,對Arduino這玩意可說是又驚又喜來形容,除了延續了玩弄電子積木的感覺,讓程式設計能力得以延伸至現實生活之外。我開始思索著,找回過去電子電路知識的可能性,也因而在玩弄Arduino可銜接的電子電路元件之時,我總是傾向於去瞭解每個元件的基本特性,而不是使用現成的電路模組,這過程讓我找回了一些記憶,但也一直思考著現今的我,玩弄這類微控制器開發板時該有的定位。
儘管相關的元件名稱大都聽過,不過,畢竟十幾年是個很長的時間,這麼長久疏離一個領域,想要短時間內重新找回,畢竟是有點痴心妄想,也不是種尊重專業的表現,目前來說,我只是將找回電子電路相關知識,當作是業餘的興趣,不過,在試著瞭解一個電路模組當中電子元件的原理,以及如何將電路模組與程式兜在一起,實作想要功能的同時,卻也感覺到,就程式人的角度而言,微控制器開發板這東西與周邊模組,幾乎可以當作是「不軟的軟體」來看待!
回顧Arduino的發展之初
一般介紹Arduino的文件或書籍,多半會提到Arduino是在義大利IDII設計學院(Interaction Design Institute Ivrea)誕生,Arduino計畫的共同開發者Massimo Banzi在〈People Over Megahertz〉中談到,IDII致力於考量人與技術如何串連的互動設計,只不過,學生通常沒有技術背景,別說電子電路了,連程式設計都沒接觸過,然而學生們卻必須要能在二到四星期的時間內,製作出能實際運作的物品。
也就是說,Arduino一開始設定的使用者,根本就不是電子電路專家也不是程式設計師,而在該文中,Massimo Banzi談到了他過去從Lectron System套件正式學習電子的經驗,並提及該套件設計者Dieter Rams談到設計技術時最重要的考量點:「比起技術本身,更應該考量到使用技術的人」。
因此Massimo Banzi在設計Arduino時考量了「從拆箱的那一刻開始,從零到首次產生某個動作究竟需要多少時間」,為了將每個人拉到正確的方向,這個過程的使用者體驗很重要,他認為這中間的時間花得越長,人就越容易在中途放棄。
或許是因為Arduino在設計之初,就考量了使用者經驗的重要性而設計,希望每個人都能在很短的時間內,透過Arduino完成某個結果(無論那結果為何),因而才使得Arduino從其他各式開發板中脫穎而出,迅速成為各個領域,每個想從事Maker運動者之利器,而Arduino在程式開發者之間能大受歡迎,在我看來,在軟體的成功遠大於硬體。
回想過去我在學校遇過的一些難纏電子電路問題,現在都可以透過既有的電路模組,加上一個包裝得簡單易用的程式庫,就能輕鬆搞定,幾乎可以說是軟體的延伸。
從程式人觀點認識Arduino
Arduino官網上寫著,開發Arduino時用的語言是基於Wiring,而Wiring實際上是指微控制器的一套開源程式設計框架,只不過在Arduino風行之後,Wiring系列的開發板相對來說失色許多,而較少人聽聞;Wiring其實是基於Processing,而Arduino使用的語言也就非常類似Processing,不過官網上說因為使用C/C++實現,仍有些小地方不同,Arduino官網〈Arduino/Processing Language Comparison〉就有比較兩種語言的不同之處。
至於Processing,是在2001年由MIT媒體實驗室的Casey Reas和Benjamin Fry發起計畫,本身是基於Java而簡化,希望透過視覺回饋來協助非程式設計師入門程式設計,整體想法與Arduino非常接近,Arduino與Processing也可以結合在一起,你可以將Arduino收到的周遭環境訊息,以Processing實作、呈現在電腦螢幕上,或者是將與電腦的互動透過Arduino來產生各式聲光效果。
那麼,從程式人的觀點來看,運用Arduino不用去瞭解那些電路模組嗎?基本上,那些電路模組包裝得就像是在使用電子積木一樣,運用這些電路模組時,麵包板多半也只是在彼此銜接時,方便插電線的一個介面罷了,在程式面上要處理的,基本上是0或1的數位訊號,若是類比訊號則會是某個範圍的數字,對於需要編碼、解碼的訊號,像是伺服馬達,Arduino有內建的函式可使用,就算是紅外線指令,也有像是IRremote這類的程式庫可以使用。
因此程式人面對相關電路模組,真的可以看做是具有輸入輸出功能的「硬體函式」,而Arduino、電路模組彼此之間的銜裝,就像是在組合相關函式;有些模組可以使用RJ線銜接,基本上就用不到麵包板,實際上,Kickstarter上頭出現過一些集資專案,就是把電路模組設計得像積木一樣,接腳可以直接相疊,建立出想要的功能,幾乎不需要電線甚至麵包板了。
大家熟悉的Raspberry Pi,一開始的對象也是針對孩子們(而不是Maker),希望有個價格低廉的平臺,可以讓他們學習程式設計,實際上,在Arduino、Raspberry Pi之前,也有不少開發板,只不過Arduino、Raspberry Pi(在程式開發界)的成功,帶動了不少開發板在程式編寫環境上,努力建立良好的使用者體驗,有些甚至瞄準特定開發者,像是Tessel,目的是讓懂JavaScript的開發者能透過開發板,輕鬆地實現物聯網的概念。
程式開發的新舞臺:IoT
隨便到網路上搜尋一下「物聯網」或「IoT」,就會有一堆資料告訴你這是什麼概念,除了硬體廠商磨刀霍霍積極備戰之外,軟體廠商也勢在必爭,今年初剛發表的Raspberry Pi 2,除了「堅持35美元不動搖」之外,另一引發話題的是,微軟宣布將為Raspberry Pi 2開發社群提供免費Windows 10,這其實只是Windows 10在IoT戰場上的一道策略,微軟本身也有Windows for IoT計畫,目前首先支援Intel Galileo,讓熟悉Visual Studio的開發人員,能更方便地建立IoT相關應用。
Arduino陣營則以搭載有網路功能、Linux作業系統的Arduino Yún來逐鹿IoT的戰場,不久前Facebook的F8開發人員年度會議上,旗下的Parse宣布將支援IoT程式的開發,並釋出Parse for IoT的各式工具,方便開發人員打造IoT程式,其中Arduino SDK首先就是針對Arduino Yún,SDK的介面是基於Wiring,以及Arduino的精神而設計,盡可能地簡單易用。
從程式人的角度來看,面對這類微控制器開發板,就當個硬梆梆的軟體來看待吧!在你組合應用程式時,視情況而定,可能需要去瞭解適用的程式庫,如果將開發板看作是軟體,就相當於得挑選合適的開發板,接著,就是想想看想要做到什麼了,你在冰箱上放個開發板與感應器的目的是什麼呢?如果需要收集資訊送上網路,那原因又是什麼呢?接下來就會發現,要思考的相關問題,又都是與程式設計有關了!
專欄作者
熱門新聞
2024-11-18
2024-11-12
2024-11-20
2024-11-15
2024-11-15
2024-11-19