Seeed Studio XIAO ESP32C6 com CircuitPython

Este wiki apresenta como instalar e executar o CircuitPython oficial da Adafruit Industries na placa de desenvolvimento Seeed Studio XIAO ESP32C6! CircuitPython é uma linguagem de programação projetada para simplificar a experimentação e o aprendizado de programação em placas de microcontroladores de baixo custo. Ele torna o início mais fácil do que nunca, sem necessidade de downloads iniciais no desktop. Depois de configurar sua placa, abra qualquer editor de texto e comece a editar o código. Para mais informações, consulte aqui.
Instalando o CircuitPython
Método 1: Linha de comando esptool
Instalar Esptool
Se você ainda não instalou o esptool.py, pode fazê-lo usando pip no seu PC:
pip install esptool
Baixar o firmware CircuitPython para ESP32C6
Você precisa baixar o arquivo binário de firmware em circirtpython.org Após baixar o arquivo bin correto, navegue até a pasta e abra um terminal cmd ali. Na versão final deste rascunho, a versão mais recente do arquivo bin é:
adafruit-circuitpython-seeed_xiao_esp32c6-en_GB-9.1.1.bin
Conecte o XIAO ESP32C6 ao seu PC
Você precisa pressionar e manter pressionado o botão BOOT na sua placa XIAO ESP32C6 para entrar no modo 'bootloader' enquanto a conecta ao cabo USB tipo C no seu PC.
Verificar porta
Descubra todos os dispositivos seriais no seu PC.
- Linux
No Linux, você pode usar o comando dmesg para ver os dispositivos conectados:
dmesg | grep tty
Como alternativa, você pode listar dispositivos seriais usando ls:
ls /dev/ttyS* /dev/ttyUSB*
- Windows
No Windows, você pode verificar as portas seriais pelo Gerenciador de Dispositivos. Procure a seção “Ports (COM & LPT)” para ver as portas seriais disponíveis. Você também pode usar o comando mode no Prompt de Comando para listar as portas seriais:
mode
- macOS
No macOS, você pode listar as portas seriais disponíveis usando o comando ls:
ls /dev/cu*
Isso mostrará todos os dispositivos de porta serial.

Se a porta estiver ocupada, você pode usar o seguinte comando para encontrar e matar processos que estejam usando a porta (no macOS): Identifique os processos que estão usando a porta:
lsof | grep port
Este comando lista arquivos abertos e procura por qualquer processo usando a porta especificada. Encontre o ID do processo (PID) na saída e mate o processo:
kill -9 <PID>
Substitua PID pelo ID de processo real encontrado.
Apagar flash
esptool.py --chip esp32c6 --port /dev/cu.usbmodem11301 erase_flash
Substitua '/dev/cu.usbmodem11301' pelo nome de porta correto do seu sistema (por exemplo, COM3 no Windows, /dev/ttyUSB0 no Linux).
Gravar flash
Grave o firmware no XIAO ESP32C6:
esptool.py --chip esp32c6 --port /dev/cu.usbmodem11301 --baud 460800 write_flash -z 0x0 adafruit-circuitpython-seeed_xiao_esp32c6-en_GB-9.1.1.bin
Novamente, substitua '/dev/cu.usbmodem11301' pelo nome de porta correto e 'adafruit-circuitpython-seeed_xiao_esp32c6-en_GB-9.1.1.bin' pelo caminho para o seu arquivo de firmware em branco. Reinicializando à força via pino RTS...
Método 2: Web Serial esptool
O WebSerial ESPTool foi projetado para ser uma opção baseada na web para programar placas de microcontrolador da família Espressif ESP que possuem um bootloader ROM baseado em serial. Ele permite apagar o conteúdo do microcontrolador e programar até 4 arquivos em diferentes offsets. Consulte Web Serial ESPtool.
Então você pode começar a compilar scripts usando sua ferramenta preferida para o ESP32C6!
Editores recomendados para CircuitPython
Em geral, quando o CircuitPython termina de ser instalado, ou você conecta uma placa CircuitPython ao seu computador com o CircuitPython já instalado, a placa aparece no seu computador como uma unidade USB chamada CIRCUITPY. No entanto, microcontroladores ESP32 / ESP32-C3 / ESP32-C6 que não suportam USB nativo não podem apresentar uma unidade CIRCUITPY. Nessas placas, há maneiras alternativas de transferir e editar arquivos. Você pode usar o Thonny, que usa comandos ocultos enviados ao REPL para ler e gravar arquivos. Ou você pode usar o fluxo de trabalho web do CircuitPython, introduzido no Circuitpython 8. O fluxo de trabalho web fornece acesso via WiFi ao sistema de arquivos do CircuitPython baseado em navegador, consulte introdução ao fluxo de trabalho web usando o editor de código
1. Thonny
Instale e abra o Thonny e, em seguida, configure o Thonny seguindo a instrução:
pip install thonny
#open thonny after installation
thonny
Vá em Run-->Configure Interpreter e certifique-se de que a aba Interpreter nas opções do Thonny esteja como mostrado abaixo, selecione "CircuitPython (generic)" e a porta:

