Skip to Content

Programar o UNIHIKER K10 com o Arduino IDE

Programar o UNIHIKER K10 com o Arduino IDE

O UNIHIKER K10 é uma placa de desenvolvimento compacta baseada no ESP32-S3, projetada para prototipagem rápida em aplicações de IA, IoT e sensores.

Integra um ecrã TFT de 2,8 polegadas, câmara de 2 MP, microfone, altifalante, LED RGB e sensores incorporados para temperatura, humidade, luz e movimento. Possui Wi-Fi, Bluetooth, USB-C, suporte a microSD e portas de expansão Gravity para conectividade.

A placa vem com funções de IA prontas a usar, como reconhecimento de voz e facial, e suporta programação via MicroPython, Arduino ou IDEs gráficas como Mind+.

Neste tutorial, aprenderá a programar o UNIHIKER K10 com o Arduino IDE. No entanto, para alguns exemplos de código será necessário usar o Mind+, pois por vezes o código compilado e gravado com o Arduino IDE não funciona na placa UNIHIKER K10.

Peças Necessárias

Para este tutorial, só precisará do UNIHIKER K10. Pode adquiri-lo na DFRobot ou Amazon, por exemplo:

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Hardware do UNIHIKER K10

O Unihiker K10 é construído em torno do módulo ESP32-S3 N16R8, com um processador dual-core Xtensa LX7 de 32 bits a operar até 240 MHz. Inclui 512 KB de SRAM interna e 16 MB de memória flash, suportando armazenamento externo via slot para cartão microSD. A imagem abaixo mostra a frente e o verso da placa:

Front and Back of UNIHIKER K10
Frente e Verso do UNIHIKER K10 (source)

Conectividade Sem Fios

A placa oferece Wi-Fi a 2,4 GHz compatível com os padrões IEEE 802.11 b/g/n e integra Bluetooth 5.0 com suporte BLE. Esta combinação permite comunicação em rede e conectividade de baixo consumo entre dispositivos.

Hardware Visual, Áudio e de Interação

O K10 incorpora um ecrã TFT de 2,8 polegadas com resolução de 240×320 pixels, controlado por um ILI9341. Inclui um módulo de câmara GC2145 de 2 megapixels com campo de visão aproximado de 80 graus, adequado para tarefas básicas de visão computacional.

As funcionalidades de áudio incluem dois microfones MEMS digitais para entrada de voz e um altifalante integrado de 2 W com amplificador onboard. A placa também possui três LEDs RGB WS2812 endereçáveis para feedback visual.

Sensores Ambientais e de Movimento

O dispositivo integra um AHT20 sensor capaz de medir temperatura entre aproximadamente –40 °C e +85 °C e humidade relativa de 0 a 100%. Inclui um LTR303ALS sensor de luz ambiente que opera numa ampla gama dinâmica, desde níveis muito baixos até iluminação exterior intensa. A deteção de movimento é feita por um acelerómetro triaxial SC7A20H com faixas de medição selecionáveis até ±16 g.

Sensor and IO of the UNIHIKER K10
Sensores e IO do UNIHIKER K10

Interfaces de I/O e Expansão

O K10 oferece múltiplas interfaces de expansão, incluindo USB-C para alimentação e programação, slot microSD para armazenamento removível e conectores Gravity de 3 e 4 pinos que expõem interfaces digitais, analógicas, I²C e UART. A placa tem ainda dois botões programáveis pelo utilizador, além dos botões padrão Boot e Reset.

Um conector de bateria PH2.0 suporta entrada de bateria externa, e o conector lateral expõe GPIO, PWM, ADC, SPI, UART e linhas I²C adicionais para maior integração de hardware.

Características de Alimentação

A placa pode ser alimentada via USB-C, conector de bateria PH2.0 dedicado ou pinos de alimentação no conector lateral. Os componentes internos e GPIO operam a níveis lógicos de 3,3 volts. O consumo de energia é cerca de 150mA ao executar deteção facial.

Dimensões Físicas

O tamanho total do Unihiker K10 é aproximadamente 51,6 mm por 83 mm, com uma espessura de cerca de 11 mm, oferecendo uma pegada compacta adequada para projetos portáteis, educativos e embutidos.

Capacidades de IA e Software Pré-Instaladas

