feat(i18n): Simplified Chinese (zh-CN), search answers per locale, fr/de/es data fixes
CI / Lint e auditorias (push) Successful in 1m10s
CI / Trivy (dependências e segredos) (push) Successful in 12s
CI / Imagem Docker (linux/arm64) (push) Successful in 2m39s
Release / Plano (reaproveitar a imagem?) (push) Successful in 6s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 18s
Release / Cria a release no Gitea (push) Successful in 5s
CI / Lint e auditorias (push) Successful in 1m10s
CI / Trivy (dependências e segredos) (push) Successful in 12s
CI / Imagem Docker (linux/arm64) (push) Successful in 2m39s
Release / Plano (reaproveitar a imagem?) (push) Successful in 6s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 18s
Release / Cria a release no Gitea (push) Successful in 5s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ae61416468
commit
5a9fe676fc
61 files changed
+2517
-920
No files matched your search
@@ -8,7 +8,7 @@ void setup() {
|
||||
Serial.begin(115200);
|
||||
delay(1000);
|
||||
|
||||
Serial.println("Conectando ao Wi-Fi...");
|
||||
Serial.println("Connecting to Wi-Fi...");
|
||||
WiFi.begin(ssid, password);
|
||||
|
||||
// 等待连接
|
||||
|
||||
@@ -25,7 +25,7 @@ void app_main(void)
|
||||
// 等待 SD 卡挂载
|
||||
periph_sdcard_wait_for_ready(sdcard_handle, portMAX_DELAY);
|
||||
|
||||
ESP_LOGI(TAG, "SD card montado!");
|
||||
ESP_LOGI(TAG, "SD card mounted!");
|
||||
|
||||
// 创建流水线
|
||||
audio_pipeline_handle_t pipeline;
|
||||
|
||||
@@ -16,7 +16,7 @@ void app_main(void)
|
||||
return;
|
||||
}
|
||||
|
||||
printf("Sinal de entrada:\n");
|
||||
printf("Input signal:\n");
|
||||
for (int i = 0; i < N; i++) {
|
||||
printf("%f ", x[i]);
|
||||
}
|
||||
@@ -33,5 +33,5 @@ void app_main(void)
|
||||
// 计算幅值(平方和的平方根)
|
||||
float magnitude = sqrtf(soma);
|
||||
|
||||
printf("Magnitude do vetor: %f\n", magnitude);
|
||||
printf("Vector magnitude: %f\n", magnitude);
|
||||
}
|
||||
@@ -31,8 +31,8 @@ static void blink_task(void *pvParameters)
|
||||
led_state = !led_state;
|
||||
gpio_set_level(BLINK_GPIO, led_state);
|
||||
|
||||
ESP_LOGI(TAG, "LED %s | Heap livre: %lu bytes",
|
||||
led_state ? "LIGADO" : "DESLIGADO",
|
||||
ESP_LOGI(TAG, "LED %s | Free heap: %lu bytes",
|
||||
led_state ? "ON" : "OFF",
|
||||
(unsigned long)esp_get_free_heap_size());
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
|
||||
@@ -24,7 +24,7 @@ static led_indicator_handle_t led_handle = NULL;
|
||||
/* 按键单击回调 */
|
||||
static void button_single_click_cb(void *arg, void *data)
|
||||
{
|
||||
ESP_LOGI(TAG, "Evento: Clique Único detectado!");
|
||||
ESP_LOGI(TAG, "Event: single click detected!");
|
||||
led_indicator_start(led_handle, BLINK_DOUBLE_FAST);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@ void app_main(void)
|
||||
esp_nn_mul_mat_16x8_16(weights, input, bias, output,
|
||||
OUTPUT_SIZE, INPUT_SIZE, /*shift=*/0);
|
||||
|
||||
print_array("Antes da ReLU", output, OUTPUT_SIZE);
|
||||
print_array("Before ReLU", output, OUTPUT_SIZE);
|
||||
|
||||
// 应用 ReLU 激活函数
|
||||
esp_nn_relu_16(output, OUTPUT_SIZE);
|
||||
|
||||
print_array("Depois da ReLU", output, OUTPUT_SIZE);
|
||||
print_array("After ReLU", output, OUTPUT_SIZE);
|
||||
}
|
||||
@@ -38,7 +38,7 @@ static void on_data_recv(const esp_now_recv_info_t *recv_info, const uint8_t *da
|
||||
{
|
||||
if (len == sizeof(dados_pacote_t)) {
|
||||
dados_pacote_t *pct = (dados_pacote_t *)data;
|
||||
ESP_LOGI(TAG, "Pacote recebido de [%02X:%02X:%02X:%02X:%02X:%02X]: Sensor #%ld | Temp: %.1f C | Umid: %.1f %%",
|
||||
ESP_LOGI(TAG, "Packet received from [%02X:%02X:%02X:%02X:%02X:%02X]: Sensor #%ld | Temp: %.1f C | Humidity: %.1f %%",
|
||||
recv_info->src_addr[0], recv_info->src_addr[1], recv_info->src_addr[2],
|
||||
recv_info->src_addr[3], recv_info->src_addr[4], recv_info->src_addr[5],
|
||||
pct->sensor_id, pct->temperatura, pct->umidade);
|
||||
|
||||
@@ -25,11 +25,11 @@ static esp_rmaker_device_t *switch_device;
|
||||
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) {
|
||||
ESP_LOGI(TAG, "Comando recebido via %s", esp_rmaker_device_cb_src_to_str(ctx->src));
|
||||
ESP_LOGI(TAG, "Command received via %s", esp_rmaker_device_cb_src_to_str(ctx->src));
|
||||
}
|
||||
|
||||
bool state = val.val.b;
|
||||
ESP_LOGI(TAG, "Estado do interruptor alterado para: %s", state ? "LIGADO" : "DESLIGADO");
|
||||
ESP_LOGI(TAG, "Switch state changed to: %s", state ? "ON" : "OFF");
|
||||
|
||||
// 更新云端和应用中的参数
|
||||
esp_rmaker_param_update_and_report(priv_data, val);
|
||||
|
||||
@@ -56,7 +56,7 @@ void speech_recognition_task(void *arg)
|
||||
|
||||
// 1. 唤醒词(Wake Word)检测
|
||||
if (res->wake_word_detected == WAKENET_DETECTED) {
|
||||
ESP_LOGW(TAG, ">>> PALAVRA-CHAVE DETECTADA! Canal de escuta aberto.");
|
||||
ESP_LOGW(TAG, ">>> WAKE WORD DETECTED! Listening channel open.");
|
||||
}
|
||||
|
||||
// 2. 本地命令识别
|
||||
@@ -65,7 +65,7 @@ void speech_recognition_task(void *arg)
|
||||
|
||||
if (mn_state == ESP_MN_STATE_DETECTED) {
|
||||
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]);
|
||||
ESP_LOGI(TAG, ">>> COMMAND RECOGNIZED: ID #%d (matching phrase)", mn_res->command_id[0]);
|
||||
|
||||
// 操作示例
|
||||
if (mn_res->command_id[0] == 1) {
|
||||
@@ -74,7 +74,7 @@ void speech_recognition_task(void *arg)
|
||||
ESP_LOGI(TAG, "Action: turn off the living room light");
|
||||
}
|
||||
} else if (mn_state == ESP_MN_STATE_TIMEOUT) {
|
||||
ESP_LOGI(TAG, "Tempo esgotado. Retornando ao modo de escuta de Wake Word.");
|
||||
ESP_LOGI(TAG, "Timeout. Returning to Wake Word listening mode.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ void loop() {
|
||||
// 检测图像中的人脸
|
||||
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);
|
||||
Serial.printf("Faces detected: %d\n", faces->len);
|
||||
for (int i = 0; i < faces->len; i++) {
|
||||
box_t *box = &faces->box[i];
|
||||
Serial.printf("Face %d - x:%d y:%d w:%d h:%d\n", i, box->box_p[0], box->box_p[1],
|
||||
@@ -63,7 +63,7 @@ void loop() {
|
||||
}
|
||||
dl_lib_free(faces);
|
||||
} else {
|
||||
Serial.println("Nenhum rosto detectado.");
|
||||
Serial.println("No face detected.");
|
||||
}
|
||||
|
||||
esp_camera_fb_return(fb);
|
||||
|
||||
@@ -25,7 +25,7 @@ static esp_err_t zb_attribute_handler(const esp_zb_zcl_set_attr_value_message_t
|
||||
if (message->attribute.id == ESP_ZB_ZCL_ATTR_ON_OFF_ON_OFF_ID &&
|
||||
message->attribute.data.type == ESP_ZB_ZCL_ATTR_TYPE_BOOL) {
|
||||
bool on_off_state = message->attribute.data.value ? *(bool *)message->attribute.data.value : false;
|
||||
ESP_LOGW(TAG, ">>> COMANDO ZIGBEE RECEBIDO: Lamp %s", on_off_state ? "ON" : "OFF");
|
||||
ESP_LOGW(TAG, ">>> ZIGBEE COMMAND RECEIVED: Lamp %s", on_off_state ? "ON" : "OFF");
|
||||
}
|
||||
}
|
||||
return ESP_OK;
|
||||
@@ -47,7 +47,7 @@ void esp_zb_app_signal_handler(esp_zb_app_signal_msg_t *signal_msg)
|
||||
if (err_status == ESP_OK) {
|
||||
ESP_LOGI(TAG, "Connected to the Zigbee 3.0 network!");
|
||||
} else {
|
||||
ESP_LOGW(TAG, "Buscando coordenador Zigbee novamente...");
|
||||
ESP_LOGW(TAG, "Searching for the Zigbee coordinator again...");
|
||||
esp_zb_scheduler_alarm((esp_zb_callback_t)esp_zb_bdb_start_top_level_commissioning, ESP_ZB_BDB_MODE_NETWORK_STEERING, 1000);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -33,7 +33,7 @@ fn main() -> ! {
|
||||
|
||||
let delay = Delay::new(&clocks);
|
||||
|
||||
println!("🦀 Firmware Rust Bare-Metal inicializado no ESP32!");
|
||||
println!("🦀 Rust bare-metal firmware initialized on ESP32!");
|
||||
|
||||
let mut counter: u32 = 0;
|
||||
|
||||
|
||||
Reference in new issue
Block a user