Clique em "OK" na janela de diálogo e você deverá ver o shell Micropython na parte inferior da janela do Thonny, como mostrado na figura abaixo. Então você pode usar Read-Evaluate-Print-Loop, ou REPL para conexão serial, o que permite inserir linhas individuais de código e executá-las imediatamente no shell. É realmente útil se você estiver tendo problemas com um programa específico e não conseguir descobrir o motivo. É interativo, então é ótimo para testar novas ideias. Consulte REPL para mais informações.
Interagindo com o REPL com help(), que informa por onde começar a explorar o REPL. Para executar código no REPL, digite-o ao lado do prompt do REPL. Para listar módulos internos, digite help("modules") e será exibida uma lista de todos os módulos principais incorporados ao CircuitPython, incluindo "board".

Então você pode digitar "import board" no REPL e pressionar Enter. Em seguida, digite "dir(board)" no REPL e obtenha uma lista de todos os pinos na sua placa.
#check pin using following command.For details on REPL, see Welcome to CircuitPython!
#enter to the shell of Thonny.
>>> import board
>>> dir(board)
['__class__', '__name__', 'A0', 'A1', 'A2', 'A4', 'A5', 'A6', 'D0', 'D1', 'D10', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'I2C', 'LP_I2C_SCL', 'LP_I2C_SDA', 'LP_UART_RXD', 'LP_UART_TXD', 'MISO', 'MOSI', 'MTCK', 'MTDI', 'MTDO', 'MTMS', 'RX', 'SCK', 'SCL', 'SDA', 'SPI', 'TX', 'UART', '__dict__', 'board_id']
2. Fluxo de trabalho web do CircuitPython

The CircuitPython Code Editor fornece uma experiência mais completa e enriquecedora ao editar arquivos no seu dispositivo baseado em ESP32 executando a versão mais recente do CircuitPython. O editor permite que você edite arquivos usando Bluetooth pela web, USB e Web Workflow via WiFi.
Informações de pinagem/porta

- Para mais informações, consulte a visão geral do hardware
- Esquema elétrico do Seeed Studio XIAO ESP32C6
Primeiros passos com CircuitPython no XIAO ESP32C6
Rede-WLAN
Para placas sem USB nativo (como ESP32-C6 ou ESP32), você precisará usar o REPL para se conectar ao Wi-Fi. A função Wi-Fi é ativada quando um arquivo chamado settings.toml é adicionado à pasta raiz do sistema de arquivos do CircuitPython.
Método 1: Criar arquivo setting.toml via REPL
Crie o arquivo settings.toml via REPL:
f = open('settings.toml', 'w')
f.write('CIRCUITPY_WIFI_SSID = "wifissid"\n')
f.write('CIRCUITPY_WIFI_PASSWORD = "wifipassword"\n')
f.write('CIRCUITPY_WEB_API_PASSWORD = "webpassword"\n')
f.close()
-
Substitua pelo nome da sua rede Wi-Fi local wifissid
-
Substitua pela senha da sua rede Wi-Fi local password
-
A outra senha é usada quando você acessa a placa por meio de um navegador web. Defina isso para o que você quiser webpassword
Depois de conectado, você pode pressionar o botão Reset para iniciar o firmware, depois pressionar Enter algumas vezes para chegar ao prompt REPL. Em seguida, reconecte o dispositivo ao Thonny, o endereço IP do seu XIAO ESP32C6 será exibido.
Método 2: Editar arquivo setting.toml via Thonny Files
Abra Thonny-->View-->Files e escreva a rede Wi-Fi, a senha e a webpassword no arquivo setting.toml. Lembre-se de salvá-lo e pressionar o botão Reset para iniciar o firmware e reabrir o Thonny.


