Desenvolvendo Grove Vision AI V2 usando o Himax SDK
Este tutorial foi elaborado para guiá-lo no uso do Himax SDK para a plataforma Grove Vision AI, com foco em como utilizar de forma eficaz cartões microSD para gerenciamento de dados e microfones PDM para captura de áudio. Ao final deste guia, você aprenderá a implementar esses componentes em seus projetos de IA, permitindo armazenar grandes conjuntos de dados e capturar som de alta qualidade com facilidade, diretamente no seu dispositivo Grove Vision AI.
Aqui está a lista do índice deste tutorial.
- Instalar Ubuntu 22.04 no Windows Subsystem for Linux (WSL)
- Preparação do ambiente de compilação
- Executar o exemplo de gravação usando o Himax SDK
- Análise de código do Himax SDK
Primeiros passos
Antes que o conteúdo deste tutorial comece, você pode precisar ter o seguinte hardware preparado.
Materiais necessários
| Grove Vision AI V2 |
|---|
![]() |
Se você quiser usar rotinas com cartão microSD, então talvez precise adquirir seu próprio cartão microSD (a maior capacidade testada até agora é 64GB), o formato do cartão de memória suportado é: FAT12/FAT16/FAT32/exFAT.
Instalar Ubuntu 22.04 no Windows Subsystem for Linux (WSL)
Esta seção se aplica apenas a computadores com Windows; se você não estiver usando um computador com Windows, pule esta seção e continue para Preparação do ambiente de compilação.
O Himax SDK precisa ser compilado em um ambiente Linux, então, se você estiver usando um computador com Windows, precisará instalar o WSL. Para instalar o Ubuntu 22.04 no Windows Subsystem for Linux (WSL), você precisará seguir estas etapas gerais. Antes de começar, certifique-se de que está executando uma versão compatível do Windows 10 ou Windows 11.
Etapa 1. Baixar e instalar o Ubuntu 22.04.3
Agora, você pode instalar o Ubuntu pela Microsoft Store:
Abra a Microsoft Store. Pesquise por Ubuntu 22.04.3 LTS. Selecione a versão Ubuntu 22.04.3 LTS nos resultados da pesquisa. Clique em "Get" ou "Install" para baixar e instalar o aplicativo Ubuntu.

Como alternativa, você pode instalar o Ubuntu usando a linha de comando. Abra o PowerShell ou o Prompt de Comando. Execute o seguinte comando:
wsl --install -d Ubuntu-22.04
Quando o Ubuntu estiver instalado, inicie-o a partir do menu Iniciar. Na primeira vez que iniciar, será solicitado que você crie uma conta de usuário e uma senha. Siga as instruções para configurá-lo.