O K10 inclui várias funcionalidades de IA integradas, como deteção facial, reconhecimento de objetos, leitura de códigos QR, deteção de animais de estimação, deteção de movimento e reconhecimento de voz offline. Estas funções correm localmente usando a câmara, microfones e sensores onboard, sem necessidade de recursos externos. O dispositivo suporta programação via MicroPython, Arduino/PlatformIO e ambientes gráficos como Mind+.

Funcionalidade IntegradaDescrição / Notas
Deteção FacialO K10 pode detetar rostos humanos localmente através da sua câmara de 2 MP — útil para projetos como controlo de acesso, deteção de presença ou experiências simples de visão computacional.
Reconhecimento FacialA placa pode reconhecer e distinguir rostos previamente registados (não apenas detetar) para tarefas básicas de reconhecimento facial.
Deteção de Gato / Cão (Animal de Estimação)A IA de imagem do K10 pode identificar gatos ou cães — permitindo demonstrações de reconhecimento de animais ou aplicações de monitorização de animais de estimação.
Reconhecimento de Código QRPode detetar e decodificar códigos QR usando a sua câmara e modelo de visão pré-carregado.
Deteção de MovimentoA placa suporta deteção de movimento via visão (câmara) e não apenas pelo acelerómetro — útil para tarefas simples de segurança ou deteção de atividade.
Modelos Personalizados de Reconhecimento de ImagemOs utilizadores podem implementar os seus próprios modelos TinyML de reconhecimento de imagem, permitindo deteção ou classificação personalizada além dos modelos integrados.
Reconhecimento de Voz Local (Offline)Com os microfones onboard e modelo de processamento de voz, o K10 pode reconhecer comandos de voz sem necessidade de ligação à internet.
Comandos de Voz PersonalizadosO utilizador pode definir comandos de voz personalizados para projetos controlados por voz — útil para IoT por voz, projetos interativos ou aplicações de acessibilidade.

Especificações Técnicas

A tabela seguinte resume os detalhes técnicos da placa UNIHIKER K10:

CategoriaEspecificação
Processador & MemóriaESP32-S3 (dual-core Xtensa LX7 até 240 MHz), 512 KB SRAM, 16 MB flash
ArmazenamentoSlot para cartão MicroSD para armazenamento externo
Conectividade Sem FiosWi-Fi 2.4 GHz (802.11 b/g/n), Bluetooth 5.0 com BLE
EcrãLCD TFT de 2,8 polegadas, resolução 240 × 320, controlador ILI9341
CâmaraSensor GC2145 de 2 MP, campo de visão ~80°
MicrofonesDois microfones MEMS digitais
AltifalanteAltifalante integrado de 2 W com amplificador onboard
LEDsTrês LEDs RGB WS2812 endereçáveis
Sensores AmbientaisSensor de temperatura/humidade AHT20; sensor de luz ambiente LTR303ALS
Sensor de MovimentoAcelerómetro triaxial SC7A20H (até ±16 g)
Portas de ExpansãoConectores Gravity de 3 e 4 pinos; conector lateral com GPIO, ADC, PWM, I²C, SPI, UART
Opções de AlimentaçãoUSB-C, entrada de bateria PH2.0, pinos de alimentação no conector lateral
Consumo de Energia150mA
Nível Lógico3.3 V
DimensõesAproximadamente 51,6 mm × 83 mm × 11 mm
Funcionalidades Pré-InstaladasModelos de IA integrados, reconhecimento de voz offline, utilitários de câmara e sensores

Diagrama de Blocos e Esquemas

A imagem abaixo mostra o diagrama de blocos da placa UNIHIKER K10. Note que o diagrama indica os endereços I2C dos componentes de hardware:

Block diagram of the UNIHIKER K10
Diagrama de blocos do UNIHIKER K10 (source)

Para informações mais detalhadas consulte o UNIHIKER K10 Schematic.

Instalar e Executar Mind+ V1.x

Neste tutorial, preferencialmente usaremos o Arduino IDE para programar a placa UNIHIKER K10. Contudo, para alguns programas isso atualmente (fev 2026) não funciona e é necessário usar a ferramenta de programação Mind+. Por isso, sugiro que instale o Mind+ antes de prosseguir.

Note que existem duas versões principais do Mind+: V1.x e V2.x. Certifique-se de descarregar e instalar a versão V1.x!

Instalar Mind+ V1.x

