Guide to Embedded Swift with Seeed Studio XIAO-C6
介绍
Seeed Studio XIAO ESP32C6 是一款强大且多功能的开发板,基于 ESP32-C6 SoC,搭载双 32 位 RISC-V 处理器。高性能的处理器最高运行速度为 160 MHz,低功耗处理器最高可达 20 MHz。XIAO ESP32C6 配备了 512KB SRAM 和 4MB Flash,提供了丰富的编程空间,非常适合各种物联网应用。该开发板在无线连接方面表现出色,支持 2.4 GHz Wi-Fi 6、Bluetooth® 5.3、Zigbee 和 Thread (802.15.4),并原生支持 Matter 协议,确保智能家居的互操作性。
Seeed Studio XIAO ESP32C6 |
---|
Swift 是由 Apple Inc. 开发的一种强大且直观的编程语言,主要用于开发 iOS、macOS、watchOS、tvOS 及其他平台的软件。在 WWDC2024上,Apple 宣布了 Embedded Swift,这是一个开源项目,旨在将 Swift 带入嵌入式系统和物联网的世界。它允许在没有操作系统、资源有限的微控制器上使用 Swift。目前,官方的 swift-embedded-examples 支持 STM32、Raspberry Pi Pico、Nordic Semiconductor 以及 RISC-V ESP32(如 ESP32C6)等硬件平台。
嵌入式 Swift 提供了多项优势:
- 性能与易用性: 它提供与 C/C++ 相媲美的性能,同时保留了 Swift 语言友好的语法和特性 (Swift Forums).
- 库和框架集成: Swift 能够直接与 C/C++ 库链接,开发者可以无缝利用现有的框架 (GitHub).
- 开发者熟悉度: 已熟练掌握 Swift 的开发者可以快速采用 Embedded Swift,利用熟悉的 API 和工具 (Swift.org).
在本页面,我们将介绍以下内容:
- 如何设置所需的开发环境。
- 运行基于 GPIO 的闪烁示例。
前提条件
要开始在 Seeed Studio XIAO-C6 上使用嵌入式 Swift,你需要以下技能和设置:
- Seeed Studio XIAO-C6: 本指南的核心硬件。
- USB-C 数据线: 用于将 XIAO-C6 连接到你的计算机。
- 一台计算机: 运行 Linux、macOS 或 Windows(使用 WSL2)。
- ESP-IDF: 开发 ESP32-C6 所需的版本 5.2(推荐)。你可以从 Espressif 网站下载并安装。
- Swift 工具链: 确保你的计算机上安装了 Swift 6.0。你可以通过官方网站或操作系统的包管理器获取。
ESP-IDF 安装:
- 按照 Linux 和 macOS页面上的说明安装 ESP-IDF。
- 按照 XIAO 使用 Espressif ESP-IDF 开发指南 获取详细步骤。
Swift 工具链安装:
- 从 官方站点 安装 Swift
release/6.0
工具链。
如果你偏好 Docker 解决方案,请参考 Dockerfile 来自 apple/swift-matter-examples/
在继续之前,请确保你已准备好所有必要的前提条件,以确保顺利的设置和开发过程。
本页面将介绍如何在 Ubuntu 22.04 Jammy Linux (WSL2) 上设置和使用嵌入式 Swift。
安装 ESP-IDF
#!/bin/bash
# 更新并安装所需的软件包
sudo apt-get update
sudo apt-get install -y git wget flex bison gperf python3 python3-pip python3-venv python3.10-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0
# 克隆 ESP-IDF 仓库
cd ~
git clone --recursive https://github.com/espressif/esp-idf.git --jobs 10
cd esp-idf
git checkout v5.2.1; git submodule update --init --recursive
# 运行 ESP-IDF 安装脚本
cd ~/esp-idf && ./install.sh
# 设置 ESP-IDF 环境别名
echo 'alias get_idf=". ~/esp-idf/export.sh"' >> ~/.bashrc
source ~/.bashrc
echo "安装完成。使用 'get_idf' 来设置 ESP-IDF 环境。"
安装 Swift 6.0
你可以直接运行以下脚本来安装 Swift 6.0。
#!/bin/bash
# 下载 Swift 6.0 快照
wget https://download.swift.org/swift-6.0-branch/ubuntu2204/swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a/swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a-ubuntu22.04.tar.gz
# 解压 tar 包
tar -xvzf swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a-ubuntu22.04.tar.gz
sudo mv swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a-ubuntu22.04 $HOME/swift-6.0
# 更新 PATH
echo 'export PATH=$HOME/swift-6.0/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 验证安装
swift --version
echo "Swift 6.0 安装完成。"
使用 Swift 运行第一个 Blink 程序
步骤 1. 获取示例代码
get_idf #get idf enviorment
cd ~ && git clone https://github.com/apple/swift-embedded-examples.git #get GitHub repo
cd ~/swift-embedded-examples/esp32-led-blink-sdk
步骤 2. 构建示例代码
由于用户 LED 连接到 GPIO15,您需要将代码中的 let led = Led(gpioPin: 15)
修改为:
@_cdecl("app_main")
func app_main() {
print("Hello from Swift on ESP32-C6!")
var ledValue: Bool = false
let blinkDelayMs: UInt32 = 500
let led = Led(gpioPin: 15)
while true {
led.setLed(value: ledValue)
ledValue.toggle() // 切换布尔值
vTaskDelay(blinkDelayMs / (1000 / UInt32(configTICK_RATE_HZ)))
}
}
Then you could build the firmware:
idf.py set-target esp32c6
idf.py build
如果遇到 /bin/sh: 1: -target: not found
错误,可以通过编辑 build.ninja
文件来解决问题。
Find the keyword -target
关键词并在其前面添加 swiftc
,使其变为 swiftc -target ...
此调整应有助于解决该问题。
当您看到提示 Project build complete.
后,表示固件已构建完成,可以继续将固件烧录到 XIAO C6 开发板中。
步骤 3. 烧录固件
如果使用 WSL2,需要安装 usbipd
如果您在 WSL2 环境中工作,需要安装 usbipd installed.
安装方法:使用 Windows 包管理器运行以下命令:
winget install usbipd
安装完成后,通过以下命令共享 USB 设备:
usbipd list #Check BUSID
usbipd bind -b '<BUSID>'
在 WSL2 中连接设备:
usbipd attach --wsl --busid=<BUSID>
查看共享的端口:
dmesg | tail
# 或使用以下命令查看 tty 设备:dmesg | tail -n 100 | sed -n 's/.*\(ttyACM[0-9]*\).*/\1/p'
假设您已连接到 ttyACM0
,则可以使用以下命令烧录固件:
idf.py -p /dev/ttyACM0 flash monitor
此命令将:
- 把固件烧录到连接到 ttyACM0 的设备。
- 开始监控设备的串口输出,显示任何打印语句或日志。
演示
参考资料
资源
- WWDC24:利用嵌入式 Swift 缩小规模 - Apple YouTube
- 在智能家居应用中添加对 Matter 的支持
- Embedde Swift - Apple Forum
- 在 Swift 项目中使用 C、C++ 和 Objective-C 库 - Cecilia Humlelu - YouTube
- 混合使用 Swift 和 C++
- awesome-embedded-swift
技术支持与产品讨论
感谢您选择我们的产品!我们在这里为您提供多种支持,确保您在使用产品过程中体验顺畅。我们提供了多种沟通渠道,以满足不同的偏好和需求。