Não se esqueça, o ESP32 não suporta redes de 5 GHz, então use seu SSID de 2,4 GHz se você tiver dois.

Atraso e temporização
O módulo time:
import time
dir(time)
time.sleep(1) # sleep for 1 second
time.localtime() # get local time
Pinos e GPIO
Pode usar os módulos "board" e "microcontroller" para controlar o GPIO com o código a seguir e conectar um LED ao D5:

# using board module
import board
import digitalio
import time
led = digitalio.DigitalInOut(board.D5)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True # turn on LED
time.sleep(1)
led.value = False # turn off LED
time.sleep(1)
# using microcontroller module
import microcontroller
import digitalio
import time
led = digitalio.DigitalInOut(microcontroller.pin.GPIO23)
led.direction = digitalio.Direction.OUTPUT
while True:
led.value = True # turn on LED
time.sleep(1)
led.value = False # turn off LED
time.sleep(1)

UART(barramento serial)
Usando o módulo busio:
import board
import busio
# initialise UART
uart = busio.UART(board.LP_UART_TXD, board.LP_UART_RXD, baudrate=9600)
# send data
uart.write(b"Hello UART\n")
# receive data
while True:
if uart.in_waiting > 0:
data = uart.read()
print("Received:", data)
O XIAO ESP32C6 possui uma UART de hardware. os pinos estão listados abaixo:
| UART | Pino | GPIO |
|---|---|---|
| LP_UART_TXD | A5 | GPIO5 |
| LP_UART_RXD | A4 | GPIO4 |
PWM(modulação por largura de pulso)
Usando o módulo pwmio:
import board
import pwmio
from digitalio import DigitalInOut
import time
# initialise PWM
pwm = pwmio.PWMOut(board.D5, frequency=5000, duty_cycle=0)
# a dimming led
while True:
for duty_cycle in range(0, 65535, 1000):
pwm.duty_cycle = duty_cycle
time.sleep(0.1)
ADC(conversão analógica para digital)
Usando o módulo analogio:
import board
import analogio
import time
# initialise ADC
adc = analogio.AnalogIn(board.A0)
while True:
value = adc.value
print("ADC Value:", value)
time.sleep(1)
SPI
import board
import busio
import digitalio
# Initialize SPI
spi = busio.SPI(board.SCK, board.MOSI, board.MISO)
# Call try_lock (and later unlock) to ensure you are the only user of the SPI bus
spi.try_lock()
# Choose a chip select pin
cs = digitalio.DigitalInOut(board.D3)
cs.direction = digitalio.Direction.OUTPUT
cs.value = True
# Make sure chip select is active (low) before communicating
cs.value = False
# Send and receive data
data_out = bytearray([0x01, 0x02, 0x03])
data_in = bytearray(3)
try:
# Write and read data
spi.write_readinto(data_out, data_in)
print("Received:", data_in)
finally:
# Ensure chip select is inactive (high) after communication
cs.value = True
O XIAO ESP32C6 possui uma SPI de hardware. os pinos estão listados abaixo:
| SPI | Pino |
|---|---|
| SCK | D8 |
| MOSI | D10 |
| MISO | D9 |
I2C
import board
import busio
# Initialize I2C
i2c = busio.I2C(board.SCL, board.SDA, frequency=400000)
Placa de Expansão Base para XIAO
Pré-requisitos:
| XIAO ESP32C6 com header soldado | Placa de Expansão Base para XIAO | Sensor de Luz Grove |
|---|---|---|
![]() | ![]() | ![]() |
Ler os dados do sensor de luz