A instalação é simples. Vá a https://mindplus.cc/en/download.html, descarregue o Mind+ V1.x para o seu sistema operativo e execute o instalador. Neste tutorial, estou a usar a Versão: V1.8.1 RC3.0 no Windows.

Selecionar Placa

Abra a aplicação Mind+ e selecione a placa UNIHIKER K10. Para isso, clique no botão “Extensions” no canto inferior esquerdo, como mostrado abaixo:

Isto abre uma nova página com as placas. Desça até encontrar a placa UNIHIKER K10. Clique nela e depois em “Back” para voltar ao ecrã principal da aplicação Mind+:

Ligar Unihiker K10

Ligue a sua placa Unihiker K10 ao computador com o cabo USB. Depois clique no menu “Connect Device” no Mind+ e selecione “COMxx-UNIHIKER K10” como mostrado:

A porta COM específica depende do seu computador. Certifique-se que nenhuma outra aplicação está ligada ao UNIHIKER K10. Por exemplo, não pode ligar o Arduino IDE e o Mind+ em paralelo.

Edição Manual e Upload

O Mind+ permite criar programas graficamente com blocos ou editando código manualmente. Vamos usar a funcionalidade de Edição Manual. No lado direito do IDE Mind+ encontra as abas “Auto Generate” e “Manual Editing”. Clique na aba “Manual Editing” para mudar para o editor manual, como mostrado aqui:

Agora copie e cole o seguinte código no Editor e depois pressione o botão “Upload” acima do painel do editor.

#include "unihiker_k10.h"

UNIHIKER_K10 k10;

void setup() {
  k10.begin();
  k10.initScreen(2);
  k10.creatCanvas();
  k10.setScreenBackground(0xFFFF00);
  k10.canvas->canvasText("Makerguides", 5, 0x000000);
  k10.canvas->updateCanvas();
}

void loop() {
}

Deverá ver o código a ser compilado e carregado na placa. Ele define a cor do ecrã para amarelo (0xFFFF00) e imprime o texto “Makerguides” na linha 5. No ecrã do Unihiker K10 deverá ver o seguinte:

Se isto funcionar, parabéns. Agora pode programar o Unihiker K10 com o IDE Mind+.

Restaurar definições iniciais do dispositivo

Se tiver problemas a ligar ou gravar o Unihiker K10, muitas vezes ajuda restaurar as definições do dispositivo. Vá ao menu e clique em “Restore device initial settings” como mostrado abaixo:

Isto é especialmente útil quando carrega um programa via Arduino IDE que deixa a placa Unihiker K10 num estado sem resposta.

Na próxima secção aprenderá a configurar o Arduino IDE para programar o Unihiker K10.

Instalar placa UNIHIKER K10 no Arduino IDE

Para programar o UNIHIKER K10 via Arduino IDE, primeiro precisa instalar a placa UNIHIKER K10. Nesta secção, guiar-lhe-ei pelos passos necessários.

Comece por abrir o Arduino IDE e vá a “File -> Preferences…” para abrir o diálogo de Preferências:

No diálogo de Preferências, procure a secção “Additional boards manager URLs” e clique no botão verde no canto inferior direito, como mostrado abaixo:

Isto abrirá a lista de “Additional boards manager URLs”:

Deve adicionar a seguinte URL (marcada a amarelo na imagem acima):

https://downloadcd.dfrobot.com.cn/UNIHIKER/package_unihiker_index.json

Como pode ver, tenho também URLs para placas ESP8266 e ESP32. Não se deixe confundir. Apenas adicione a URL para o UNIHIKER à lista. A ordem não importa.

Instalar placa UNIHIKER K10

De seguida, instalamos a placa UNIHIKER K10. Abra o BOARDS MANAGER, escreva “unihiker” na caixa de pesquisa e deverá ver a placa “UNIHIKER by DFRobot”:

Clique no botão INSTALL e a placa UNIHIKER K10 será instalada. Em fev 2026, a versão do software da placa UNIHIKER K10 é 0.0.3.

Depois ligue a sua placa UNIHIKER K10 ao computador via cabo USB. O Arduino IDE deverá reconhecê-la e permitir selecionar a porta COM:

Configurações de Ferramentas

Finalmente, ajustamos as configurações da placa, que encontra em “Tools”:

Pode manter as configurações por defeito, exceto “USB CDC on Boot”, que deve definir como “Enabled”, e a língua do modelo, que deve ser “EN” (Inglês).

