业界认为,物联网 (IoT) 对紧凑型无头微控制器板的快速增长起到了重要作用,控制器板专为传感器和致动器等多种边界节点设备而设计。 凭借其无线微控制器、少量 I/O和极低能耗,此此类开发板和模块将成为众多将数据馈送至云分析服务的设备。 许多应用都要求更多计算资源、操作员接口和连接选项。
不论是执行网关功能、聚合许多传感器的数据,还是启动本地控制或多种功能,都需要具有更多功能和资源的单板计算机。 制造商们在设法打造可满足每件设备所有不同需要的嵌入式器件,他们多数会选择一种平台方法——使用一块嵌入式主板并按需添加外设。 对于中小批量,在市场上大量越来越流行的开源单板计算机中选择一台的优势更加显著。 这不仅可以省去大量 NRE 成本、无线监管认证和软件启动,还让开发团队可以在设计的应用程序方面快速上手,而不必对可能需要集成的各种器件进行评估、设计和原型开发。
对于许多工程团队,IoT 的一个显著影响是,处理新项目的方式会有根本性转变。 团队可能完全有能力从零开始设计嵌入式板,但在很紧凑的期限内交付工作设计才是最终目标。 对于在创建自己的开发板前使用 单板计算机 平台快速评估设计的人来说,访问所有机械文件、布局和 BOM 都很有必要。
开发人员可能考虑使用的 单板计算机 的一个代表是 UDOO Neo。 UDOO Neo 分为基本版、扩展板和完整版,是一个全面的低成本系统,且均基于适合 Android 和 Linux 的 Freescale i.MX6SoloX 应用处理器构建。 本文将着重探讨 Neo 完整版。 此 Freescale 器件在单一芯片上嵌入一个运行频率为 1 GHz 的强大单核 ARM® Cortex®-A9 处理器,以及一个运行频率高达 200 MHz 的 ARM Cortex-M4 I/O 实时协处理器。 这些器件通过高速 AXI 总线连接在一起,能共享和使用大量硬件实施的功能,例如 GPIO、UART、I2C 等。 开发人员通过对可编辑进行复用,可以分配外设功能的配置由哪个内核使用。
UDOO Neo 完整版具有 1 GB 闪存,丰富的 GPIO、串行接口、完整的 Wi-Fi 802.11 b/g/n 和 BLE 连接。 此板配备有嵌入式 9 轴运动传感器、3 轴加速度计、磁力仪和陀螺仪、LVDS、HDMI、相机和音频接口,适合许多工业设计。
从操作系统的角度看,Cortex-A9 内核可以运行 Android Lollipop 或 UDOObuntu (14.04 LTS)。 Cortex-M4 拥有完整堆栈 Arduino 环境的访问权限,包括完整的 Arduino 扩展板排针,进一步使其成为一个非常灵活的平台。
图 2 中显示为红色的外部引脚,在 GPIO 模式下默认分配给 Cortex-A9。 因此,这些引脚可直接从文件系统(Linux、Android)控制。 显示为绿色的内部引脚由尺寸与 Arduino UNO 引脚输出相同的 Cortex-M4 来分配和控制。
此板由单一 6 – 15 VDC 电源供电,所有的 GPIO 为 3.3 VDC。 图 3 的示意框图强调了基于 i.MX 应用处理器的主要组成部分和接口。
Neo 适合用作无头计算平台;或通过添加 LVDS 触摸面板或 HDMI 设备,用作适合用户控制的平台。 如果您的预期应用不需要运动传感器或同样多的内存,则可以选择 Neo 的基本或扩展版本,以节省板的成本。 对于许多远程应用,无头配置是可取的,通过 SSH 远程端子或类似端子与之通信。
UDOO Neo 入门再简单不过了。 让开发板运行的所有必要信息及更全面的配置和代码示例可在 Wiki-style 网站上找到。 如果您需要,此网站还提供全面的机械布局文件和 BOM 清单。
此板在供货时未安装任何操作系统。 不论您选择 Linux 还是 Android,都需要容量为 8 GB 或以上的 microSD 卡。 从 Neo 的文档网站将您选择的操作系统下载到 PC 或笔记本电脑,然后执行解压缩。 您还需要将 microSD 卡插入卡插槽或 USB 适配器。 访问计算机的命令行,完整详情见此处,并遵循指示来卸载卡及所有分区,然后再传输操作系统映像。 完成后,请记得,您需要同步或弹出卡以正确关闭映像写入。
现在,将 microSD 卡插入 Neo,连接鼠标和键盘(通常为 USB)、HDMI 显示器(建议最初就使用,以查看一切是否正常运行),然后再通电。 很快,开发板上绿色和黄色 LED 闪烁,假设选择了 Linux,进入 UDOO Ubuntu 桌面前屏幕上会显示 Linux 企鹅 Tux 标志。 您可以通过这一熟悉的桌面使用 Linux 的所有普通功能及实用工具。 针对 Neo 配置的 Arduino IDE 也会在 Linux 平台中预加载,并通过桌面现成可用。 下一步是连接 Neo 的 Web 控制面板。 执行此操作有多种方式,可以通过让 Neo 的浏览器指向其 udooneo.local Web 服务器,或指向板自身的 IP 地址(如果您知道)。 请见图 4。
可通过该控制面板充分了解 Neo 内部发生的情况。 除了提供有关有线和无线连接状态的信息以及传感器和板摘要信息外,还提供配置选项,用于设置并连接到无线接入点、完成地区设置和更改显示输出。 还提供来自加速度计、陀螺仪和磁力仪的轴与模数数据,您可以通过轻轻地四周移动开发板来测试其操作。
Web 控制面板上还提供测试 Arduino 代码草稿示例和写入一些简单的代码的功能,请见图 5。 熟悉 Arduino UNO 等开发板的人,从图 5(打开引脚 13)的应用示例中可以看出是个简单的‘“”闪烁“”示例。 Neo 的红色 LED 已连接至此引脚,因此上传此代码草稿会导致其闪烁。 请注意,编程应用程序中的 Ardublocky 应用程序允许以图形、互联逻辑块的方式创建 Arduino 代码草稿。
正如前文所述,Neo 配备有两组 GPIO。 可从 Arduino 代码草稿访问的 GPIO 称作内部排针,最内侧的排针组和从 Linux 内访问的 GPIO 则称为外部排针。 默认情况下,所有 GPIO 都配置为输入,但可配置为输入或输出,且在需要时可产生内核中断。 引脚复用允许 MPU 向外部引脚分配更专门的任务。
可以在命令行使用以下简单命令控制 GPIO 引脚:
echo out > /gpio/pin19/direction – 将引脚设置为输出引脚,或
echo in > /gpio/pin19/direction – 将引脚设置为输入引脚
指定为输出的引脚,可使用 echo 0 > /gpio/pin19/value 设置为低,零伏;
或使用 echo 1 > /gpio/pin19/value 设置为高,+3.3 VDC
输入引脚值可使用 cat /gpio/pin19/value 来读取
除了从 /sys/class/gpio 目录创建链接外,UDOObuntu Linux 中预安装的 udoo-gpio-export 软件包还负责导出所有 GPIO 作为输入。 有关这类高级要求的更多信息,请见 UDOO 文档。
Cortex-A9 和 Cortex-M4 内核之间通过双向虚拟化串行引脚进行通信,使用共享内存交换数据。 可以在 Linux 中通过使用 /dev/ttyMMC 来读取,例如 minicom –D /ttyMCC;或使用 Serial0 对象在 Arduino 代码草稿内读取。
UDOO Neo 完整版板拥有三个运动传感器。 14 位加速度计和 16 位磁力仪位于相同封装(一种 Freescale FXOS8700CQ 器件内。 加速度计拥有三个可动态选择的满量程范围:+/-2 g、+/- 4 g 或 +/- 8g。
3 轴陀螺仪是 Freescale FXAS21002C。
它们被连接至 I2C 总线,请见图 7,并可通过任一内核访问。
在命令行,它们可以使用
echo 1 > /sensors/accelerometer/enable 或 echo 1 > /sensors/gyroscope/enable 来启用,并可使用 cat /sensors/magnetometer/data 等命令来读取一次性的值。
嵌入式应用当然可以通过相关 I2C 寄存器直接从它们读取。 加速计和磁力仪使用地址 0x1E,陀螺仪使用 0x20。
也可以通过更高级的语言(例如 Python)来访问传感器。 在使用任何新开发板的早期,您都会希望开发板设计具备开源与社区性质。 关于这方面的一个很好例子是 GitHub 上的 Neo.GPIO Python 库,该库提供在 Cortex-A9 上运行的 Python 应用程序的传感器接口代码。 Python 已包含在 UDOObuntu 发行版中,因此,使其成为在 Neo 上进行开发的必然选择。 使用前,您需要从 GitHub 下载 .ZIP 文件,然后将其解压缩到将要创建 Python 应用程序所在的目录。 在 .ZIP 文件中还包括了多个代码示例,图 8 中显示了其简化版本。
要在命令行运行图 8 中显示的 Python 代码,您必须以 root 的身份运行。 如果您使用的是如上所述的 UDOO Neo,您的用户帐户为 udooer,那么您需要按以下方式使用 GyroExample.py 程序。 请见图 9。
echo udooer | sudo –S su –c ‘python GyroExample.py’
UDOO Neo 是全面且强大的 单板计算机,可以用作工业 IoT 应用的理想开发平台。 通过使用 Neo,您可极快运行初始应用,并以最具时间和成本效益的方式让产品上市。