Guía de Embedded Swift con Seeed Studio XIAO-C6
Introducción
El Seeed Studio XIAO ESP32C6 es una placa de desarrollo potente y versátil construida alrededor del SoC ESP32-C6, que cuenta con procesadores duales RISC-V de 32 bits. El procesador de alto rendimiento opera hasta 160 MHz, mientras que el procesador de bajo consumo funciona hasta 20 MHz. Con 512KB SRAM y 4MB Flash, el XIAO ESP32C6 ofrece un espacio de programación significativo, haciéndolo ideal para diversas aplicaciones IoT. Esta placa sobresale en conectividad inalámbrica, soportando Wi-Fi 6 de 2.4 GHz, Bluetooth® 5.3, Zigbee, y Thread (802.15.4), y es nativo de Matter, lo cual es crucial para la interoperabilidad de hogares inteligentes.
Seeed Studio XIAO ESP32C6 |
---|
![]() |
Swift es un lenguaje de programación poderoso e intuitivo desarrollado por Apple Inc. para desarrollar software para iOS, macOS, watchOS, tvOS y más. En WWDC2024, Apple anunció Embedded Swift, un proyecto de código abierto que tiene como objetivo llevar Swift al mundo de los sistemas embebidos e IoT. Permite usar Swift en microcontroladores sin sistema operativo y con recursos mínimos disponibles. Actualmente, los swift-embedded-examples oficiales soportan plataformas de hardware de STM32, Raspberry Pi Pico, Nordic Semiconductor, e incluso RISC-V ESP32 (ESP32C6).

Embedded Swift proporciona varias ventajas:
- Rendimiento y Facilidad de Uso: Ofrece rendimiento a nivel de C/C++ mientras mantiene la sintaxis y características amigables de Swift (Swift Forums).
- Integración de Bibliotecas y Frameworks: La capacidad de Swift para enlazarse directamente con bibliotecas de C/C++ permite a los desarrolladores utilizar frameworks existentes sin problemas (GitHub).
- Familiaridad del Desarrollador: Los desarrolladores ya competentes en Swift pueden adoptar rápidamente Embedded Swift para sus proyectos, aprovechando APIs y herramientas familiares (Swift.org).
En esta página, vamos a cubrir lo siguiente:
- Cómo configurar el entorno de desarrollo necesario.
- Ejecutar un ejemplo de Blink basado en GPIO.
Prerrequisitos
Para comenzar con Embedded Swift en el Seeed Studio XIAO-C6, necesitarás las siguientes habilidades y configuración:
- Seeed Studio XIAO-C6: El hardware principal para esta guía.
- Cable USB-C: Para conectar el XIAO-C6 a tu computadora.
- Una computadora: que ejecute Linux, macOS, o Windows (usando WSL2).
- ESP-IDF: Se requiere la versión 5.2(recomendada) para desarrollar con ESP32-C6. Puedes descargarla e instalarla desde el sitio web de Espressif.
- Swift Toolchain: Asegúrate de que Swift 6.0 esté instalado en tu computadora. Esto se puede obtener del sitio web oficial de Swift o a través del gestor de paquetes de tu sistema operativo.
Instalación de ESP-IDF:
- Sigue la página de Linux y macOS para instalar ESP-IDF
- Sigue la guía de Desarrollo en XIAO usando Espressif ESP-IDF para pasos detallados.
Instalación de Swift Toolchain:
- Instala el toolchain de Swift
release/6.0
desde el sitio oficial.
Si prefieres una solución con docker, por favor consulta el Dockerfile de apple/swift-matter-examples/
Antes de proceder, asegúrate de tener todos los prerrequisitos necesarios para un proceso de configuración y desarrollo sin problemas.
En esta página, repasaremos la configuración y uso de Embedded Swift en 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
puedes ejecutar directamente este script para instalar 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."
Ejecuta tu primer programa Blink con Swift
Paso 1. Obtén el ejemplo
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
Paso 2. Construir el ejemplo
Como el LED del usuario está conectado al GPIO15, necesitarás modificar el código a 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)))
}
}
Luego podrías compilar el firmware:
idf.py set-target esp32c6
idf.py build
Si encuentras el problema /bin/sh: 1: -target: not found
, puedes resolverlo editando el archivo build.ninja
ubicado en la carpeta build.
Busca la palabra clave -target
y añade la palabra clave swiftc
antes de ella, para que se lea swiftc -target ...
. Este ajuste debería ayudar a resolver el problema.
Ahora podemos tener el firmware en nuestro XIAO C6, una vez que obtengas el mensaje Project build complete.
Paso 3. Flashear el firmware
usbipd es necesario si usas WSL2
Si estás trabajando con WSL2, necesitarás tener usbipd instalado.
Para instalar, usa el Administrador de Paquetes de Windows con el comando:
winget install usbipd
After installation, share the USB device using:
usbipd list #Check BUSID
usbipd bind -b '<BUSID>'
Para conectar el dispositivo desde WSL2:
usbipd attach --wsl --busid=<BUSID>
Para ver qué puerto está compartido:
dmesg | tail
# dmesg | tail -n 100 | sed -n 's/.*\(ttyACM[0-9]*\).*/\1/p'
Asumiendo que tienes ttyACM0
detectado, el comando sería:
idf.py -p /dev/ttyACM0 flash monitor
Este comando:
- Flashea el firmware al dispositivo conectado a ttyACM0.
- Inicia el monitoreo de la salida serie del dispositivo, mostrando cualquier declaración de impresión o registros.
Demostración
Referencia
- Blog de Embedded Swift
- Una Visión para Embedded Swift
- swift-embedded-examples
- esp32-led-blink-sdk - GitHub
Recursos
- WWDC24: Go small with Embedded Swift - Apple YouTube
- Añade soporte para Matter en tu aplicación de hogar inteligente
- Embedde Swift - Foro de Apple
- Use C, C++ and Objective C Libraries in a Swift Project - Cecilia Humlelu - YouTube
- Mezclando Swift y C++
- awesome-embedded-swift
Soporte Técnico y Discusión de Productos
¡Gracias por elegir nuestros productos! Estamos aquí para brindarle diferentes tipos de soporte para asegurar que su experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.