Guía para Swift embebido con XIAO-C6 de Seeed Studio
Introducción
La Seeed Studio XIAO ESP32C6 es una potente y versátil placa de desarrollo basada en el SoC ESP32-C6, que cuenta con dos procesadores RISC-V de 32 bits. El procesador de alto rendimiento opera hasta 160 MHz, mientras que el de bajo consumo funciona hasta 20 MHz. Con 512 KB de SRAM y 4 MB de Flash, la XIAO ESP32C6 ofrece un amplio espacio de programación, lo que la hace ideal para diversas aplicaciones de IoT. Esta placa sobresale en conectividad inalámbrica, ya que admite Wi-Fi 6 de 2.4 GHz, Bluetooth® 5.3, Zigbee y Thread (802.15.4), además de ser compatible de forma nativa con Matter, lo que es fundamental para la interoperabilidad en hogares inteligentes.
Seeed Studio XIAO ESP32C6 |
---|
![]() |
Swift es un lenguaje de programación potente e intuitivo desarrollado por Apple Inc. para crear software en iOS, macOS, watchOS, tvOS y más. En la WWDC2024, Apple anunció Embedded Swift, un proyecto de código abierto que busca llevar Swift al mundo de los sistemas embebidos y el IoT. Esto permite usar Swift en microcontroladores sin sistema operativo y con recursos mínimos disponibles. Actualmente, los ejemplos oficiales de swift-embedded-examples son compatibles con plataformas de hardware como STM32, Raspberry Pi Pico, Nordic Semiconductor e incluso RISC-V ESP32 (ESP32C6).

Embedded Swift ofrece varias ventajas:
- Rendimiento y facilidad de uso: Proporciona un rendimiento similar al de C/C++, manteniendo la sintaxis intuitiva y las características avanzadas de Swift (Swift Forums).
- Integración con bibliotecas y frameworks: La capacidad de Swift para vincularse directamente con bibliotecas C/C++ permite a los desarrolladores utilizar frameworks existentes sin problemas (GitHub).
- Familiaridad para desarrolladores: Aquellos con experiencia en Swift pueden adoptar Embedded Swift rápidamente en sus proyectos, aprovechando APIs y herramientas conocidas (Swift.org).
En esta página, cubriremos lo siguiente:
- Cómo configurar el entorno de desarrollo necesario.
- Ejecución de un ejemplo de parpadeo (Blink) basado en GPIO.
Requisitos previos
Para comenzar con Embedded Swift en la Seeed Studio XIAO-C6, necesitarás los siguientes conocimientos y configuraciones:
- Seeed Studio XIAO-C6: El hardware principal para esta guía.
- Cable USB-C: Para conectar la 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 el desarrollo con ESP32-C6. Puedes descargar e instalarla desde el sitio web de Espressif.
- Swift Toolchain: Asegúrate de que Swift 6.0 esté instalado en tu computadora. Puedes obtenerlo desde el sitio web oficial de Swift o a través del gestor de paquetes de tu sistema operativo.
Instalación de ESP-IDF:
- Sigue la guía para Linux y macOS para instalar ESP-IDF.
- Consulta la guía Desarrollo en XIAO con Espressif ESP-IDF para pasos detallados.
Instalación de Swift Toolchain:
- Instala la versión
release/6.0
de Swift Toolchain desde el sitio oficial.
Si prefieres una solución basada en Docker, revisa el Dockerfile del repositorio apple/swift-matter-examples/
.
Antes de continuar, asegúrate de tener todos los requisitos previos necesarios para una configuración y desarrollo sin problemas.
En esta página, revisaremos la configuración y el uso de Embedded Swift en Ubuntu 22.04 Jammy Linux (WSL2).
Instalar ESP-IDF
#!/bin/bash
# Actualiza e instala los paquetes requeridos
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
# Clona el repositorio de 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
# Ejecuta el script de instalación de ESP-IDF
cd ~/esp-idf && ./install.sh
# Configura un alias para el entorno de ESP-IDF
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 correr directamente este srcipt para instala swift 6.0
#!/bin/bash
# Descarga la versión preliminar de 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
# Extrae el archivo tar.gz
tar -xvzf swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a-ubuntu22.04.tar.gz
# Mueve la carpeta de Swift al directorio de inicio
sudo mv swift-6.0-DEVELOPMENT-SNAPSHOT-2024-07-03-a-ubuntu22.04 $HOME/swift-6.0
# Actualiza la variable PATH
echo 'export PATH=$HOME/swift-6.0/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# Verifica la instalación
swift --version
echo "Installation complete. Use 'get_idf' to set up the ESP-IDF environment."
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. Compila el ejemplo
Como el LED de 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() // Cambia el valor booleano.
vTaskDelay(blinkDelayMs / (1000 / UInt32(configTICK_RATE_HZ)))
}
}
Luego puedes construir el firmware:
idf.py set-target esp32c6
idf.py build
Si encuentras el problema /bin/sh: 1: -target: no encontrado
, puedes resolverlo editando el archivo build.ninja
ubicado en la carpeta de compilación.
Busca la palabra clave -target
y agrega la palabra clave swiftc
antes de ella, de modo que se lea swiftc -target ...
. Este ajuste debería ayudar a resolver el problema.
Now we can have the firmware into out XIAO C6, once you got prompt Project build complete.
Paso 3. Flashear el firmware
usbipd es necesario si usas WSL2
Si estás trabajando con WSL2, necesitarás tener instalado usbipd.
Para instalarlo, usa el Windows Package Manager con el siguiente comando:
winget install usbipd
After installation, share the USB device using:
usbipd list #Revisar BUSID
usbipd bind -b '<BUSID>'
Para conectar el dispositivo WSL2 desde adentro:
usbipd attach --wsl --busid=<BUSID>
Para ver qué puerto se comparte:
dmesg | tail
# dmesg | tail -n 100 | sed -n 's/.*\(ttyACM[0-9]*\).*/\1/p'
Suponiendo que haya detactado ttyacm0
, el comando sería:
idf.py -p /dev/ttyACM0 flash monitor
Este comando va a:
- Flashear el firmware al dispositivo conectado a ttyACM0.
- Comience a monitorear la salida en serie desde el dispositivo, mostrando cualquier declaración de print o registro.
Demostración
Referencias
- 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
- Agregar soporte para Matter en tu aplicación de hogar inteligente
- Embedded Swift - Apple Forum
- Usar bibliotecas C, C++ y Objective C en un proyecto Swift - 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 brindarte diferentes tipos de soporte para asegurarnos de que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para adaptarnos a diferentes preferencias y necesidades.