import time
import board
import analogio
# Initialize the analog input on A0
analog_in = analogio.AnalogIn(board.A0)
def get_voltage(pin):
return (pin.value * 3.3) / 65536
while True:
# Read the raw analog value
raw_value = analog_in.value
# Convert the raw value to voltage
voltage = get_voltage(analog_in)
# Print the raw value and voltage to the serial console
print("[Light] Raw value: {:5d} Voltage: {:.2f}V".format(raw_value, voltage))
# Delay for a short period of time before reading again
time.sleep(1)

Acender a tela OLED
Baixar e Extrair o Pacote de Bibliotecas:
- Acesse a biblioteca e faça o download do pacote de bibliotecas para CircuitPython. Para instalar, baixe o pacote apropriado para a sua versão do CircuitPython.
Copiar Bibliotecas para o CIRCUITPY:
- Extraia o arquivo ZIP do pacote de bibliotecas. Você encontrará uma pasta chamada lib com vários arquivos .mpy.
- Abra Thonny-->View-->Files e, em seguida, copie os arquivos .mpy necessários e a pasta lib para CircuitPython device/lib.
Você precisará instalar manualmente as bibliotecas necessárias a partir do pacote:
- adafruit_ssd1306
- adafruit_bus_device
- adafruit_register
- adafruit_framebuf.mpy
Copiar fond5x8.bin para o CIRCUITPY:
- Baixe o arquivo font5x8.bin a partir daqui.
- Abra Thonny-->View-->Files e, em seguida, copie os arquivos font5x8.bin para o dispositivo CircuitPython.



Crie Seu Código CircuitPython:
- Crie um arquivo code.py (ou main.py). Este arquivo deve conter o seu código CircuitPython.
import board
import busio
import displayio
import adafruit_ssd1306
import terminalio
# Initialize I2C
i2c = busio.I2C(board.SCL, board.SDA)
# Define the display parameters
oled_width = 128
oled_height = 64
# Initialize the OLED display
oled = adafruit_ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Fill the display with the color 0
oled.fill(0)
# Set the first pixel white
oled.pixel(0, 0, 1)
oled.show()

"Desinstalando" o CircuitPython
Muitas das nossas placas podem ser usadas com várias linguagens de programação. Por exemplo, a Circuit Playground Express pode ser usada com MakeCode, Code.org CS Discoveries, CircuitPython e Arduino. Você pode querer voltar para Arduino ou MakeCode. Não há nada para desinstalar. CircuitPython é "apenas outro programa" que é carregado na sua placa. Então você pode simplesmente carregar outro programa (Arduino ou MakeCode) e ele irá sobrescrever o CircuitPython.
Faça backup do seu Código
antes de substituir o CircuitPython, não se esqueça de fazer um backup do código que você tem na unidade CIRCUITPY. Isso significa seu code.py e quaisquer outros arquivos, a pasta lib etc. Você pode perder esses arquivos ao remover o CircuitPython, então backups são fundamentais! Basta arrastar os arquivos para uma pasta no seu laptop ou computador desktop como faria com qualquer unidade USB.
Migrando para Arduino
Se você quiser usar Arduino em vez disso, basta usar a IDE do Arduino para carregar um programa Arduino. Aqui está um exemplo de envio de um simples programa Arduino "Blink", mas você não precisa usar este programa em particular. Comece conectando sua placa e clicando duas vezes em reset até acender o(s) LED(s) onboard.
Obrigado por ler este artigo! Sinta-se à vontade para compartilhar suas opiniões nos comentários.
Recursos
-
O arquivo binário de firmware para XIAO ESP32C6 com CircuitPython
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.


