注意: 雖然 JavaScript 對於本網站不是必需的,但您與內容的互動將受到限制。請開啟 JavaScript 以獲得完整體驗。

Carmanah 使用 Python 照亮道路

簡介

這是一個關於 Python 的優雅設計如何使該語言以一種意想不到的方式發揮作用的故事。

Carmanah Technologies Inc. (http://www.carmanah.com/) 的構想誕生於太平洋中部。創始人 David Green 正駕駛他的船從斐濟駛往不列顛哥倫比亞省維多利亞市。他的導航燈的電池電量不足,並且有了頓悟。

這個在海洋中產生的想法最終催生了世界上第一個獨立的、完全自主的航海導航燈。白天,每個裝置都使用太陽能為整合的電池充電。然後在晚上,燈會利用儲存的電量執行。Carmanah 的系統使用持久耐用的高效 LED 取代了傳統的燈泡。整體結果是一個非常堅固的裝置,密封防風雨且無需維護。

有時,丟失的 Carmanah 燈會在洋流上漂流數千英里,之後才被發現 - 並且功能完好。這種可靠性使它們在水道管理部門、水手和各國的海岸警衛隊中享有盛譽。

在惡劣的海洋環境中誕生的技術已在許多其他領域證明了其價值,如今 Carmanah 已成為太陽能 LED 照明領域的全球領導者。該公司為各種不同的用途生產一系列此類燈,包括交通、道路、鐵路、工業標記和機場照明以及最初的海洋應用。這些燈銷往世界各地,並且通常必須承受極端條件(公海、沙漠氣候、遙遠的北部、城市破壞者等)。Carmanah 的燈甚至成為國家電視臺紀錄片的主題。

Closeup of one crosswalk traffic beacon.

Carmanah 人行橫道交通訊標的特寫鏡頭,這是 Python 在其中發揮重要作用的最新產品。杆頂部的外殼朝向太陽,以更好地暴露它正面攜帶的太陽能電池板。外殼左側可見無線鏈路的天線,用於與街道另一側的類似裝置通訊。 放大

電燈已變得如此普遍,它看起來像一個簡單的想法。然而,一個自主的、獨立的燈原來是一個非常複雜的東西。可用太陽輻射量會隨天氣、季節、地球上的位置和太陽能電池板的方向而變化。必須仔細管理電池的充電狀態,以確保長壽命和正確執行。必須監控可用的電源,並可能在夜間進行定量分配。

根據應用的不同,燈光可能還需要進行程式設計以發出國際公認的閃爍程式碼,響應使用者輸入等。在更復雜的情況下,需要無線聯網以允許燈光彼此通訊或與中央基站通訊。

建立這些燈需要大量的機械、電氣、電子和光學設計。與現代複雜裝置一樣,在微控制器上執行的嵌入式軟體程式操作每個單元,使其栩栩如生。就像來自《2001:太空漫遊》中的微型巨石一樣,每個燈都會自我維護,隨時準備在需要時執行其功能。

實用計算的未來

當前實用的計算機應用主要由 PC 主導。然而,就像之前的 大型機 一樣,PC 將在計算機技術的使用和部署中失去其中心地位。嵌入式系統(即屬於其他裝置的計算機)將來會最為普及。

大型機現在遠未過時,PC 同樣也將保持重要地位。然而,大多數計算機將被整合到其他裝置中,而不是單獨存在。這個過程已經開始。汽車採用多個嵌入式系統,其中一些系統彼此通訊。嵌入式系統還操作許多家用電器。此類系統在工業領域同樣非常重要,它們構成了許多儀器和工具的關鍵要素。

嵌入式系統未來擴張的催化劑是網路技術的快速發展。隨著硬體變得更便宜、更小、更快、更有效地利用電力,嵌入式裝置網路將激增和增長。此類裝置彼此協作,將控制家庭、辦公室和工業設施。正如劍橋-麻省理工學院的普適計算計劃(請參閱 http://oxygen.lcs.mit.edu/)所證明的那樣,為這個新的計算世界所做的準備工作正在進行中。該倡議也曾在 BBC 的報道中出現(請參閱 http://news.bbc.co.uk/1/hi/technology/3583479.stm)。

普適計算的出現將使每個系統都必須易於維護。當每個使用者都需要數百個裝置時,定期維護所有裝置根本不可行。當然,管理自身電源的完全獨立的系統將是理想的選擇,因為如果需要在大型範圍內進行更換電池或連線電線,這將是一個嚴峻的挑戰。因此,微型巨石變成了一群。

Python 的重要性

大規模部署嵌入式系統需要廉價的元件。諸如小尺寸、高可靠性和低功耗等考慮因素也非常重要。已經開發出稱為微控制器的專用處理器晶片來滿足這些目標。現代微控制器將 CPU、記憶體和外圍裝置(如 UART)組合在單個晶片上,是出色的裝置。然而,這些功能的價格也很高。典型的微控制器只有幾百位元組的 RAM,幾 K 的 ROM(用於儲存程式)以及比傳統桌面微處理器低幾個數量級的處理能力。幾乎不是執行 Python 的環境!

有一些專案可以使 Python 適應嵌入式應用程式,但是它們需要在微控制器上佔用大量資源,並且仍處於非常早期的階段。然而,令人驚訝的是,事實證明,標準的 Python 在嵌入式系統的整個生命週期中都具有巨大的價值。這是因為嵌入式裝置的高度資源受限性質使其在開發和部署期間都依賴於標準 PC 來完成許多工。

例如,嵌入式軟體是在傳統的桌面系統上編譯的,然後將生成的物件程式碼載入到目標微控制器上。另一個示例是對現場的裝置進行故障排除,這通常需要額外的硬體來執行診斷實用程式。普通的筆記型電腦對於此應用程式來說是一個非常有吸引力的平臺,因為它們易於獲得且標準化程度相對較高。

因此,任何嵌入式軟體開發工作的主要部分都是編寫所需的支援程式碼,以在標準的 PC 上執行。有很多語言可用於此任務,但 Python 的優勢很多。來自各種程式設計背景(例如 Java、C 或 Visual Basic)的人員可以很容易地學習 Python。在熟悉 Python 之後,開發進展非常快 - 也許比使用任何其他語言都快。同時,Python 有助於建立高度可讀、緊湊且結構良好的程式碼。

Python 特定的功能組合還可以幫助嵌入式開發人員在程式設計 PC 時更加有效。儘管這些開發人員非常熟悉 C(到目前為止,C 是嵌入式系統最流行的高階語言),但為標準桌面或伺服器編寫的 C 程式在風格上與為微控制器編寫的 C 程式截然不同。

Python 程式的小巧性尤其重要,因為嵌入式開發人員必然學會了用少量程式碼表達他們的設計。Python 的自動記憶體管理也有所幫助,因為許多嵌入式開發人員在動態記憶體分配方面的經驗很少,而動態記憶體分配在大多數嵌入式環境中是不切實際的技術。此外,Python 的面向物件功能簡單、強大但不具有強制性。這使得(通常不太熟悉 OOP 的)嵌入式開發人員可以在他們的工作中逐步採用面向物件範例。

隨著嵌入式系統的複雜性不斷提高,使用 Python 來增強傳統技術的優勢變得越來越重要。在 Carmanah,Python 的採用(從包含無線網路的複雜裝置人行橫道交通訊標開始)已擴充套件到嵌入式系統生命週期的幾個關鍵領域。

Python 程式控制軟體構建過程,允許從大量共享元件中將不同產品的韌體組合在一起。該構建系統很簡單,但比 makefile 靈活得多,並且更容易自定義、配置和擴充套件。與編譯器供應商提供的構建工具不同,基於 Python 的構建系統可以使用不同的編譯器。

Python 還用於壓力測試和單元測試,這是開發中特別重要的一個方面,在嵌入式系統中,一旦裝置投入使用,升級裝置固有的困難使得這一點尤為重要。此外,還在考慮使用 Python 的其他用途,例如控制面板和程式碼生成。

在 Carmanah,Python 一個非常令人興奮的應用是作為裝置模擬器。模擬器可以在嵌入式網路中充當節點,同時透過螢幕上的動畫影像顯示內部系統狀態。模擬器在嵌入式專案的早期階段非常重要,因為那時很少有可用的實際硬體。透過替代丟失的裝置,即使在硬體設計完成之前,模擬器也可以允許軟體開發繼續進行。

Prototype of Carmanah's crosswalk traffic beacon attached to a device simulator written in Python.

這是 Python 在嵌入式開發中的實用性說明。Carmanah 的人行橫道交通訊標原型與在普通 PC 上執行的基於 Python 的模擬器進行互動。模擬器有效地完成了系統,因為在人行橫道安裝中需要兩個交通訊標(街道的每一側各一個)。除了顯著加快開發速度外,基於 Python 的模擬器還可以輕鬆地為繪圖製作動畫,如圖所示。這使得對系統的有意義的演示比其他情況下能夠更早地實現。 放大

在卡曼納(Carmanah),Python不僅被經驗豐富的工程師使用,也被實習學生使用。即使是那些程式設計經驗很少的實習生,也可以利用Python完成很多工作,而且所需的監督比其他語言要少。

結論

在卡曼納,建立獨立的、自主裝置的激動人心的工作仍在繼續。隨著微型微控制器叢集成為現實,嵌入式軟體的重要性(和複雜性)也在增長。透過使這類軟體的開發、測試、控制和部署變得更加容易,Python確實為計算的未來指明瞭方向。

關於作者

喬治·貝洛茨基(George Belotsky)是一位軟體架構師,在高效能網際網路伺服器以及硬即時和嵌入式系統方面做了大量工作。他對C++、Python和Linux等技術感興趣。喬治·貝洛茨基撰寫了多篇文章(參見 http://www.oreillynet.com/pub/au/1204 ),其中包括一系列關於Python和網路I/O的文章。他還是Flightdeck-UI開源專案( http://openlight.com/fdui/ )的作者。您可以透過電子郵件questions at openlight.com與他聯絡。

托馬斯·梅傑(Thomas Major)是卡曼納的產品開發經理,他是一名受過電氣工程教育的工程師,在偉世通(Visteon)和飛利浦電子(Philips Electronics)積累了廣泛的產品設計經驗。他的興趣始於類比電路設計,後來擴充套件到數字、軟體和嵌入式設計。