Agora você pode usar o Ubuntu na sua máquina Windows usando o WSL. Você pode acessar o terminal Linux, instalar pacotes e executar aplicativos Linux.
Se você já tiver instalado o WSL 1 anteriormente e quiser fazer upgrade para o WSL 2, será necessário seguir algumas etapas adicionais, que incluem instalar o pacote de atualização do kernel Linux do WSL 2 e configurar suas distribuições existentes para usar o WSL 2. Você pode encontrar as instruções para essas etapas adicionais na documentação oficial da Microsoft.
Lembre-se de verificar a documentação oficial da Microsoft para obter as instruções mais atualizadas e dicas de solução de problemas.
Preparação do ambiente de compilação
Etapa 2. Instalar o Microsoft VSCode
Visual Studio Code (VSCode) é um editor de código gratuito e de código aberto desenvolvido pela Microsoft, disponível para Windows, macOS e Linux. A seguir vou guiá-lo pelas etapas para instalar o VSCode em cada uma dessas plataformas.
Windows:
-
Baixar o instalador:
- Visite a página oficial de download do Visual Studio Code.
- Clique no instalador para Windows para baixar o arquivo
.exe.
-
Executar o instalador:
- Quando o download estiver concluído, execute o instalador (
VSCodeSetup-x.y.z.exe, em que x.y.z é o número da versão). - Siga as instruções no assistente de instalação. Você pode aceitar as seleções padrão, embora possa querer marcar as opções para adicionar o VSCode ao PATH e criar um ícone na área de trabalho para fácil acesso.
- Quando o download estiver concluído, execute o instalador (
-
Concluir a instalação:
- Clique em 'Finish' para concluir a instalação. O VSCode deve abrir automaticamente.
-
Iniciando o VSCode:
- Você pode iniciar o VSCode clicando duas vezes no ícone da área de trabalho ou procurando por ele no menu Iniciar.
macOS:
-
Baixar o instalador:
- Acesse a página oficial de download do Visual Studio Code.
- Clique na versão para macOS para baixar o arquivo
.zip.
-
Instalar o aplicativo:
- Quando o download estiver concluído, abra o arquivo
.zippara extrair o aplicativo. - Arraste e solte o Visual Studio Code na pasta Applications. Isso o tornará disponível no Launcher.
- Quando o download estiver concluído, abra o arquivo
-
Iniciando o VSCode:
- Abra o Launchpad e clique no ícone do Visual Studio Code.
- Na primeira vez que você abrir o VSCode, poderá receber um aviso, pois ele foi baixado da Internet. Clique em 'Open' para continuar.
Linux:
Você pode instalar o VSCode no Linux usando pacotes snap ou por meio do repositório de pacotes da sua distribuição. Aqui está como fazer isso pela linha de comando no Ubuntu como exemplo:
-
Atualizar o índice de pacotes (distribuições baseadas em Ubuntu/Debian):
sudo apt update -
Instalar as dependências (se ainda não estiverem instaladas):
sudo apt install software-properties-common apt-transport-https wget -
Adicionar a chave GPG e o repositório da Microsoft:
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" -
Instalar o VSCode:
sudo apt update
sudo apt install code -
Iniciando o VSCode:
- Você pode iniciar o VSCode procurando por ele no menu de aplicativos ou executando
codeno terminal.
- Você pode iniciar o VSCode procurando por ele no menu de aplicativos ou executando
Para distribuições que suportam pacotes snap:
sudo snap install --classic code
Lembre-se de que os comandos de instalação podem variar ligeiramente dependendo da sua distribuição Linux, portanto, você deve consultar a documentação oficial ou as instruções de gerenciamento de pacotes para sua distribuição específica de Linux.
Etapa 3. Instalar o Python
Instalar o Python 3 é um processo simples que pode variar dependendo do seu sistema operacional. A seguir, vou guiá-lo pelas etapas de instalação para Windows, macOS e Linux.
Windows:
-
Baixar o Python:
- Acesse o site oficial do Python em python.org.
- Clique em "Download Python" para obter a versão mais recente para Windows.
- Escolha o instalador executável para a versão desejada.
-
Executar o instalador:
- Inicie o instalador.
- Certifique-se de marcar a caixa "Add Python 3.x to PATH" na parte inferior da janela do instalador para garantir que o Python seja adicionado às variáveis de ambiente.
- Clique em "Install Now".
-
Verificar a instalação:
- Abra o Prompt de Comando e digite o seguinte comando para verificar se o Python foi instalado corretamente:
python --versionVocê deverá ver a versão do Python que instalou.
macOS:
-
Baixar o Python:
- Visite o site oficial do Python em python.org.
- Clique em "Download Python" para obter a versão mais recente para macOS.
- Baixe o instalador macOS 64-bit.
-
Executar o instalador:
- Abra o pacote baixado e siga as instruções para instalar o Python.
-
Verificar a instalação:
- Abra o Terminal e digite o seguinte comando:
python3 --versionO sistema deverá exibir a versão do Python instalada.
Linux:
O Python 3 costuma vir pré-instalado em muitas distribuições Linux. Para verificar se o Python 3 já está instalado e para verificar a versão, abra um terminal e digite:
python3 --version
Se o Python 3 não estiver instalado ou se você quiser instalar uma versão diferente, pode usar o gerenciador de pacotes incluído na sua distribuição Linux.
Por exemplo, em sistemas baseados em Ubuntu ou Debian, você pode instalar o Python 3 seguindo estas etapas:
-
Atualizar a lista de pacotes:
sudo apt update -
Instalar o Python 3:
sudo apt install python3 -
Verificar a instalação:
python3 --version
Em sistemas baseados em Fedora ou Red Hat, você usaria dnf:
sudo dnf install python3
No Arch Linux ou Manjaro:
sudo pacman -S python
Etapa 4. Instalar python-pip
-
Instalar o
pip:pipé o instalador de pacotes para Python. Você pode usá-lo para instalar pacotes do Python Package Index e de outros índices. No Windows e no macOS,pipé incluído com o instalador do Python. No Linux, talvez seja necessário instalá-lo separadamente:Para sistemas baseados em Ubuntu ou Debian:
sudo apt install python3-pipPara Fedora:
sudo dnf install python3-pipPara Arch Linux:
sudo pacman -S python-pip -
Verificar a instalação do
pip:Verifique a instalação do pip executando:
pip3 --version -
Ambientes virtuais:
É uma boa prática usar ambientes virtuais para gerenciar dependências dos seus projetos Python. Você pode criar um ambiente virtual usando o seguinte comando:
python3 -m venv /path/to/new/virtual/environment
Lembre-se de substituir /path/to/new/virtual/environment pelo diretório onde você deseja colocar seu novo ambiente virtual.
Seguindo essas etapas, você conseguirá instalar o Python 3 e o pip no seu sistema e começar com o desenvolvimento em Python.
Etapa 5. Instalar o ambiente de compilação do make
Clone o repositório do projeto para o local onde você deseja salvá-lo.
cd /mnt/c/Users/mengd/Desktop/
git clone https://github.com/limengdu/Seeed_Grove_Vision_AI_V2_SD-Mic.git
Em seguida, abra o projeto no VSCode e entre no ambiente Linux digitando o comando wsl no terminal do VSCode. (Se você estiver no MacOS ou Linux, esse comando não é necessário)

A seguir, execute os seguintes comandos em um ambiente WSL (Windows) ou em um ambiente Linux para instalar o ambiente de compilação.
Instalar pré-requisitos
Primeiro, você precisa instalar o make, que é uma ferramenta essencial de automação de build.
sudo apt install make
Digite sua senha quando solicitado para prosseguir com a instalação.
Baixar o Arm GNU Toolchain
Você precisará do Arm GNU Toolchain para compilar projetos ARM. Para baixá-lo, navegue até o seu diretório home e use wget para baixar o pacote. Escolha um endereço adequado para instalá-lo e assim você poderá descobrir onde ele está. Aqui, irei instalá-lo no diretório acima da pasta do projeto.
cd /mnt/c/Users/mengd/Desktop/
wget https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
Este comando buscará a versão especificada da ferramenta ARM.
Extrair o arquivo do Toolchain
Após baixar o toolchain, você precisa extraí-lo. No seu terminal, execute o seguinte:
tar -xvf arm-gnu-toolchain-13.2.rel1-x86_64-arm-none-eabi.tar.xz
Isso criará um diretório com todos os arquivos necessários do toolchain.
Atualizar seu PATH
Por fim, para usar o toolchain a partir de qualquer diretório, você deve adicionar o diretório bin dos arquivos extraídos ao PATH do seu sistema. Execute este comando:
export PATH="/mnt/c/Users/mengd/Desktop/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/:$PATH"
Para que a alteração seja permanente, você deve adicionar o comando export ao seu ~/.bashrc, ~/.zshrc ou ao arquivo de configuração do shell de sua preferência.
echo 'export PATH="$HOME/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/:$PATH"' >> ~/.bashrc
Depois, aplique as alterações dando source no seu perfil ou fechando e reabrindo o terminal:
source ~/.bashrc
Verificação
Para verificar se tudo está configurado corretamente, você pode digitar:
echo $PATH | tr ':' '\n' | grep gnu
arm-none-eabi-gcc --version

Isso deve exibir a versão do compilador ARM GCC, indicando que ele está corretamente instalado e acessível de qualquer lugar do seu sistema.
Agora, seu ambiente está pronto para desenvolvimento ARM.
Por favor, não use apt install para instalar o compilador ARM, essa versão é muito antiga e pode não compilar este projeto. Verifique se a versão que você está usando é a mesma que a versão 13.2 na captura de tela.
Executar o exemplo de gravação usando o Himax SDK
Etapa 6. Compilar e enviar projetos de gravação
Neste ponto, concluímos a configuração básica do ambiente e então podemos compilar o projeto e enviá-lo. A pasta do projeto é chamada EPII_CM55M_APP_S.
Continue compilando o projeto executando os seguintes comandos em ambiente wsl ou Linux.
cd Seeed_Grove_Vision_AI_V2_SD-Mic/EPII_CM55M_APP_S
make clean
Em seguida, abra o arquivo makefile na pasta EPII_CM55M_APP_S e altere o caminho de GNU_TOOLPATH na linha 47 do código.

Esse caminho precisa ser preenchido com o caminho absoluto para a pasta bin do Arm GNU Toolchain que você descompactou na Etapa 5.
Depois salve o arquivo. Execute o seguinte comando para compilar o projeto.
make
Se a compilação correr bem, você verá o seguinte resultado de compilação.

Em seguida, precisamos converter o arquivo .elf em um arquivo .img para gravar no Grove Vision AI V2. Só precisamos executar o script output.sh.
./output.sh

Executando o script flasher.py, podemos gravar o firmware gerado no dispositivo.
Se você tiver um computador Windows, crie um novo terminal e certifique-se de executar os seguintes comandos em um ambiente git bash.
pip install xmodem --user
cd ..
python flasher.py we2_image_gen_local/output_case1_sec_wlcsp/output.img COM3
COM3 no comando indica o número da porta do dispositivo, por favor altere-o de acordo com o número real da porta do seu Grove Vision AI V2.

Etapa 7. Gravação e salvamento
Então, podemos começar a executar os comandos de gravação com a ajuda do programa de gravação em Python.
pip install playsound --user
python getdate.py
O código grava um trecho de áudio de cerca de 4 segundos e o salva em uma pasta chamada record.wav em Seeed_Grove_Vision_AI_V2_SD-Mic.
Análise de Código do Himax SDK
Para facilitar que os desenvolvedores usem o SDK da Himax para desenvolver hardware no Grove Vision AI V2, esta seção focará no código do microfone e do SD no SDK para você. O caminho principal do código do programa para este projeto é o seguinte:
EPII_CM55M_APP_S\app\scenario_app\grove_vision_ai\grove_vision_ai.c
O código fornecido configura e utiliza uma interface Pulse Density Modulation (PDM) para capturar dados de áudio em um sistema embarcado, transferindo os dados usando Direct Memory Access (DMA). Ele incorpora diversas bibliotecas externas e drivers de dispositivos, envolvendo operações de sistema de arquivos e controle de GPIO.
Inclusão de cabeçalhos e definições de macro
#include <stdio.h>
#include <assert.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
Esta seção inclui cabeçalhos padrão da biblioteca C para entrada/saída, asserções, tipos de dados booleanos, tipos inteiros, operações de string e funcionalidades da biblioteca padrão.
#ifdef TRUSTZONE_SEC
// ...
#endif
Este bloco de compilação condicional contém código de configuração de segurança relacionado ao TrustZone, que é compilado apenas se a macro TRUSTZONE_SEC estiver definida. Esta seção normalmente inclui recursos de segurança, como proteção de memória e chamadas seguras.
Cabeçalhos de dispositivo e pacote de suporte à placa
#include "WE2_device.h"
#include "WE2_device_addr.h"
#include "board.h"
#include "hx_drv_scu.h"
#include "hx_drv_spi.h"
#include "hx_drv_gpio.h"
#include "WE2_core.h"
#include "WE2_debug.h"
#include "mmc_we2.h"
#include "hx_drv_swreg_aon.h"
#include "hx_drv_pdm_rx.h"
Esses cabeçalhos incluem definições e interfaces específicas de hardware e em nível de placa, como drivers e configurações para GPIO, SPI e PDM.
Definição do buffer de áudio PDM e flag de callback
#define quarter_second_mono_bytes 8000
#define blk_num 20
int16_t audio_buf[blk_num * quarter_second_mono_bytes / 2];
volatile bool rx_cb_flag;
Define o tamanho do buffer de áudio e o número de blocos, declara um array de inteiros como buffer de áudio e uma variável de flag rx_cb_flag para indicar se a recepção via DMA foi concluída.
Função de callback de recepção DMA do PDM
void app_pdm_dma_rx_cb()
{
// ...
}
Define uma função de callback que será chamada após a conclusão da recepção DMA do PDM. A função inclui invalidação de cache para garantir que os dados sejam lidos da memória atualizada pelo DMA.
Função de Configuração do PDM
int app_pdm_setting()
{
// ...
}
Configura os parâmetros do dispositivo PDM, como a taxa de amostragem, o canal de DMA, a fonte de clock, etc., e associa as funções de callback ao dispositivo PDM.
Função Principal
int app_main(void)
{
// ...
}
A função principal realiza a inicialização e a configuração do dispositivo:
- Define a multiplexação dos pinos GPIO e inicializa os estados dos GPIOs.
- Inicializa o PDM e configura a transferência por DMA.
- Configura o sistema de arquivos FatFS para operações com arquivos.
- Lê o estado de entrada por meio de GPIO e controla o estado de saída.
- Usa um loop para verificar a flag de recepção do DMA e capturar dados de áudio.
- Envia os dados para o console de depuração e interrompe o PDM após a conclusão.
Parte do Microfone PDM
O código inclui o uso de um microfone, que é realizado por meio da configuração e uso de uma interface de Modulação por Densidade de Pulsos (PDM).
Configuração do PDM
int app_pdm_setting()
{
// PDM configuration settings
// ...
}
Esta função, app_pdm_setting, define os parâmetros de configuração do dispositivo PDM. Esses parâmetros, como a taxa de amostragem, o canal de DMA (Acesso Direto à Memória) e a fonte de clock, são cruciais para capturar dados do microfone.
Inicialização do PDM e Configuração da Transferência por DMA
if (hx_drv_pdm_init(&pdm_dev_info) != PDM_NO_ERROR)
return -1;
hx_drv_pdm_dma_lli_transfer((void *)audio_buf, blk_num, quarter_second_mono_bytes, 0);
Esta parte do código inicializa o dispositivo PDM e configura a transferência por DMA. A chamada da função hx_drv_pdm_dma_lli_transfer inicia o processo de transferência por DMA, que capturará dados de áudio do microfone conectado e os armazenará no buffer predefinido audio_buf.
Função de Callback de Recepção DMA do PDM
void app_pdm_dma_rx_cb()
{
// Callback function invoked when PDM DMA reception is complete
// ...
}
app_pdm_dma_rx_cb é uma função de callback que é chamada quando a interface PDM conclui a recepção de dados de áudio via DMA. Dentro dessa função, os dados de áudio recebidos (armazenados no buffer audio_buf) são enviados para processamento posterior.
Pelo código descrito, podemos ver que o programa envolve principalmente a configuração e o uso de um microfone para capturar dados de áudio.
Parte da microSD
O código inclui operações relacionadas a um cartão microSD por meio do uso da biblioteca do sistema de arquivos FatFS.
FATFS fs;
TCHAR drv[3] = {_T('0'), _T(':'), _T('0')};
FRESULT res = f_mount(&fs, drv, 1);
bool mount = false;
if (res != FR_OK)
{
mount = false;
xprintf("Mount Failed: %d\n", res);
}
else
{
mount = true;
xprintf("Mount Success\n");
}
Esta seção tenta montar o sistema de arquivos localizado no cartão microSD, o que é necessário para realizar operações de leitura e gravação no cartão.
FIL file;
res = f_open(&file, _T("/test.txt"), FA_CREATE_ALWAYS | FA_WRITE | FA_READ);
// ...
Esta parte do código tenta abrir (ou criar, se não existir) um arquivo chamado "test.txt" no sistema de arquivos montado, que estará no cartão microSD se a montagem tiver sido bem-sucedida.
res = f_write(&file, buffer, strlen(buffer), NULL);
// ...
Aqui, o código tenta gravar dados no arquivo que foi aberto anteriormente. Essa operação salvaria os dados no cartão microSD.
res = f_read(&file, buffer, 512, NULL);
// ...
Esta seção lê dados do arquivo "test.txt" e os armazena em um buffer. Essa operação recuperaria dados do cartão microSD.
Em resumo, o código inclui funcionalidades para montar um cartão microSD, criar ou abrir um arquivo, gravar dados no arquivo e ler dados do arquivo, indicando que o cartão microSD está sendo usado para armazenamento nesta aplicação.
O código grove_vision_ai.c já possui uma configuração mais completa para o uso do microfone PDM e do cartão de memória. No entanto, como a saída do microfone é pela porta serial no SDK, para salvar o arquivo de áudio você precisa usar getdata.py para ler a porta serial e então transcrevê-lo. Já o cartão microSD não requer um programa Python separado para as tarefas de armazenamento.
Recursos
Suporte Técnico e Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes formas 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.
