Guia de Swift Embarcado com Seeed Studio XIAO-C6

Introdução
A Seeed Studio XIAO ESP32C6 é uma placa de desenvolvimento poderosa e versátil, construída em torno do SoC ESP32-C6, com dois processadores RISC-V de 32 bits. O processador de alto desempenho opera a até 160 MHz, enquanto o processador de baixo consumo funciona a até 20 MHz. Com 512KB de SRAM e 4MB de Flash, a XIAO ESP32C6 oferece um espaço de programação significativo, tornando-a ideal para diversas aplicações de IoT. Esta placa se destaca em conectividade sem fio, oferecendo suporte a Wi‑Fi 6 de 2,4 GHz, Bluetooth® 5.3, Zigbee e Thread (802.15.4), e é nativamente compatível com Matter, o que é crucial para interoperabilidade em casas inteligentes.
| Seeed Studio XIAO ESP32C6 |
|---|
![]() |
Swift é uma linguagem de programação poderosa e intuitiva desenvolvida pela Apple Inc. para criar software para iOS, macOS, watchOS, tvOS e além. Na WWDC2024, a Apple anunciou o Embedded Swift, um projeto de código aberto que busca levar Swift para o mundo de sistemas embarcados e IoT. Ele permite usar Swift em microcontroladores sem sistema operacional e com recursos mínimos disponíveis. Atualmente, o repositório oficial swift-embedded-examples oferece suporte a plataformas de hardware STM32, Raspberry Pi Pico, Nordic Semiconductor e até mesmo RISC-V ESP32 (ESP32C6).

Swift Embarcado oferece várias vantagens:
- Desempenho e Facilidade de Uso: Ele oferece desempenho em nível de C/C++ enquanto mantém a sintaxe e os recursos fáceis de usar do Swift (Swift Forums).
- Integração com Bibliotecas e Frameworks: A capacidade do Swift de vincular diretamente a bibliotecas C/C++ permite que desenvolvedores utilizem frameworks existentes de forma transparente (GitHub).
- Familiaridade para Desenvolvedores: Desenvolvedores já proficientes em Swift podem adotar rapidamente o Swift Embarcado em seus projetos, aproveitando APIs e ferramentas familiares (Swift.org).
Nesta página, vamos abordar o seguinte:
- Como configurar o ambiente de desenvolvimento necessário.
- Executar um exemplo de pisca‑pisca baseado em GPIO.
Pré-requisitos
Para começar com Swift Embarcado na Seeed Studio XIAO-C6, você vai precisar das seguintes habilidades e configurações:
- Seeed Studio XIAO-C6: O hardware principal para este guia.
- Cabo USB-C: Para conectar a XIAO-C6 ao seu computador.
- Um computador: executando Linux, macOS ou Windows (usando WSL2).
- ESP-IDF: A versão 5.2 (recomendada) é necessária para desenvolver com ESP32-C6. Você pode baixá-la e instalá-la a partir do site da Espressif.
- Swift Toolchain: Certifique-se de que o Swift 6.0 esteja instalado em seu computador. Ele pode ser obtido no site oficial do Swift ou por meio do gerenciador de pacotes do seu sistema operacional.
Instalação do ESP-IDF:
- Siga a página Linux and macOS para instalar o ESP-IDF
- Siga o guia Developed on XIAO using Espressif ESP-IDF guide para etapas detalhadas.
Instalação da Swift Toolchain:
- Instale a toolchain Swift
release/6.0a partir do site oficial.
Se você preferir uma solução com Docker, consulte o Dockerfile do repositório apple/swift-matter-examples/
Antes de prosseguir, certifique-se de ter todos os pré-requisitos necessários para uma configuração e um processo de desenvolvimento tranquilos.
Nesta página, vamos passar pela configuração e uso do Swift Embarcado no Ubuntu 22.04 Jammy Linux (WSL2).
Instalar ESP-IDF
#!/bin/bash
# Update and install required packages
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
# Clone the ESP-IDF repository
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
# Run the install script for ESP-IDF
cd ~/esp-idf && ./install.sh
# Set up alias for ESP-IDF environment
echo 'alias get_idf=". ~/esp-idf/export.sh"' >> ~/.bashrc
source ~/.bashrc
echo "Installation complete. Use 'get_idf' to set up the ESP-IDF environment."
Instalar Swift 6.0
você pode simplesmente executar este script para instalar o Swift 6.0.
#!/bin/bash
# Download the Swift 6.0 Snapshot
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
# Extract the Tarball
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
# Update PATH
echo 'export PATH=$HOME/swift-6.0/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# Verify Installation
swift --version
echo "Swift 6.0 installation complete."
Execute seu primeiro programa Blink com Swift
Etapa 1. Obter o exemplo
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
Etapa 2. Compilar o exemplo
Como o LED de usuário está conectado ao GPIO15, você precisará modificar o código para 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() // Toggle the boolean value
vTaskDelay(blinkDelayMs / (1000 / UInt32(configTICK_RATE_HZ)))
}
}
Em seguida, você pode compilar o firmware:
idf.py set-target esp32c6
idf.py build
Se você encontrar o problema /bin/sh: 1: -target: not found, é possível resolvê-lo editando o arquivo build.ninja localizado na pasta de compilação.
Encontre a palavra‑chave -target e adicione a palavra‑chave swiftc antes dela, de forma que fique swiftc -target .... Esse ajuste deve ajudar a resolver o problema.
Agora podemos gravar o firmware no nosso XIAO C6, assim que você receber o aviso Project build complete.
Etapa 3. Gravar o firmware
usbipd é necessário se estiver usando WSL2
Se você estiver trabalhando com WSL2, precisará ter o usbipd instalado.
Para instalar, use o Windows Package Manager com o comando:
winget install usbipd
Após a instalação, compartilhe o dispositivo USB usando:
usbipd list #Check BUSID
usbipd bind -b '<BUSID>'
Para anexar o dispositivo a partir do WSL2:
usbipd attach --wsl --busid=<BUSID>
Para ver qual porta está compartilhada:
dmesg | tail
# dmesg | tail -n 100 | sed -n 's/.*\(ttyACM[0-9]*\).*/\1/p'
Pressupondo que você tenha ttyACM0 detectado, o comando será:
idf.py -p /dev/ttyACM0 flash monitor
Este comando irá:
- Gravar o firmware no dispositivo conectado a ttyACM0.
- Iniciar o monitoramento da saída serial do dispositivo, exibindo quaisquer instruções de impressão ou logs.
Demonstração
Referência
- Embedded Swift Blog
- A Vision for Embedded Swift
- swift-embedded-examples
- esp32-led-blink-sdk - GitHub
Recursos
- WWDC24: Go small with Embedded Swift - Apple YouTube
- Add support for Matter in your smart home app
- Embedde Swift - Apple Forum
- Use C, C++ and Objective C Libraries in a Swift Project - Cecilia Humlelu - YouTube
- Mixing Swift and C++
- awesome-embedded-swift
Suporte Técnico & Discussão de Produto
Obrigado por escolher nossos produtos! Estamos aqui para oferecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.
