Blog

Blog

PHODAL

组合架构:Arduino 浅析

Arduino 是一个开源嵌入式软硬件平台。如果你看过我写的《自己动手设计物联网》,又或者是和大学同学翻译的《Arduino 编程:实现梦想的工具和技术》,那么对于些,你应该是有些体会的:Arduino 是一个非常有意思的组合式软件 + 硬件平台。

一套代码多处运行:Arduino

Arduino 的有意思之处在于,它的软件和硬件都是开源的,并且都能以模块化的形式组装:

  • 在硬件上,模块化的形式是可组装(叠加上去)的开发板、扩展板。
  • 在软件上,模块化的形式是可调用的软件库。
  • 在生态上,模块化的形式是开源共创。即通过开放的方式,建立硬件的模块化,建立软件的模块化。
  • 在设计上, 模块化的形式是标准化,通过标准化的形式

从技术能力上来说,我们编写的 Arduino 代码,只需要配置一下不同的 Arduino 开发板,就能直接在不同的硬件上运行。这对于传统式的嵌入式开发来说,有点不可想象。传统的嵌入式开发模式下,我们需要根据不同的开发板和芯片,来编写不同范式的代码。当我们需要更强的处理能力时,只需要购买更好的硬件即可。

除此,对于传统的硬件开发商来说,它们可以借鉴已经开源的 Arduino 开发板、扩展板,就能售卖出相关的硬件。而随着 Arduino 的标准化能力的成熟,对于芯片厂商来说,也能实现类似的能力。诸如国内厂的芯片 ESP8266、ESP32 的开发板,也能运行在 Arduino 的 IDE 上。

标准化硬件:硬件 IO 接口

从硬件上来说,Arduino 在不同类型的开发板上(如 Arduion UNO、Arduino YUN、Arduino Due、Arduino Mega2560 等),都尽可能设计成可兼容的模式。尽管 Arduino 的不同开发板在引脚上稍有差异,但是基于标准的 UNO 板,基本上都可以在其它开发板上运行。当然,还有一些是相同的 IO,但是硬件接入方式不是扩展板的方式,而是需要手动焊接,诸如于 Arduino Mini、Arduino Nano。

不同的相同的硬件设备,使用相同的输入输出口,如数字信号、模拟信号、串口处理等。如此一来,就可以确保硬件的扩展板上都是可以随意替换的。

标准化软件:抽象接口 HAL

Arduino 提供了一个标准化的 HAL(《Harware Abstraction Libraries》),提供基础的 Arduino 函数。如针对于不同的硬件底层,为了确保上层是兼容的,需要提供统一的硬件接口,诸如于:pinModedigitalWritedigitalReadanalogReadanalogWritemillisdelay

针对于不同类型、不同处理速度的芯片等(如 AVR、Intel X86、Arm)等,它们都可以转换到统一的接口。

标准化流程

Arduino 基于 Processing 的 IDE 构建,语法上也是类似的,一个新的默认代码模板如下:

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

而从源码的层面,它应该是:

int main(void)
{
    init();

    initVariant();

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;
}

从流程上,定义了硬件的处理流程和顺序。对于简单的开发来说,开发人员相当于是在流程引擎定义的步骤上进行编程。

标准化的消息通信

在系统的底层,内置了对一系列系统的对接协议,如 SPI、Serial、Wire 等。这些都可以用于与不同的硬件进行通信,包括 Arduino - Arduino 开发板,又或者是 Arduino - Raspberry Pi 开发板等。

其它

从模式上来说,Arduino 借助于已有的软件生态,减少系统的开发成本;借助开放的标准,以让不同的硬件能接入。


或许您还需要下面的文章:

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806
comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签