Exemplo de Código: Comunicação Serial

Antes de tentar código mais complexo, vamos verificar se a gravação e comunicação com a placa funcionam. Carregue o seguinte código na placa UNIHIKER K10:

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("Makerguides");
  delay(2000);
}

Depois abra o Monitor Serial e deverá ver o texto “Makerguides” impresso a cada dois segundos. Se não, verifique se as configurações de Ferramentas e a taxa de Baud (115200) estão corretas. Como mencionado, precisa de “USB CDC on Boot” definido como “Enabled”.

Este código deve funcionar tanto com o Arduino IDE como com o Mind+ IDE.

Exemplo de Código: Ecrã

O código seguinte testa a função do ecrã. Define a orientação do ecrã para 2, a cor de fundo para amarelo (0xFFFF00) e imprime o texto “Makerguides” na linha 5 a preto (0x000000):

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"

UNIHIKER_K10 k10;

void setup() {
  k10.begin();
  k10.initScreen(2);
  k10.creatCanvas();
  k10.setScreenBackground(0xFFFF00);
  k10.canvas->canvasText("Makerguides", 5, 0x000000);
  k10.canvas->updateCanvas();
}

void loop() {
}

No meu caso, este código funciona quando carregado com o Mind+ IDE, mas não com o Arduino IDE. Neste último, o código compila e pode ser gravado, mas não corre na placa. Verá que para todos os exemplos seguintes que usam o ecrã, precisa carregar o código com Mind+.

Para mais exemplos de código sobre programação do ecrã, veja o display-showing-text exemplo.

Exemplo de Código: Medir Temperatura e Humidade

O próximo código usa o sensor integrado ATH20 para medir a temperatura e humidade ambiente. O código mede estes dados ambientais a cada segundo e mostra os valores no ecrã:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"

UNIHIKER_K10 k10;
AHT20 aht20;

void setup() {
  k10.begin();
  k10.initScreen(2);
  k10.creatCanvas();
  k10.setScreenBackground(0xFFFFFF);
}

void loop() {
  float temp = aht20.getData(AHT20::eAHT20TempC);
  float hum = aht20.getData(AHT20::eAHT20HumiRH);

  k10.canvas->canvasText(String("Temp: ") + String(temp), 1, 0x000000);
  k10.canvas->canvasText(String("Hum : ") + String(hum), 2, 0x000000);
  k10.canvas->updateCanvas();
  
  delay(1000);
}

Este código funciona quando carregado via Mind+, mas não com o Arduino IDE.

Exemplo de Código: Medir Luminosidade

O UNIHIKER K10 também tem um sensor de luz ambiente integrado, o LTR303ALS. O exemplo de código seguinte mostra como medir a intensidade da luz ambiente (luminosidade) com este sensor:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"

UNIHIKER_K10 k10;

void setup() {
  k10.begin();
  k10.initScreen(2);
  k10.creatCanvas();
  k10.setScreenBackground(0xFFFFFF);
}

void loop() {
  uint16_t als = k10.readALS();

  k10.canvas->canvasText(String("Brightness: ") + String(als), 1, 0x000000);
  k10.canvas->updateCanvas();
  
  delay(200);
}

Como estamos a usar o ecrã, este código só funciona quando carregado via Mind+ IDE.

Exemplo de Código: Reproduzir Áudio

O exemplo de código seguinte demonstra como controlar o altifalante do UNIHIKER K10. Reproduz uma sequência diferente de tons quando o botão A ou o botão B é pressionado:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"

void onButtonAPressed();
void onButtonBPressed();

UNIHIKER_K10 k10;
Music music;

void onButtonAPressed() {
  music.playMusic(DADADADUM);
}

void onButtonBPressed() {
  music.stopPlayTone();
  music.playTone(131, 8000);
  music.playTone(131, 8000);
  music.playTone(196, 8000);
  music.playTone(196, 8000);
  music.playTone(220, 8000);
  music.playTone(220, 8000);
  music.playTone(196, 8000);
}

void setup() {
  k10.begin();
  k10.buttonA->setPressedCallback(onButtonAPressed);
  k10.buttonB->setPressedCallback(onButtonBPressed);
}

void loop() {
}

Verifiquei que este código funciona com o Arduino IDE e o Mind+ IDE.

Veja também o audio-record-and-play exemplo que mostra como gravar áudio, armazená-lo no cartão SD e reproduzi-lo pelo altifalante.

