Swift 在硬件世界:为微控制器编写代码

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 走出屏幕:嵌入式开发为何变得更简单

\n\n

长期以来,嵌入式系统世界被分为两大阵营:手持烙铁的硬核 C 语言开发者,以及使用 Raspberry Pi 的 Python 爱好者。但近年来,第三位玩家——Swift——登上了舞台。没错,就是我们习惯与 iOS 应用和 macOS 联系在一起的这门语言,如今正自信地敲响硬件开发的大门。

\n\n

想象一下:你用一门现代、安全且富有表现力的语言编写代码,编译后直接烧录到微控制器上。没有 C 语言的宏,没有手动计算指针。只有纯粹的 Swift,在硬件层面运行。在本文中,我们将探讨如何开始基于 Swift 的嵌入式开发,需要哪些工具,以及微控制器的真实代码是什么样的。

\n\n

为什么选择 Swift,而不是 C 或 Python?

\n\n

对于嵌入式工程师来说,语言选择通常是在性能和便利性之间做出妥协。C 语言速度快,但很危险(你好,segmentation fault)。Python 很方便,但速度慢且需要解释器。Swift 用于微控制器则提供了两全其美的方案:

\n\n
    \n
  • 内存安全——ARC(自动引用计数)和强类型检查可防止内存泄漏和崩溃。
  • \n
  • 速度——通过 LLVM 编译为机器码,几乎没有额外开销。
  • \n
  • 现代语法——协议、泛型、闭包——所有这些都可在微控制器上直接使用。
  • \n
  • 生态系统——支持 Swift Package Manager,以及用于 GPIO、I2C、UART 的现成库。
  • \n
\n\n

当然,Swift 无法在超底层任务(如中断处理程序)中取代 C,但对于 90% 的嵌入式项目来说,它的能力绰绰有余。

\n\n

如何配置嵌入式 Swift 开发环境

\n\n

第一步:选择平台

\n

尝试基于 Swift 的嵌入式开发最简单的方法是使用 Raspberry Pi(3、4 或 Zero)。对于更严肃的项目,可以选择 STM32 或 Nordic nRF52。但让我们从 Raspberry Pi 开始——它更容易配置。

\n\n

第二步:安装 Swift

\n

在 Raspberry Pi 上,需要安装适用于 ARM 的 Swift 发行版。最好使用适用于 Ubuntu 的 Swift(Raspbian 也适用)。从官方网站下载最新版本并解压:

\n\n
wget https://download.swift.org/swift-5.9-release/ubuntu2204-aarch64/swift-5.9-RELEASE/swift-5.9-RELEASE-ubuntu22.04-aarch64.tar.gz\nsudo tar -xzf swift-5.9-RELEASE-ubuntu22.04-aarch64.tar.gz -C /opt/\nexport PATH=/opt/swift-5.9-RELEASE-ubuntu22.04-aarch64/usr/bin:$PATH
\n\n

第三步:安装用于 GPIO 操作的库

\n

为了操作 Raspberry Pi 的引脚,我们使用 SwiftyGPIO 库。这是 Swift 嵌入式项目的主要包:

\n\n
git clone https://github.com/uraimo/SwiftyGPIO.git\ncd SwiftyGPIO\nswift build
\n\n

编写真实代码:让 LED 闪烁

\n

嵌入式领域的传统“Hello, World!”是闪烁的 LED。用 Swift 编写看起来非常优雅:

\n\n
import SwiftyGPIO\n\n// 定义 Raspberry Pi 3 的引脚\nlet gpios = SwiftyGPIO.GPIOs(for: .RaspberryPi3)\nguard let ledPin = gpios[.P18] else { \n    fatalError("无法初始化引脚 18") \n}\n\n// 将引脚配置为输出\nledPin.direction = .OUT\n\n// 闪烁 10 次\nfor _ in 1...10 {\n    ledPin.value = 1  // 点亮\n    sleep(1)\n    ledPin.value = 0  // 熄灭\n    sleep(1)\n}\n\nprint("完成!LED 闪烁了 10 次。")
\n\n

这段代码是物联网世界中Swift 编程的一个绝佳起点。请注意:没有复杂的寄存器操作——一切都封装在清晰易懂的方法中。

\n\n

使用 UART:与外部设备通信

博客

书籍推荐