Skip to main content

Seeed Studio XIAO SAMD21 con MicroPython

Introducción a MicroPython

MicroPython es un intérprete de Python con una característica de compilación de código nativo parcial. Proporciona un subconjunto de características de Python 3.5, implementado para procesadores embebidos y sistemas restringidos. Es diferente de CPython y puedes leer más sobre las diferencias aquí.

Primeros Pasos

Primero, vamos a conectar el Seeed Studio XIAO SAMD21 a la computadora y cargar un código simple desde MicroPython para verificar si la placa está funcionando bien.

Configuración del Hardware

Configuración del Software

  • Paso 1. Descarga e instala la última versión del editor Thonny según tu sistema operativo
  • Paso 2. Ejecuta Thonny

  • Paso 3. Haz clic en "Tools-->Options" para abrir la configuración.

  • Paso 4. Elige la interfaz "Interpreter" y selecciona el dispositivo como "MicroPython(generic)" y el puerto como "Try to detect port automatically"

Conectar Seeed Studio XIAO SAMD21 a la PC y Encenderlo

  • Paso 1. Mantén presionado el botón "BOOT" y luego conecta el Seeed Studio XIAO SAMD21 a la PC a través del cable Type-C. Si funciona bien, aparecerá un escritorio "Arduino" en la PC.
  • Paso 2. Flashear el firmware

Solo ve al enlace oficial y descarga el firmware más reciente

También es posible compilar tu propio firmware para garantizar la seguridad y el soporte para las características más recientes, pero esto no es necesario.

Desarrollo de Software

Tabla de asignación de pines SEEED XIAO SAMD21

PinGPIOXiao Pin nameIRQADC
2PA02020
4PA04144
10PA1021018
11PA1131119
8PA084*16
9PA095917
40PB082682
41PB09793
7PA07877
5PA05955
6PA061066
18PA18RX_LED2*
30PA30SWCLK10*
31PA31SWDIO11*
19PA19TX_LED3*

Cargar tu código

Carga los códigos haciendo clic en el botón "Run current script". Por primera vez, Thonny preguntará dónde quieres guardar tu archivo de códigos. Tanto This Computer como MicroPython device están bien.

Si quieres usar el programa sin conexión, debes guardar el programa en XIAO SAMD21

Mantén presionado Ctrl + Shift + S al mismo tiempo, luego selecciona guardar en MicroPython device

PRUEBA GPIO (LED)

Necesitamos preparar:

Copia los siguientes códigos a Thonny.

Podemos ver que el LED azul RX_LED se enciende y parpadea una vez por segundo

from machine import Pin, Timer

led = Pin(18, Pin.OUT)
Counter = 0
Fun_Num = 0

def fun(tim):
global Counter
Counter = Counter + 1
print(Counter)
led.value(Counter%2)

tim = Timer(-1)
tim.init(period=500, mode=Timer.PERIODIC, callback=fun)

Control GPIO de Relés

Necesitamos preparar:

from machine import Pin, Timer

output_4 = Pin(8, Pin.OUT)
detect_1 = Pin(4, Pin.IN, Pin.PULL_UP)
output_value = Pin(2, Pin.OUT)
Counter = 0

def fun(tim):
global Counter
Counter = Counter + 1
output_4.value(Counter%2)
print(Counter%2,detect_1.value())
if detect_1.value() :
output_value.value(1)
else:
output_value.value(0)

tim = Timer(-1)
tim.init(period=200, mode=Timer.PERIODIC, callback=fun)

Detección humana para control automático

Necesitamos preparar:

from machine import Pin, Timer

led = Pin(8, Pin.OUT)

input_value_1 = Pin(4, Pin.IN, Pin.PULL_UP)
input_value_2 = Pin(10, Pin.IN, Pin.PULL_UP)
output_value = Pin(2, Pin.OUT)

Counter = 0
Fun_Num = 0

def fun(tim):
global Counter
Counter = Counter + 1
led.value(Counter%2)
print(input_value_1.value(),input_value_2.value())
if input_value_1.value() :
output_value.value(1)
else:
output_value.value(0)

tim = Timer(-1)
tim.init(period=50, mode=Timer.PERIODIC, callback=fun)

Soporte I2C

from machine import Pin, SoftI2C

i2c = SoftI2C(scl=Pin(9), sda=Pin(8), freq=100000)
devices = i2c.scan()
for device in devices:
print("Decimal address: ",device," | Hexa address: ",hex(device))

i2c.writeto(0x51, 'b')
print(i2c.readfrom(0x51, 4)) # read 4 bytes from device with address 0x51
i2c.writeto(0x51, 'a') # write 'a' to device with address 0x51
print(i2c.readfrom(0x51, 4)) # read 4 bytes from device with address 0x51
i2c.writeto(0x51, 'b')
print(i2c.readfrom(0x51, 4))

La familiaridad con micropython te permite hacer más, esperamos crear más valor para ti. ¡Siéntete libre de compartir tus proyectos con nosotros también!

Soporte DAC

Gracias a Aleksei Tertychnyi por enviar el código, todas las funcionalidades relacionadas fueron desarrolladas y contribuidas por él.

from machine import Pin, Timer, DAC

led = Pin(18, Pin.OUT)
counter = 0

dac = DAC(0) #DAC on A0 output

def loop(tim):
global counter
led.value(counter%2)
print('DAC value: ', end =" ")
print(counter)
dac.write(counter%1024)
counter = counter + 1

tim = Timer(-1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=loop)

El voltaje en el pin A0 comenzará a aumentar gradualmente, después de alcanzar el máximo aproximadamente a 3.3V, caerá a 0V y el ciclo se repetirá.

Soporte ADC

Código de ejemplo ADC en MicroPython:

from machine import Pin, Timer, ADC
led = Pin(18, Pin.OUT) # digital output for blinking
counter = 0 # simple counter for LED toggle

ADC_CONVERT_V = 1.0 / 65535.0 # conversion factor: raw ADC (16-bit) → voltage (vref=1.0V)

adc = ADC(4, vref=0) # ADC reads on pin A4, using internal 1.0V reference
adcVoltage = 0.0 # variable to store measured voltage

def fun(tim):
global counter, adcVoltage # make sure we update the global variables
counter += 1 # increment counter
adcVoltage = adc.read_u16() * ADC_CONVERT_V # read ADC and convert to voltage
print(adcVoltage) # print voltage to REPL
led.value(counter % 2) # toggle LED every callback (blink)

tim = Timer(-1) # create a virtual timer
tim.init(period=1000, # callback period in milliseconds (1000 ms = 1 s)
mode=Timer.PERIODIC, # periodic callback
callback=fun) # function to call

Consola de Dispositivo MicroPython

Nuestro socio Neil ha escrito un programa de consola de línea de comandos para XIAO usando MicroPython. Con este programa puedes fácilmente cargar, descargar y eliminar archivos. ¡Le agradecemos su contribución a XIAO!

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para atender diferentes preferencias y necesidades.

Loading Comments...