Exemplo de Código: Acelerómetro

No exemplo de código seguinte usamos os dados do acelerómetro integrado para controlar o movimento de um ponto (bola) no ecrã. O código desenha um círculo verde que se move na direção em que a placa é inclinada.

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"

UNIHIKER_K10 k10;

void setup() {
  k10.begin();
  k10.initScreen(2);
  k10.creatCanvas();
  k10.setScreenBackground(0xFFFFFF);
}

void loop() {
  static float accx, accy, x, y;
  accx = (k10.getAccelerometerX());
  accy = (k10.getAccelerometerY());
  x = (120 + (accx / 3));
  y = (120 + (accy / 3));
  k10.canvas->canvasCircle(x, y, 8, 0x00FF00, 0x00FF00, true);
  k10.canvas->updateCanvas();
  k10.canvas->canvasCircle(x, y, 9, 0xFFFFFF, 0xFFFFFF, true);
}

Este código funciona quando carregado via Mind+, mas falha com o Arduino IDE.

Para mais informações sobre o código, veja o on-board-sensor-accelerate-ball exemplo.

Exemplo de Código: Reconhecimento de Voz Mínimo

Este código testa o reconhecimento de voz. Após dizer a palavra de ativação “Hi, Telly” ou “Jarvis”, o LED azul acende. Se disser “lights on”, o texto “ON” será impresso no monitor serial. Se disser “lights off”, o texto “OFF” será impresso.

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "asr.h"
#include "unihiker_k10.h"

#define LIGHTS_ON 1
#define LIGHTS_OFF 2

ASR asr;
UNIHIKER_K10 k10;

void setup() {
  Serial.begin(9600);
  k10.begin();

  asr.asrInit(CONTINUOUS, EN_MODE, 6000);
  while (asr._asrState == 0) { delay(100); }

  asr.addASRCommand(LIGHTS_ON, "lights on");
  asr.addASRCommand(LIGHTS_OFF, "lights off");
}

void loop() {
  if (asr.isDetectCmdID(LIGHTS_ON)) {
    Serial.println("ON");
  }
  if (asr.isDetectCmdID(LIGHTS_OFF)) {
    Serial.println("OFF");
  }
}

Este código funciona com o Arduino IDE e Mind+.

Exemplo de Código: Controlar Luzes com Voz

No próximo exemplo, estendemos o código anterior para ligar ou desligar os LEDs RGB da placa usando comandos de voz. Como antes, primeiro deve dizer a palavra de ativação “Hi, Telly” ou “Jarvis” e depois pode dizer “lights on” ou “lights off” para ligar ou desligar os LEDs.

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "asr.h"
#include "unihiker_k10.h"

#define LIGHTS_ON 1
#define LIGHTS_OFF 2

UNIHIKER_K10 k10;
ASR asr;

void setup() {
  k10.begin();

  asr.asrInit(CONTINUOUS, EN_MODE, 6000);
  while (asr._asrState == 0) { delay(100); }

  asr.addASRCommand(LIGHTS_ON, "lights on");
  asr.addASRCommand(LIGHTS_OFF, "lights off");
}

void loop() {
  if (asr.isDetectCmdID(LIGHTS_ON)) {
    k10.rgb->brightness(9);
    k10.rgb->write(-1, 0xFFFFFF);
  }
  if (asr.isDetectCmdID(LIGHTS_OFF)) {
    k10.rgb->brightness(0);
    k10.rgb->write(-1, 0xFFFFFF);
  }
}

Este código funcionou com o Arduino IDE e Mind+.

Veja o ai-speech-recognition exemplo para mais informações sobre o código.

Exemplo de Código: Diminuir Luzes com Voz

Finalmente, um último exemplo de reconhecimento de voz. Estendemos o código anterior para também controlar o brilho dos LEDs. O código reconhece agora os comandos “lights on”, “lights off”, “brighter” e “darker”:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "asr.h"
#include "unihiker_k10.h"

#define LIGHTS_ON 1
#define LIGHTS_OFF 2
#define LIGHTS_MORE 3
#define LIGHTS_LESS 4

int brightness = 5;

UNIHIKER_K10 k10;
ASR asr;

