feat(i18n): finish zh-CN example comments and align Strapping term with the glossary

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Sonnet 5.5 committed 2026-11-01 22:11:17 -03:00
1 parent 1d79051250
commit 2b73b57ee6
12 files changed
+84 -84

No files matched your search

+10 -10
View File
@@ -1,8 +1,8 @@
/*
* Exemplo ESP-IoT-Solution para ESP32
* Inicialização de Botão Inteligente com Callbacks e Driver de Display/Sensores
* 面向 ESP32 的 ESP-IoT-Solution 示例
* 智能按键初始化,包含回调和显示屏/传感器驱动
*
* Dependência (idf_component.yml):
* 依赖(idf_component.yml):
* espressif/button: "^3.3.0"
* espressif/led_indicator: "^1.2.0"
*/
@@ -16,19 +16,19 @@
static const char *TAG = "iot_solution_app";
#define BUTTON_GPIO_NUM 0 // Botão BOOT nativo
#define LED_INDICATOR_GPIO 2 // LED indicador
#define BUTTON_GPIO_NUM 0 // 原生 BOOT 按键
#define LED_INDICATOR_GPIO 2 // 指示 LED
static led_indicator_handle_t led_handle = NULL;
/* Callback para clique único do botão */
/* 按键单击回调 */
static void button_single_click_cb(void *arg, void *data)
{
ESP_LOGI(TAG, "Evento: Clique Único detectado!");
led_indicator_start(led_handle, BLINK_DOUBLE_FAST);
}
/* Callback para clique longo (> 3 segundos) */
/* 长按回调(> 3 秒) */
static void button_long_press_cb(void *arg, void *data)
{
ESP_LOGW(TAG, "Evento: Pressionamento Longo! Acionando modo de reset de fábrica.");
@@ -39,14 +39,14 @@ void app_main(void)
{
ESP_LOGI(TAG, "Iniciando ESP-IoT-Solution Component Suite");
// 1. Configuração do LED Indicator
// 1. LED Indicator 配置
led_indicator_gpio_config_t led_cfg = {
.is_active_level_high = true,
.gpio_num = LED_INDICATOR_GPIO,
};
led_handle = led_indicator_create(&led_cfg);
// 2. Configuração do Botão com debounce de hardware/software automático
// 2. 按键配置,自动进行硬件/软件消抖
button_config_t btn_cfg = {
.type = BUTTON_TYPE_GPIO,
.long_press_time = 3000,
@@ -60,7 +60,7 @@ void app_main(void)
button_handle_t btn_handle = iot_button_create(&btn_cfg);
assert(btn_handle != NULL);
// Registra callbacks para diferentes gestos
// 为不同手势注册回调
iot_button_register_cb(btn_handle, BUTTON_SINGLE_CLICK, button_single_click_cb, NULL);
iot_button_register_cb(btn_handle, BUTTON_LONG_PRESS_START, button_long_press_cb, NULL);
+3 -3
View File
@@ -26,18 +26,18 @@ void app_event_cb(const esp_matter_event_t *event)
void app_main(void)
{
// Inicializa NVS
// 初始化 NVS
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ESP_ERROR_CHECK(nvs_flash_init());
}
// Inicializa o Matter node
// 初始化 Matter 节点
esp_matter::node_t *node = esp_matter::node::create(NULL, app_event_cb);
esp_matter::endpoint_t *endpoint = esp_matter::endpoint::create(node, ESP_MATTER_ENDPOINT_TYPE_ON_OFF_LIGHT);
// Inicia o stack Matter
// 启动 Matter 协议栈
ESP_ERROR_CHECK(esp_matter::start(node));
ESP_LOGI(TAG, "Dispositivo Matter iniciado. Aguardando comissionamento...");
+6 -6
View File
@@ -15,29 +15,29 @@ void print_array(const char *label, int16_t *array, int size) {
void app_main(void)
{
// Vetor de entrada (ex: saída de uma camada anterior)
// 输入向量(例如上一层的输出)
int16_t input[INPUT_SIZE] = {1, 2, 3, 4};
// Pesos da camada densa (3x4)
// 全连接层权重(3x4)
int8_t weights[OUTPUT_SIZE * INPUT_SIZE] = {
1, -1, 2, 0,
0, 1, -1, 1,
2, 0, 1, -2
};
// Bias de cada neurônio
// 每个神经元的偏置
int16_t bias[OUTPUT_SIZE] = {10, -5, 0};
// Saída
// 输出
int16_t output[OUTPUT_SIZE];
// Multiplicação da matriz: output = weights * input + bias
// 矩阵乘法:output = weights * input + bias
esp_nn_mul_mat_16x8_16(weights, input, bias, output,
OUTPUT_SIZE, INPUT_SIZE, /*shift=*/0);
print_array("Antes da ReLU", output, OUTPUT_SIZE);
// Aplicar função de ativação ReLU
// 应用 ReLU 激活函数
esp_nn_relu_16(output, OUTPUT_SIZE);
print_array("Depois da ReLU", output, OUTPUT_SIZE);
+10 -10
View File
@@ -1,8 +1,8 @@
/*
* Exemplo ESP-NOW para ESP32
* Comunicação Sem Fio Ponto-a-Ponto e Broadcast sem roteador Wi-Fi
* 面向 ESP32 的 ESP-NOW 示例
* 无需 Wi-Fi 路由器的点对点无线通信和广播
*
* Protocolo nativo integrado no ESP-IDF
* ESP-IDF 内置的原生协议
*/
#include <stdio.h>
@@ -16,7 +16,7 @@
static const char *TAG = "esp_now_demo";
// Estrutura de dados enviada no pacote
// 数据包中发送的数据结构
typedef struct {
uint32_t sensor_id;
float temperatura;
@@ -24,16 +24,16 @@ typedef struct {
uint32_t tempo_ms;
} __attribute__((packed)) dados_pacote_t;
// Endereço MAC de Broadcast (envia para todos os nós ESP-NOW por perto)
// 广播 MAC 地址(发送给附近所有 ESP-NOW 节点)
static const uint8_t broadcast_mac[ESP_NOW_ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
/* Callback executado ao enviar um pacote */
/* 发送数据包时执行的回调 */
static void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
{
ESP_LOGI(TAG, "Envio concluído: %s", status == ESP_NOW_SEND_SUCCESS ? "SUCESSO (ACK)" : "FALHA");
}
/* Callback executado ao receber um pacote de outro ESP32 */
/* 接收其他 ESP32 数据包时执行的回调 */
static void on_data_recv(const esp_now_recv_info_t *recv_info, const uint8_t *data, int len)
{
if (len == sizeof(dados_pacote_t)) {
@@ -47,7 +47,7 @@ static void on_data_recv(const esp_now_recv_info_t *recv_info, const uint8_t *da
void app_main(void)
{
// Inicializa NVS e Wi-Fi em modo Station
// 以 Station 模式初始化 NVS 和 Wi-Fi
nvs_flash_init();
esp_netif_init();
esp_event_loop_create_default();
@@ -56,12 +56,12 @@ void app_main(void)
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_start();
// Inicializa o protocolo ESP-NOW
// 初始化 ESP-NOW 协议
ESP_ERROR_CHECK(esp_now_init());
esp_now_register_send_cb(on_data_sent);
esp_now_register_recv_cb(on_data_recv);
// Registra o peer de Broadcast
// 注册广播对端
esp_now_peer_info_t peer_info = {
.channel = 1,
.ifidx = WIFI_IF_STA,
+13 -13
View File
@@ -1,8 +1,8 @@
/*
* Exemplo ESP-RainMaker para ESP32
* Dispositivo: Interruptor Inteligente com controle via App e Nuvem
* 面向 ESP32 的 ESP-RainMaker 示例
* 设备:可通过应用和云端控制的智能开关
*
* Dependência (idf_component.yml):
* 依赖(idf_component.yml):
* espressif/esp_rainmaker: "^1.4.0"
*/
@@ -21,7 +21,7 @@
static const char *TAG = "app_rainmaker";
static esp_rmaker_device_t *switch_device;
/* Callback acionado quando o usuário altera o estado no App móvel */
/* 用户在移动应用中更改状态时触发的回调 */
static esp_err_t write_cb(const esp_rmaker_device_t *dev, const esp_rmaker_param_val_t val, void *priv_data, esp_rmaker_write_ctx_t *ctx)
{
if (ctx) {
@@ -31,14 +31,14 @@ static esp_err_t write_cb(const esp_rmaker_device_t *dev, const esp_rmaker_param
bool state = val.val.b;
ESP_LOGI(TAG, "Estado do interruptor alterado para: %s", state ? "LIGADO" : "DESLIGADO");
// Atualiza o parâmetro na nuvem e no aplicativo
// 更新云端和应用中的参数
esp_rmaker_param_update_and_report(priv_data, val);
return ESP_OK;
}
void app_main(void)
{
// Inicialização da memória não-volátil (NVS)
// 初始化非易失性存储(NVS)
esp_err_t err = nvs_flash_init();
if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
@@ -46,30 +46,30 @@ void app_main(void)
}
ESP_ERROR_CHECK(err);
// Inicializa o provisionamento Wi-Fi
// 初始化 Wi-Fi 配网
app_wifi_init();
// Configura o nó RainMaker
// 配置 RainMaker 节点
esp_rmaker_config_t rainmaker_cfg = {
.enable_time_sync = true,
};
esp_rmaker_node_t *node = esp_rmaker_node_init(&rainmaker_cfg, "ESP32_SmartSwitch", "Switch");
// Cria o dispositivo padrão 'Switch'
// 创建默认的 'Switch' 设备
switch_device = esp_rmaker_switch_device_create("Luz Sala", NULL, true);
// Registra callback de escrita
// 注册写回调
esp_rmaker_device_add_cb(switch_device, write_cb, NULL);
esp_rmaker_node_add_device(node, switch_device);
// Habilita serviços adicionais (OTA e Timezone)
// 启用附加服务(OTA 和时区)
esp_rmaker_ota_enable_default();
esp_rmaker_timezone_service_enable();
// Inicia o agente RainMaker
// 启动 RainMaker 代理
esp_rmaker_start();
// Inicia o provisionamento Wi-Fi via BLE (abre no app oficial RainMaker)
// 通过 BLE 启动 Wi-Fi 配网(在官方 RainMaker 应用中打开)
app_wifi_start(POP_TYPE_RANDOM);
ESP_LOGI(TAG, "Nó RainMaker pronto! Escaneie o QR Code no app ESP RainMaker.");
+10 -10
View File
@@ -1,8 +1,8 @@
/*
* Exemplo ESP-SR para ESP32-S3 / ESP32-P4
* Reconhecimento de Fala Local Offline (WakeNet + MultiNet)
* 面向 ESP32-S3 / ESP32-P4 的 ESP-SR 示例
* 离线本地语音识别(WakeNet + MultiNet)
*
* Dependência (idf_component.yml):
* 依赖(idf_component.yml):
* espressif/esp-sr: "^1.5.0"
*/
@@ -27,7 +27,7 @@ void feed_audio_task(void *arg)
int16_t *feed_buff = (int16_t *)malloc(audio_chunksize * sizeof(int16_t) * 2);
while (1) {
// Leitura de áudio I2S dos microfones da placa
// 从开发板麦克风读取 I2S 音频
// i2s_read(I2S_NUM_0, feed_buff, ...);
afe_handle->feed(afe_data, feed_buff);
@@ -42,7 +42,7 @@ void speech_recognition_task(void *arg)
esp_afe_sr_data_t *afe_data = (esp_afe_sr_data_t *)arg;
const esp_afe_sr_iface_t *afe_handle = &ESP_AFE_SR_HANDLE;
// Inicializa o modelo de comandos de fala (MultiNet)
// 初始化语音命令模型(MultiNet)
const esp_mn_iface_t *multinet = &ESP_MN_HANDLE;
model_iface_data_t *model_data = multinet->create(&MULTINET_MODEL, 6000);
@@ -54,12 +54,12 @@ void speech_recognition_task(void *arg)
continue;
}
// 1. Verificação de Wake Word (Palavra de ativação)
// 1. 唤醒词(Wake Word)检测
if (res->wake_word_detected == WAKENET_DETECTED) {
ESP_LOGW(TAG, ">>> PALAVRA-CHAVE DETECTADA! Canal de escuta aberto.");
}
// 2. Reconhecimento de comando local
// 2. 本地命令识别
if (res->raw_data_size > 0) {
esp_mn_state_t mn_state = multinet->detect(model_data, res->data);
@@ -67,7 +67,7 @@ void speech_recognition_task(void *arg)
esp_mn_results_t *mn_res = multinet->get_results(model_data);
ESP_LOGI(TAG, ">>> COMANDO RECONHECIDO: ID #%d (Frase correspondente)", mn_res->command_id[0]);
// Exemplo de ação
// 操作示例
if (mn_res->command_id[0] == 1) {
ESP_LOGI(TAG, "Ação: Ligar Luz da Sala");
} else if (mn_res->command_id[0] == 2) {
@@ -85,14 +85,14 @@ void app_main(void)
{
ESP_LOGI(TAG, "Iniciando ESP-SR Speech Recognition Engine");
// Configura o pipeline de Audio Front-End (AEC, BSS, VAD, WakeNet)
// 配置音频前端流水线(AEC、BSS、VAD、WakeNet)
afe_config_t afe_config = AFE_CONFIG_DEFAULT();
afe_config.wakenet_init = true;
afe_config.voice_communication_init = false;
esp_afe_sr_data_t *afe_data = ESP_AFE_SR_HANDLE.create_from_config(&afe_config);
// Cria as tarefas de alimentação de áudio e reconhecimento
// 创建音频输入和识别任务
xTaskCreatePinnedToCore(feed_audio_task, "feed_task", 4096, afe_data, 5, NULL, 0);
xTaskCreatePinnedToCore(speech_recognition_task, "sr_task", 8192, afe_data, 5, NULL, 1);
}
+2 -2
View File
@@ -4,7 +4,7 @@
#include "human_face_detect_msr01.hpp"
#include "human_face_detect_mnp01.hpp"
#define CAMERA_MODEL_AI_THINKER // ou o modelo da sua placa
#define CAMERA_MODEL_AI_THINKER // 或你的开发板型号
#include "camera_pins.h"
@@ -52,7 +52,7 @@ void loop() {
return;
}
// Detecta rostos na imagem
// 检测图像中的人脸
box_array_t *faces = face_detect_msr01(fb->buf, fb->width, fb->height, fb->format);
if (faces) {
Serial.printf("Rostos detectados: %d\n", faces->len);
+10 -10
View File
@@ -1,8 +1,8 @@
/*
* Exemplo ESP-Zigbee-SDK para ESP32-H2 e ESP32-C6 (IEEE 802.15.4)
* Dispositivo: Lâmpada Inteligente Zigbee 3.0 (Home Automation End Device)
* 面向 ESP32-H2 和 ESP32-C6 的 ESP-Zigbee-SDK 示例(IEEE 802.15.4)
* 设备:Zigbee 3.0 智能灯(Home Automation End Device)
*
* Dependência (idf_component.yml):
* 依赖(idf_component.yml):
* espressif/esp-zigbee-lib: "^1.6.0"
*/
@@ -16,9 +16,9 @@
static const char *TAG = "zigbee_light_device";
#define HA_ESP_LIGHT_ENDPOINT 1
#define ESP_ZB_PRIMARY_CHANNEL_MASK (1l << 15) // Canal 15 padrão Zigbee
#define ESP_ZB_PRIMARY_CHANNEL_MASK (1l << 15) // Zigbee 默认信道 15
/* Callback de escrita em atributos Zigbee (ex: Liga/Desliga via Home Assistant) */
/* Zigbee 属性写入回调(例如通过 Home Assistant 开关) */
static esp_err_t zb_attribute_handler(const esp_zb_zcl_set_attr_value_message_t *message)
{
if (message->info.cluster == ESP_ZB_ZCL_CLUSTER_ID_ON_OFF) {
@@ -31,7 +31,7 @@ static esp_err_t zb_attribute_handler(const esp_zb_zcl_set_attr_value_message_t
return ESP_OK;
}
/* Callback de eventos da pilha Zigbee */
/* Zigbee 协议栈事件回调 */
void esp_zb_app_signal_handler(esp_zb_app_signal_msg_t *signal_msg)
{
uint32_t *p_sg_p = signal_msg->p_app_signal;
@@ -58,7 +58,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_msg_t *signal_msg)
static void esp_zb_task(void *pvParameters)
{
// Configura nó Zigbee como End Device
// 将 Zigbee 节点配置为 End Device
esp_zb_cfg_t zb_nwk_cfg = {
.esp_zb_role = ESP_ZB_DEVICE_TYPE_ED,
.install_code_policy = false,
@@ -69,11 +69,11 @@ static void esp_zb_task(void *pvParameters)
};
esp_zb_init(&zb_nwk_cfg);
// Cria o cluster de On/Off de iluminação residencial
// 创建住宅照明 On/Off 集群
esp_zb_on_off_light_cfg_t light_cfg = ESP_ZB_DEFAULT_ON_OFF_LIGHT_CONFIG();
esp_zb_ep_list_t *ep_list = esp_zb_on_off_light_ep_create(HA_ESP_LIGHT_ENDPOINT, &light_cfg);
// Registra endpoint e manipulador de atributos
// 注册端点和属性处理程序
esp_zb_device_register(ep_list);
esp_zb_core_action_handler_register(zb_attribute_handler);
@@ -86,7 +86,7 @@ void app_main(void)
{
ESP_ERROR_CHECK(nvs_flash_init());
// Inicializa a pilha de rádio IEEE 802.15.4
// 初始化 IEEE 802.15.4 射频协议栈
esp_zb_platform_config_t config = {
.radio_config = { .radio_mode = ZB_RADIO_MODE_NATIVE },
.host_config = { .host_connection_mode = ZB_HOST_CONNECTION_MODE_NONE },
+5 -5
View File
@@ -1,11 +1,11 @@
from machine import Pin
from time import sleep
# Define o pino 2 como saída (geralmente o LED embutido)
# 将引脚 2 定义为输出(通常是板载 LED)
led = Pin(2, Pin.OUT)
while True:
led.value(1) # Liga o LED
sleep(0.5) # Aguarda 0,5 segundos
led.value(0) # Desliga o LED
sleep(0.5) # Aguarda 0,5 segundos
led.value(1) # 点亮 LED
sleep(0.5) # 等待 0.5 秒
led.value(0) # 关闭 LED
sleep(0.5) # 等待 0.5 秒
+5 -5
View File
@@ -1,5 +1,5 @@
//! Exemplo Rust no ESP32 usando `esp-hal` (Modo Bare-Metal / no_std)
//! Pisca um LED e envia mensagens via UART Serial com segurança de memória garantida.
//! 使用 `esp-hal` 在 ESP32 上运行 Rust 的示例(裸机 / no_std 模式)
//! 闪烁 LED 并通过 UART 串口发送消息,同时提供内存安全保障。
//!
//! Cargo.toml:
//! esp-hal = { version = "0.22", features = ["esp32s3"] }
@@ -22,12 +22,12 @@ use esp_println::println;
#[entry]
fn main() -> ! {
// Inicializa periféricos do SoC com verificação em tempo de compilação
// 在编译期检查的前提下初始化 SoC 外设
let peripherals = Peripherals::take();
let system = SystemControl::new(peripherals.SYSTEM);
let clocks = ClockControl::boot_defaults(system.clock_control).freeze();
// Configura os pinos de E/S
// 配置 I/O 引脚
let io = Io::new(peripherals.GPIO, peripherals.IO_MUX);
let mut led = Output::new(io.pins.gpio2, Level::Low);
@@ -38,7 +38,7 @@ fn main() -> ! {
let mut counter: u32 = 0;
loop {
// Inverte estado do LED com garantia de exclusão mútua
// 在保证互斥的前提下翻转 LED 状态
led.toggle();
counter += 1;