Carmanah 使用 Python 照亮道路
简介
这是一个关于 Python 的优雅设计如何使该语言以一种意想不到的方式发挥作用的故事。
Carmanah Technologies Inc. (http://www.carmanah.com/) 的构想诞生于太平洋中部。创始人 David Green 正驾驶他的船从斐济驶往不列颠哥伦比亚省维多利亚市。他的导航灯的电池电量不足,并且有了顿悟。
这个在海洋中产生的想法最终催生了世界上第一个独立的、完全自主的航海导航灯。白天,每个设备都使用太阳能为集成的电池充电。然后在晚上,灯会利用储存的电量运行。Carmanah 的系统使用持久耐用的高效 LED 取代了传统的灯泡。整体结果是一个非常坚固的设备,密封防风雨且无需维护。
有时,丢失的 Carmanah 灯会在洋流上漂流数千英里,之后才被发现 - 并且功能完好。这种可靠性使它们在水道管理部门、水手和各国的海岸警卫队中享有盛誉。
在恶劣的海洋环境中诞生的技术已在许多其他领域证明了其价值,如今 Carmanah 已成为太阳能 LED 照明领域的全球领导者。该公司为各种不同的用途生产一系列此类灯,包括交通、道路、铁路、工业标记和机场照明以及最初的海洋应用。这些灯销往世界各地,并且通常必须承受极端条件(公海、沙漠气候、遥远的北部、城市破坏者等)。Carmanah 的灯甚至成为国家电视台纪录片的主题。

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 一个非常令人兴奋的应用是作为设备模拟器。模拟器可以在嵌入式网络中充当节点,同时通过屏幕上的动画图像显示内部系统状态。模拟器在嵌入式项目的早期阶段非常重要,因为那时很少有可用的实际硬件。通过替代丢失的设备,即使在硬件设计完成之前,模拟器也可以允许软件开发继续进行。

这是 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)积累了广泛的产品设计经验。他的兴趣始于模拟电路设计,后来扩展到数字、软件和嵌入式设计。