void setup() {
  k10.begin();

  asr.asrInit(CONTINUOUS, EN_MODE, 6000);
  while (asr._asrState == 0) { delay(100); }

  asr.addASRCommand(LIGHTS_ON, "lights on");
  asr.addASRCommand(LIGHTS_OFF, "lights off");
  asr.addASRCommand(LIGHTS_MORE, "brighter");
  asr.addASRCommand(LIGHTS_LESS, "darker");
}

void loop() {
  if (asr.isDetectCmdID(LIGHTS_ON)) {
    k10.rgb->brightness(brightness);
    k10.rgb->write(-1, 0xFFFFFF);
  }
  if (asr.isDetectCmdID(LIGHTS_OFF)) {
    k10.rgb->brightness(0);
    k10.rgb->write(-1, 0xFFFFFF);
  }
  if (asr.isDetectCmdID(LIGHTS_MORE)) {
    brightness = constrain(brightness+1, 1, 9);
    k10.rgb->brightness(brightness);
    k10.rgb->write(-1, 0xFFFFFF);
  }
  if (asr.isDetectCmdID(LIGHTS_LESS)) {
    brightness = constrain(brightness-1, 1, 9);
    k10.rgb->brightness(brightness);
    k10.rgb->write(-1, 0xFFFFFF);
  }  
}

Este código funciona com o Arduino IDE e Mind+.

Exemplo de Código: Deteção de Movimento

Neste exemplo usamos a câmara onboard do UNIHIKER K10 para detetar movimento. Sempre que um objeto se move em frente à câmara, os LEDs RGB mudam de cor de azul para vermelho:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"
#include "AIRecognition.h"

UNIHIKER_K10 k10;
AIRecognition ai;

void setup() {
  k10.begin();
  k10.initScreen(2);
  ai.initAi();
  k10.initBgCamerImage();
  k10.setBgCamerImage(false);
  k10.creatCanvas();
  ai.switchAiMode(ai.NoMode);
  k10.setBgCamerImage(true);
  ai.switchAiMode(ai.Move);
  ai.setMotinoThreshold(100);
  k10.rgb->write(-1, 0x0000FF);
}

void loop() {
  if (ai.isDetectContent(AIRecognition::Move)) {
    k10.rgb->write(-1, 0xFF0000);
  } else {
    k10.rgb->write(-1, 0x0000FF);
  }
}

Este código funciona apenas quando carregado com o Mind+ IDE.

Veja o on-board-sensor-accelerate-ball exemplo para uma demonstração do código.

Exemplo de Código: Deteção Facial

Finalmente, vamos testar as capacidades de deteção facial. O código abaixo usa a câmara para detetar rostos. Mostra a imagem da câmara no ecrã e coloca um retângulo verde (caixa delimitadora) em volta do rosto detetado. Também imprime as coordenadas x, y e o tamanho da caixa (w, h) no ecrã:

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"
#include "AIRecognition.h"

UNIHIKER_K10 k10;
AIRecognition ai;

void display(char *text, int v, int x, int y) {
  k10.canvas->canvasText(String(text) + String(v), x, y, 0xFFFF00,
                         k10.canvas->eCNAndENFont16, 50, true);
}

void setup() {
  k10.begin();
  k10.initScreen(2);
  ai.initAi();
  k10.initBgCamerImage();
  k10.setBgCamerImage(false);
  k10.creatCanvas();
  ai.switchAiMode(ai.NoMode);
  k10.setBgCamerImage(true);
  ai.switchAiMode(ai.Face);
}

void loop() {
  if (ai.isDetectContent(AIRecognition::Face)) {
    int h = ai.getFaceData(AIRecognition::Length);
    int w = ai.getFaceData(AIRecognition::Width);
    int x = ai.getFaceData(AIRecognition::CenterX);
    int y = ai.getFaceData(AIRecognition::CenterY);

    display("Face H: ", h, 0, 0);
    display("Face W: ", w, 0, 20);
    display("Face X: ", x, 0, 40);
    display("Face Y: ", y, 0, 60);
    k10.canvas->updateCanvas();
  }
  delay(100);
}

Este código funciona apenas quando carregado com o Mind+ IDE.

Veja o ai-face-detection exemplo para uma demonstração do código.

Exemplo de Código: Reconhecimento Facial

O nosso último exemplo realiza reconhecimento facial. Permite aprender e detetar rostos específicos. Aponte a câmara da placa para um rosto, espere que a caixa delimitadora apareça e depois pressione o botão A da placa para aprender esse rosto. O LED fica verde quando um rosto é aprendido. Depois pressione o botão B para reconhecer rostos. O ID do rosto reconhecido é impresso no ecrã.

