diff --git a/lib/data/zh-CN/diagnostico.js b/lib/data/zh-CN/diagnostico.js index cac37a7..d35496d 100644 --- a/lib/data/zh-CN/diagnostico.js +++ b/lib/data/zh-CN/diagnostico.js @@ -11,7 +11,7 @@ export const categoriasDiagnostico = [ nome: "供电与硬件", icone: "Zap", cor: "amber", - descricao: "Wi-Fi/BLE 射频峰值引起的电压跌落、冲突的 Strapping 引脚、电磁噪声以及 LDO 问题。", + descricao: "Wi-Fi/BLE 射频峰值引起的电压跌落、冲突的 启动配置引脚、电磁噪声以及 LDO 问题。", }, { id: "cpu-panics", @@ -128,18 +128,18 @@ else: }, { id: "strapping-pins", - titulo: "启动时 Strapping 引脚冲突", + titulo: "启动时 启动配置引脚冲突", categoria: "alimentacao", sintomas: ["bootloop", "upload-fail"], gravidade: "严重", logSerial: "rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)\nflash read err, 1000\nwaiting for download", - resumo: "ESP32 无法从闪存启动固件,或意外进入下载模式,原因是某个 Strapping 引脚在复位时被强制到了错误的逻辑电平。", + resumo: "ESP32 无法从闪存启动固件,或意外进入下载模式,原因是某个 启动配置引脚在复位时被强制到了错误的逻辑电平。", causaRaiz: - "在 EN/CHIP_PU 引脚拉高(上电复位)的瞬间,CPU 会对特定引脚(Strapping 引脚)的状态采样,以配置闪存电压(1.8V 或 3.3V)、启动模式(UART 下载或 SPI 闪存)和时钟输出。如果你在这些引脚上接了带上拉/下拉的传感器、继电器或 LED,微控制器读到的就是无效逻辑电平,启动随之卡住。", + "在 EN/CHIP_PU 引脚拉高(上电复位)的瞬间,CPU 会对特定引脚(启动配置引脚)的状态采样,以配置闪存电压(1.8V 或 3.3V)、启动模式(UART 下载或 SPI 闪存)和时钟输出。如果你在这些引脚上接了带上拉/下拉的传感器、继电器或 LED,微控制器读到的就是无效逻辑电平,启动随之卡住。", gambiarra: { titulo: "在代码里加延时,或每次上电都手动拔线", descricao: "试图在 setup() 里用软件解决问题,或依赖每次重启前手动断开连线。", - consequencia: "没用:Strapping 引脚由硬件读取,此时 CPU 还没有加载你的代码或引导加载程序中的任何一行。", + consequencia: "没用:启动配置引脚由硬件读取,此时 CPU 还没有加载你的代码或引导加载程序中的任何一行。", }, solucaoEngenharia: { titulo: "安全的 GPIO 分配与复位期间隔离", @@ -734,10 +734,10 @@ export const regrasDecodificadorLog = [ }, { padrao: /rst:0x1 \(POWERON_RESET\),boot:0x[0-9a-fA-F]+/i, - titulo: "上电复位 / Strapping 引脚", + titulo: "上电复位 / 启动配置引脚", tipo: "硬件 / 启动", explicacao: - "微控制器重启并报告了 Strapping 引脚寄存器。如果之后卡住,可能是某个启动引脚处于错误的逻辑电平。", + "微控制器重启并报告了 启动配置引脚寄存器。如果之后卡住,可能是某个启动引脚处于错误的逻辑电平。", acaoRecomendada: "检查 GPIO 0、2、12、15(ESP32)或 8、9(C3)是否连着在启动时会强制出错误电平的电阻或外设。", }, diff --git a/lib/data/zh-CN/glossario.js b/lib/data/zh-CN/glossario.js index 8344638..8035b21 100644 --- a/lib/data/zh-CN/glossario.js +++ b/lib/data/zh-CN/glossario.js @@ -116,7 +116,7 @@ export const categoriasGlossario = [ { termo: "启动 ROM", definicao: "乐鑫在出厂时永久写入的只读存储器,包含一级引导加载程序(First-Stage Bootloader)、数学表和基础初始化例程,永远无法修改。", - exemplo: "上电后 ROM 最先运行,检查 Strapping 引脚,然后从闪存加载用户的引导加载程序。", + exemplo: "上电后 ROM 最先运行,检查 启动配置引脚,然后从闪存加载用户的引导加载程序。", }, { termo: "SPI 闪存(Quad-SPI 与 Octal-SPI)", @@ -206,7 +206,7 @@ export const categoriasGlossario = [ icone: "Sliders", emoji: "🔌", cor: "amber", - descricao: "GPIO 引脚、Strapping 引脚、ADC/DAC 转换器、PWM/LEDC、MCPWM、RMT、PCNT、TWAI®/CAN、I2C、SPI 与 I2S。", + descricao: "GPIO 引脚、启动配置引脚、ADC/DAC 转换器、PWM/LEDC、MCPWM、RMT、PCNT、TWAI®/CAN、I2C、SPI 与 I2S。", termos: [ { termo: "GPIO(通用输入输出)", @@ -214,7 +214,7 @@ export const categoriasGlossario = [ exemplo: "用 `gpio_set_level()` 或 `digitalWrite()` 读取按键、控制继电器和 LED。", }, { - termo: "Strapping 引脚", + termo: "启动配置引脚(Strapping)", definicao: "特定的 GPIO 引脚,芯片在复位释放的那一毫秒由硬件采样,以决定启动模式(UART 下载与 SPI 闪存启动)和电压电平。", exemplo: "经典 ESP32/S3 的 GPIO 0 或 ESP32-C3 的 GPIO 9:复位期间若被拉低,芯片会进入固件烧录模式。", }, diff --git a/public/exemplos/zh-CN/esp-iot-solution.c b/public/exemplos/zh-CN/esp-iot-solution.c index 2285010..8a66929 100644 --- a/public/exemplos/zh-CN/esp-iot-solution.c +++ b/public/exemplos/zh-CN/esp-iot-solution.c @@ -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); diff --git a/public/exemplos/zh-CN/esp-matter.c b/public/exemplos/zh-CN/esp-matter.c index a39b46b..6fb47ad 100644 --- a/public/exemplos/zh-CN/esp-matter.c +++ b/public/exemplos/zh-CN/esp-matter.c @@ -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..."); diff --git a/public/exemplos/zh-CN/esp-nn.c b/public/exemplos/zh-CN/esp-nn.c index 9f4c1bf..1ea0201 100644 --- a/public/exemplos/zh-CN/esp-nn.c +++ b/public/exemplos/zh-CN/esp-nn.c @@ -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); diff --git a/public/exemplos/zh-CN/esp-now.c b/public/exemplos/zh-CN/esp-now.c index ddfab5b..5b2d00d 100644 --- a/public/exemplos/zh-CN/esp-now.c +++ b/public/exemplos/zh-CN/esp-now.c @@ -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 @@ -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, diff --git a/public/exemplos/zh-CN/esp-rainmaker.c b/public/exemplos/zh-CN/esp-rainmaker.c index 19bdf01..b6de65e 100644 --- a/public/exemplos/zh-CN/esp-rainmaker.c +++ b/public/exemplos/zh-CN/esp-rainmaker.c @@ -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."); diff --git a/public/exemplos/zh-CN/esp-sr.c b/public/exemplos/zh-CN/esp-sr.c index a4cd9a1..068cb77 100644 --- a/public/exemplos/zh-CN/esp-sr.c +++ b/public/exemplos/zh-CN/esp-sr.c @@ -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); } diff --git a/public/exemplos/zh-CN/esp-who.c b/public/exemplos/zh-CN/esp-who.c index 0e9150a..fc4b718 100644 --- a/public/exemplos/zh-CN/esp-who.c +++ b/public/exemplos/zh-CN/esp-who.c @@ -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); diff --git a/public/exemplos/zh-CN/esp-zigbee.c b/public/exemplos/zh-CN/esp-zigbee.c index a3e5bb6..f64a156 100644 --- a/public/exemplos/zh-CN/esp-zigbee.c +++ b/public/exemplos/zh-CN/esp-zigbee.c @@ -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 }, diff --git a/public/exemplos/zh-CN/micropython.py b/public/exemplos/zh-CN/micropython.py index 36a1d27..bbe4a31 100644 --- a/public/exemplos/zh-CN/micropython.py +++ b/public/exemplos/zh-CN/micropython.py @@ -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 秒 diff --git a/public/exemplos/zh-CN/rust-esp.rs b/public/exemplos/zh-CN/rust-esp.rs index 17288c3..420453e 100644 --- a/public/exemplos/zh-CN/rust-esp.rs +++ b/public/exemplos/zh-CN/rust-esp.rs @@ -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;