// www.makerguides.com
// UNIHIKER K10 core 0.0.3

#include "unihiker_k10.h"
#include "AIRecognition.h"

UNIHIKER_K10 k10;
AIRecognition ai;

void onButtonALearn() {
  ai.sendFaceCmd(ENROLL);
  k10.rgb->write(-1, 0x00FF00);
}

void onButtonBRecognize() {
  ai.sendFaceCmd(RECOGNIZE);
  k10.rgb->write(-1, 0x0000FF);
}

void setup() {
  k10.begin();
  k10.initScreen(2);
  ai.initAi();
  k10.initBgCamerImage();
  k10.setBgCamerImage(false);
  k10.creatCanvas();
  ai.switchAiMode(ai.NoMode);
  k10.buttonA->setPressedCallback(onButtonALearn);
  k10.buttonB->setPressedCallback(onButtonBRecognize);
  k10.setBgCamerImage(true);
  ai.switchAiMode(ai.Face);
}

void loop() {
  k10.rgb->write(-1, 0x000000);
  if (ai.isRecognized()) {
    int fid = ai.getRecognitionID();
    k10.canvas->canvasText((String("Face ID: ") + String(fid)), 0, 0,
                           0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
    k10.canvas->updateCanvas();
  }
}

A placa armazena os IDs dos rostos aprendidos em memória não volátil, permanecendo mesmo após reiniciar a placa. Para esquecer todos os rostos aprendidos, pode usar o comando ai.sendFaceCmd(DELETEALL). Para esquecer um rosto específico, use ai.sendFaceCmd(DELETE, id). Veja o ai-face-recognition exemplo para uma demonstração do código.

Este código funciona apenas quando carregado com o Mind+ IDE.

Resolução de Problemas: Carregar código com Arduino IDE

Como mencionado, alguns exemplos de código não funcionam quando carregados via Arduino IDE. O código compila e o upload é bem-sucedido, mas o UNIHIKER K10 bloqueia e fica sem resposta.

Curiosamente, todos os exemplos funcionam perfeitamente quando compilados e carregados com o Mind+ IDE. Portanto, não é um problema de hardware da placa UNIHIKER K10, mas parece estar relacionado com o software core do UNIHIKER K10, que ainda está na versão 0.0.3 em fev 2026.

Se carregar código usando o Arduino IDE e a placa UNIHIKER K10 ficar sem resposta, feche o Arduino IDE e carregue o código ou grave o firmware usando o Mind+ IDE. Verifiquei que isto “reseta” a placa e depois pode ser gravada novamente via Arduino IDE.

Conclusões

Neste tutorial aprendeu a programar a placa UNIHIKER K10 AI usando o Arduino IDE ou o Mind+ IDE. Os exemplos mostraram como controlar o ecrã e os LEDs, e como realizar reconhecimento de voz e facial. Para mais exemplos veja o WiKi para o UNIHIKER K10. Veja também o code reference para a placa.

O UNIHIKER K10 facilita muito o uso de algoritmos de IA como reconhecimento de voz e deteção facial. Especialmente o reconhecimento de voz é fácil de programar, funciona offline com baixa latência e alta precisão. Para projetos simples de controlo por voz, é ideal.

Infelizmente, o suporte para Arduino IDE e a documentação são algo limitados. Por exemplo, não existe um repositório github para a biblioteca K10 e a documentação está incompleta. Além disso, o código de reconhecimento de voz pode ser gravado com Arduino IDE, mas não o de reconhecimento facial. Para isso, precisa usar o Mind+.

Comparado com placas de visão AI similares como o HUSKYLENS ou o HUSKYLENS 2, o UNIHIKER K10 é menos potente e tem menos modelos de visão AI integrados. Por outro lado, não requer um segundo microcontrolador para processar os resultados da deteção e o consumo total de energia é muito menor.

Comparado com o MaTouch AI ESP32S3 TFT ou o DFRobot ESP32-S3 AI Camera, o UNIHIKER K10 vem com uma boa biblioteca que torna a programação de aplicações de visão AI e reconhecimento de voz realmente fácil.

Se tiver alguma dúvida, sinta-se à vontade para deixar nos comentários.

Boas criações 😉